基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源
主机配置规划
服务器名称(hostname) | 系统版本 | 配置 | 内网IP | 外网IP(模拟) |
---|---|---|---|---|
k8s-master | CentOS7.7 | 2C/4G/20G | 172.16.1.110 | 10.0.0.110 |
k8s-node01 | CentOS7.7 | 2C/4G/20G | 172.16.1.111 | 10.0.0.111 |
k8s-node02 | CentOS7.7 | 2C/4G/20G | 172.16.1.112 | 10.0.0.112 |
注意:没有swap分区
预定完成目标项
1、在所有节点上安装Docker和kubeadm
2、部署Kubernetes Master
3、部署容器网络插件
4、部署 Kubernetes Worker,并将节点加入Kubernetes集群中
5、部署Dashboard Web页面,可视化查看Kubernetes资源
kubeadm 是 Kubernetes 官方支持的安装方式,“二进制” 不是。本文档采用 kubernetes.io 官方推荐的 kubeadm 工具安装 kubernetes 集群。
架构图
安装docker、安装kubeadm,kubelet和kubectl
注意:所有机器都要安装
脚本如下:
1 | [root@k8s-master k8s_install]# pwd |
执行上述脚本
kubelet 服务错误说明
用kubeadm的方法安装kubelet后,运行systemctl status kubelet 和 journalctl -f -u kubelet 发现kubelet服务启动失败,错误代码255。
后来查了资料,运行journalctl -xefu kubelet 命令查看systemd日志才发现,真正的错误是:
1 | failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory |
关键文件缺失,多发生于没有做 kubeadm init就运行了systemctl start kubelet。
暂时可以有不管,后面 kubeadm init 后会恢复正常。
部署Kubernetes Master与安装Pod网络插件(CNI)
kubeadm init 配置详解的官网地址如下:
1 | https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/ |
这里使用 flannel 网络
master节点所需镜像
kubernetes 服务启动依赖很多镜像,这些镜像要是在国内没有(fan qiang)的话,是下载不下来的。这里我们可以去阿里云容器镜像服务【别人放好的镜像】搜寻并下载指定版本的镜像替代。
下载完成后,通过 docker tag … 命令修改成指定名称的镜像即可。
需要哪些镜像及版本
需要哪些镜像及版本,查看方式如下:
1 | [root@k8s-master ~]# kubeadm config images list --kubernetes-version v1.17.4 |
获取初始化默认配置文件并修改
1 | [root@k8s-master k8s_install]# pwd |
kubeadm init与flannel网络安装
创建 init_master.sh文件并编写脚本进行批量下载镜像;之后修改镜像tag,与google的k8s镜像名称一致;再之后初始化并安装Pod网络插件。
脚本如下:
1 | [root@k8s-master k8s_install]# pwd |
执行上述脚本
部分命令说明:
查看所有pods运行信息
1 | kubectl get pods --all-namespaces # 或者kubectl get pods -A |
查看所有node节点信息,其中master也是一个节点
1 | kubectl get nodes |
获得 join命令参数,复制后在其他node节点执行,执行后加入该master节点,形成一个集群
1 | kubeadm token create --print-join-command |
flannel扁平化网络查看
通过ifconfig命令,可见已经存在了扁平化网络。
Kubernetes 的网络模型假定了所有Pod都在一个可以直接连通的扁平化的网络空间中,这在GCE(Google Compute Engine)里面是现成的网络模型,Kubernetes 假定这个网络已经存在。而在私有云里搭建 Kubernetes 集群,就不能假定这个网络已经存在。我们需要自己实现这个网络假设,将不同节点上的 Docker 容器之间的互相访问先打通,然后运行 Kubernetes。
同一个Pod内的多个容器之间通讯:lo
各Pod之间的通讯:Overlay Network
Pod与Service之间的通讯:各节点的Iptables规则或者ipvs
Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个网络规划服务。简单来说,它的功能是让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟IP地址。而且它还能在这些IP地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动的传递到目标容器内。
flannel网络如下图:
部署Kubernetes Node并加入Kubernetes集群
获得 join命令初始化worker节点并加入master
在master执行如下命令获取join参数。
1 | [root@k8s-master ~]# kubeadm token create --print-join-command |
有效时间,该 token 的有效时间为 2 个小时,2小时内可以使用此 token 初始化任意数量的 worker 节点。
本文根据规划在k8s-node01、k8s-node02机器上执行。
执行完毕后,在master机器查看节点信息:
1 | [root@k8s-master ~]# kubectl get nodes |
说明:k8s-node01、k8s-node02状态为NotReady
获取worker节点镜像
创建 init_worker.sh文件并编写脚本批量下载镜像;之后修改镜像tag,与google的k8s镜像名称一致;再之后下载Pod网络插件。
脚本如下:
1 | [root@k8s-node01 k8s_install]# pwd |
本文根据规划在k8s-node01、k8s-node02机器上执行。
work执行完毕后在master机器查看信息
执行完毕后,在master机器查看节点信息:
1 | # 所有节点都是Ready状态了 |
说明:k8s-node01、k8s-node02状态为Ready,且所有pod都正常运行
移除worker节点
正常情况下,无需移除 worker 节点,如果添加到集群出错,可以移除 worker 节点,再重新尝试添加。
比如:移除k8s-node01节点,步骤如下:
在准备移除的 worker 节点上执行
1 | # 只在 worker 节点执行 |
在 master 节点上执行
1 | # 只在 master 执行 |
集群版本查看
执行如下命令即可
1 | [root@k8s-master ~]# kubectl version |
到这来,整个集群已经部署完毕,可以欢呼了!
部署 Dashboard
本次部署版本版本:v2.0.0-rc6。不能部署v1.10.0版本,因为该版本过低不匹配。
Dashboard 的GitHub地址:
1 | https://github.com/kubernetes/dashboard/ |
版本选择
下载dashboard镜像
镜像下载脚本,在所有节点执行,因为dashboard会根据调度部署在任意节点。
脚本如下:
1 | [root@k8s-master k8s_install]# pwd |
部署 Dashboard
在k8s-master上操作
获取dashboard的recommended.yaml
1 | wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml |
修改recommended.yaml配置,如下:
1 | [root@k8s-master k8s_install]# pwd |
启动dashboard
1 | kubectl apply -f recommended.yaml |
查看dashboard运行情况
1 | [root@k8s-master ~]# kubectl get pods -A -o wide |
查看services服务信息
1 | # 或则使用 kubectl get svc -A |
浏览器访问
根据规划,访问如下地址:
1 | https://172.16.1.110:30001/ |
如果谷歌浏览器不能打开,参见如下博文:解决Google浏览器不能打开kubernetes dashboard方法【转】
1 | https://blog.csdn.net/weixin_30535043/article/details/102395724 |
也可以使用火狐浏览器打开,浏览器添加例外后,访问得到如下页面:
使用令牌登录(需要创建能够访问 Dashboard 的用户)
创建service account并绑定默认cluster-admin管理员集群角色
1 | [root@k8s-master k8s_install]# pwd |
查看绑定信息
1 | [root@k8s-master k8s_install]# kubectl get clusterrolebinding |
获取tocken
1 | kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') |
将得到的token信息用于访问,结果如下:【可能需要等几分钟页面才能刷出来】
完毕!