docker——k8s集群的创建以及图形化管理k8s集群
一.什么是k8s
二:k8s的部署过程
实验准备:此次实验k8s所需rpm包以及镜像都是1.15.0版本
| 主机 | 服务 |
|---|---|
| server1 | manager |
| server2 | node |
| server3 | node |
前提:
做这个实验前,我们因为做过swarm集群,所以需要将swarm集群删除,否则会跟k8s冲突,为了一个纯净的实验环境,我们需要进行以下操作:
server1:
1003 docker stack rm portainer
1001 docker stack ls
1004 docker volume prune
1011 docker node ls
1012 docker node rm server4 #在server4离开集群之后才能删除
1013 docker node rm server3 #在server3离开集群之后才能删除
1014 docker node rm server2 #在server2离开集群之后才能删除
1015 docker node ls
1017 docker swarm leave -f
1018 docker node ls #此时显示命令不可用,因为server1已经离开集群
1019 docker network prune
1020 docker network ls
1021 docker volume ls



最终结果图:

server2/3/4:
[root@server2 ~]# docker swarm leave #离开集群
Node left the swarm.



实验步骤如下:
在server1,server2,server3安装相应的软件
需要在每台机器上都安装以下的软件包:
-
kubeadm: 用来初始化集群的指令。
-
kubelet: 在集群中的每个节点上用来启动 pod 和 container 等。
-
kubectl: 用来与集群通信的命令行工具。
kubeadm 不能 帮您安装或管理 kubelet 或 kubectl ,所以您得保证他们满足通过 kubeadm 安装的 Kubernetes 控制层对版本的要求。如果版本没有满足要求,就有可能导致一些难以想到的错误或问题。然而控制层与 kubelet 间的 小版本号 不一致无伤大雅,不过请记住 kubelet 的版本不可以超过 API server 的版本。例如 1.8.0 的 API server 可以适配 1.7.0 的 kubelet,反之就不行了
第一步:安装k8s并关闭swap分区
在物理机上将k8s所需要的软件包都拷贝到我们需要做实验的虚拟机上面:

在server1/2/3安装k8s软件包:
[root@server1 rpm]# pwd
/mnt/rpm
[root@server1 rpm]# ls
cri-tools-1.13.0-0.x86_64.rpm kubelet-1.15.0-0.x86_64.rpm
kubeadm-1.15.0-0.x86_64.rpm kubernetes-cni-0.7.5-0.x86_64.rpm
kubectl-1.15.0-0.x86_64.rpm
[root@server1 rpm]# yum install -y *



server1/2/3关闭swap:
[root@server3 rpm]# swapoff -a
[root@server3 rpm]# vim /etc/fstab
[root@server3 rpm]# tail -n 1 /etc/fstab
#/dev/mapper/rhel-swap swap swap defaults 0 0




第二步:导入镜像
在物理机将镜像拷贝到虚拟机:

server1/2/3导入k8s镜像:
[root@server1 mnt]# cd k8s
[root@server1 k8s]# ls
coredns.tar kube-apiserver.tar kube-proxy.tar pause.tar
etcd.tar kube-controller-manager.tar kube-scheduler.tar
[root@server1 k8s]# for i in *.tar; do docker load -i $i ; done



第三步:配置k8s文件
server1:
[root@server1 k8s]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@server1 k8s]# sysctl --system
[root@server1 k8s]# sysctl net.bridge.bridge-nf-call-ip6tables
net.bridge.bridge-nf-call-ip6tables = 1
[root@server1 k8s]# sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1

拷贝文件给server2/3(为了方便跟不出错)
[root@server1 k8s]# cd /etc/sysctl.d/
[root@server1 sysctl.d]# ls
99-sysctl.conf k8s.conf
[root@server1 sysctl.d]# scp -r k8s.conf server2:/etc/sysctl.d/
k8s.conf 100% 79 0.1KB/s 00:00
[root@server1 sysctl.d]# scp -r k8s.conf server3:/etc/sysctl.d/
k8s.conf 100% 79 0.1KB/s 00:00
[root@server1 sysctl.d]# systemctl start kubelet
[root@server1 sysctl.d]# systemctl enable kubelet

server2/3
[root@server2 k8s]# sysctl --system
[root@server2 k8s]# sysctl net.bridge.bridge-nf-call-ip6tables
net.bridge.bridge-nf-call-ip6tables = 1
[root@server2 k8s]# sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1


第四步:创建集群并加入集群
server1:创建集群
[root@server1 sysctl.d]# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.25.27.1

断电去加cpu数量:

再去初始化集群,成功:


server2/3:加入集群
kubeadm join 172.25.27.1:6443 --token l0lw2q.wzrdx6wija0l05po \
--discovery-token-ca-cert-hash sha256:1719d66ffa7497cac7ec61bf8c93f2c293643b32c9e6e2594f9159f5a353111f


第五步:集群创建好之后要进行的步骤
server1:
[root@server1 ~]# useradd kubeadm
[root@server1 ~]# vim /etc/sudoers
[root@server1 ~]# tail -n 1 /etc/sudoers
kubeadm ALL=(ALL) NOPASSWD: ALL

修改回来的:

切换用户做以下操作:
[root@server1 ~]# su - kubeadm
Last login: Fri Aug 9 12:37:51 CHOST 2019 on pts/0
[kubeadm@server1 ~]$ mkdir -p $HOME/.kube
[kubeadm@server1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[kubeadm@server1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
[kubeadm@server1 ~]$ kubectl get all
[kubeadm@server1 ~]$ kubectl get node
[kubeadm@server1 ~]$ exit


如果想在kubeadm用户下可以补齐命令,配置 kubectl 命令补齐功能,可以进行以下操作:
[root@server1 ~]# vim /home/kubeadm/.bashrc
source <(kubectl completion bash)
此时在切换kubeadm就可以补齐



第六步:部署网络插件flannel
在物理机上将flannel所需要的镜像发送给server1/2/3

server1/2/3导入镜像
[root@server1 k8s]# docker load -i flannel.tar



在物理机上将kube-flannel.yml文件发送到server1上的kubeadm家目录下。

server1:
[root@server1 ~]# su - kubeadm
[kubeadm@server1 ~]$ ls
kube-flannel.yml
[kubeadm@server1 ~]$ kubectl apply -f kube-flannel.yml
[kubeadm@server1 ~]$ kubectl get nodes #查看节点信息
[kubeadm@server1 ~]$ kubectl get pods --all-namespaces # #获取所有命名空间中的所有Pod

显示全部running即为成功

注意:做这个实验需要各个node设置网关(需不需要联网待确认,但是为了确保,还是保证虚拟机能够上网比较好,我就是全程虚拟机可以上网),主node的内存设置大一点,要不没有调度资源。如果没有做以上设置,可能会出现不是running(第一和第二个)是pending的情况。
二.图形化管理k8s集群
我们前面的实验是通过命令创建管理k8s集群,但此刻我们想用一个直观简介的Web UI来管理,这就需要我们进行以下的操作:
第一步:导入镜像
在物理机将需要的镜像和yaml文件上传给server1/2/3,其实2/3只需要镜像,但是我一并上传了,不影响什么,因为2/3里并没有做操作:

server1/2/3:因为不确定Pod会被调度在哪一个node上,所以每一个节点上都要导入镜像
[root@server2 ~]# docker load -i kubernetes-dashboard.tar



第二步:创建Pod
server1:
[root@server1 ~]# mv kubernetes-dashboard.yaml /home/kubeadm/
[root@server1 ~]# su - kubeadm
[kubeadm@server1 ~]$ kubectl apply -f kubernetes-dashboard.yaml
[kubeadm@server1 ~]$ kubectl get pods -n kube-system
[kubeadm@server1 ~]$ kubectl get deployments. -n kube-system


第三步:修改service的配置
在server1上面修改service的配置,找到type,将ClusterIP改成NodePort
[kubeadm@server1 ~]$ kubectl describe svc kubernetes-dashboard -n kube-system #此时是ClusterIP模式
[kubeadm@server1 ~]$ kubectl edit service kubernetes-dashboard -n kube-system #修改,寻找typr就可以找到
service/kubernetes-dashboard edited
[kubeadm@server1 ~]$ kubectl describe svc kubernetes-dashboard -n kube-system #此时是NodePort模式
[kubeadm@server1 ~]$ kubectl get service --namespace=kube-system #查看暴露端口




查看暴露端口:

第四步:创建kubernetes-dashboard用户并获取登陆token
[kubeadm@server1 ~]$ vim dashboard-admin.yaml
[kubeadm@server1 ~]$ cat dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
--- #文件里以---分割符号
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system

[kubeadm@server1 ~]$ kubectl apply -f dashboard-admin.yaml #创建用户
[kubeadm@server1 ~]$ kubectl get secrets -n kube-system | grep admin | awk '{print $1}' #查看创建的用户
admin-user-token-bxgrg
[kubeadm@server1 ~]$ kubectl describe secrets admin-user-token-bxgrg -n kube-system #查看登陆用户的token


第五步:浏览器登陆
浏览器输入https:NodelIP:PORT,我的是https:172.25.27.1:32607

认证方式选令牌,输入刚才获取到的token,即可登陆成功

登陆成功如下图:

可查看集群nodes:

更多推荐

所有评论(0)