- 一、部署背景简介
- 二、部署工具介绍
- 三、部署方案介绍
- 四、部署环境信息
- 五、部署资源下载
- 六、部署准备工作
- 6.1、系统内核升级
- 6.2、设置主机名
- 6.3、环境初始化
- 6.4、安装基础包
- 6.5、ssh多机互信
- 6.6、配置时间同步
- 6.7、安装ansible
- 七、部署操作步骤
- 7.1、下载项目源码、二进制及离线镜像
- 7.2、创建集群配置实例
- 7.3、个性化配置
- 7.4、执行一键安装
- 八、验证集群及组件状态
- 8.1、验证k8s集群状态
- 8.2、验证calico网络状态
- 8.2、验证etcd集群状态
- 8.4、验证各组件状态
- 总结:整理不易,如果对你有帮助,可否点赞关注一下?
一、部署背景简介
根据公司业务场景的不同,你可能需要部署几套或几十套 二进制K8S高可用集群,面对繁琐的部署步骤,你可能望而却步,急需自动化的K8S部署工具,kubeasz就可以很好的解决你的问题。
二、部署工具介绍
三、部署方案介绍
四、部署环境信息
五、部署资源下载
六、部署准备工作 6.1、系统内核升级
说明:当前操作需在 所有主机上执行,执行更新后 必须重启服务器。
如下所示:
6.2、设置主机名
说明:当前操作需在 所有主机上执行,请根据部署环境信息中的主机名 分别对部署主机进行主机名设置。
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-ansible-190 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-191 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-192 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-193 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-194 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-198
6.3、环境初始化
说明:当前操作需在 所有主机上执行,环境初始化内容包括: 关闭防火墙、关闭selinux、关闭swap、内核参数。 配置完成后需再次重启服务器,内核参数vm.swappiness重启才生效。
6.4、安装基础包
说明:当前操作需在 所有主机上执行。注意sshpass、expect 、rsync、ntpdate为必须要安装的包。
6.5、ssh多机互信
说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机
1、使用ssh-keygen工具生成秘钥
2、执行脚本
[root@k8s-sdjw-ansible-190 basic-env]# ./ssh_key.sh root 192.168.1.191 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22 [root@k8s-sdjw-ansible-190 basic-env]# ./ssh_key.sh root 192.168.1.192 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22 [root@k8s-sdjw-ansible-190 basic-env]# ./ssh_key.sh root 192.168.1.193 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22 [root@k8s-sdjw-ansible-190 basic-env]# ./ssh_key.sh root 192.168.1.198 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
如下图所示:
6.6、配置时间同步
说明:配置时间同步操作需在 所有主机上执行。,如果你有自己的时间同步服务器,可配置为自己的时间服务器地址。
crontab -e */2 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
说明:你也可以使用chrony工具来实现时间同步。
6.7、安装ansible
说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机。
# 注意pip 21.0以后不再支持python2和python3.5,需要如下安装 # To install pip for Python 2.7 install it from https://bootstrap.pypa.io/2.7/ : [root@k8s-sdjw-ansible-190 ~]# curl -O https://bootstrap.pypa.io/pip/2.7/get-pip.py [root@k8s-sdjw-ansible-190 ~]# python get-pip.py [root@k8s-sdjw-ansible-190 ~]# python -m pip install --upgrade "pip < 21.0" # pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速) [root@k8s-sdjw-ansible-190 basic-env]# pip install ansible -i https://mirrors.aliyun.com/pypi/simple/
如下图所示:
七、部署操作步骤 7.1、下载项目源码、二进制及离线镜像
说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机。
1、下载项目源码、二进制及离线镜像
说明:如果你的主机无法从github上下载ezdown文件,你可以从这个地址下载ezdown
# 下载工具脚本ezdown,举例使用kubeasz版本3.1.1
[root@k8s-sdjw-ansible-190 kubeasz]# export release=3.1.1
[root@k8s-sdjw-ansible-190 kubeasz]# wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
[root@k8s-sdjw-ansible-190 kubeasz]# chmod +x ./ezdown
# 使用工具脚本下载
[root@k8s-sdjw-ansible-190 kubeasz]# ./ezdown -D
[root@k8s-sdjw-ansible-190 kubeasz]# ./ezdown -P
[root@k8s-sdjw-ansible-190 kubeasz]# ./ezdown -R
查看命令帮助,如下图所示:
说明:上述脚本运行成功后,所有文件(kubeasz代码、二进制、离线镜像)均已整理好放入目录/etc/kubeasz,/etc/kubeasz包 kubeasz版本为 ${release} 的发布代码,/etc/kubeasz/bin 包含 k8s/etcd/docker/cni 等二进制文件,/etc/kubeasz/down 包含集群安装时需要的离线容器镜像,/etc/kubeasz/down/packages 包含集群安装时需要的系统基础软件,如下图所示:
#离线文件不包括: 管理端ansible安装,但可以使用容器化方式运行kubeasz安装命令 其他更多kubernetes插件镜像
如下图所示:
7.2、创建集群配置实例
1、创建集群配置实例
[root@k8s-sdjw-ansible-190 kubeasz]# pwd /etc/kubeasz [root@k8s-sdjw-ansible-190 kubeasz]# ./ezctl new mycluster
如下图所示:
说明:然后根据提示配置/etc/kubeasz/clusters/mycluster/hosts 和 /etc/kubeasz/clusters/mycluster/config.yml;根据前面节点规划修改hosts文件和其他集群层面的主要配置选项;其他集群组件等配置项可以在config.yml文件中修改。
7.3、个性化配置
说明:hosts和config.yml文件需要根据自己部署需求和实际环境情况进行修改。
1、修改/etc/kubeasz/clusters/mycluster/hosts文件
说明:hosts文件的信息,主要是 [etcd] 、[kube_master]、[kube_node] 等信息
[root@k8s-sdjw-ansible-190 kubeasz]# vim /etc/kubeasz/clusters/mycluster/hosts
[etcd]
192.168.1.191 #此处必须修改
192.168.1.192 #此处必须修改
192.168.1.193 #此处必须修改
[kube_master]
192.168.1.191 #此处必须修改
192.168.1.192 #此处必须修改
[kube_node]
192.168.1.193 #此处必须修改
192.168.1.198 #此处必须修改
[harbor]
[ex_lb]
[chrony]
[all:vars]
SECURE_PORT="6443"
CONTAINER_RUNTIME="docker" #此处修改,根据实际情况修改,默认为docker
CLUSTER_NETWORK="calico" #此处修改,根据实际情况修改,默认为flannel
PROXY_MODE="ipvs" #此处修改,根据实际情况修改,默认为ipvs
SERVICE_CIDR="10.96.0.0/16" #此处修改,根据实际情况修改
CLUSTER_CIDR="10.48.0.0/16" #此处修改,根据实际情况修改
NODE_PORT_RANGE="30000-40000" #此处修改,根据实际情况修改
CLUSTER_DNS_DOMAIN="cluster.local"
bin_dir="/opt/kube/bin"
base_dir="/etc/kubeasz"
cluster_dir="{{ base_dir }}/clusters/mycluster"
ca_dir="/etc/kubernetes/ssl"
2、修改/etc/kubeasz/clusters/mycluster/config.yml文件
说明:config.yml 文件的信息,主要是CLUSTER_NAME 等信息
[root@k8s-sdjw-ansible-190 kubeasz]# vim /etc/kubeasz/clusters/mycluster/config.yml CALICO_IPV4POOL_IPIP: "off" #off模式可提升网络性能,本K8S集群运行在同网段kvm虚机上,虚机间没有网络ACL限制,因此可以设置CALICO_IPV4POOL_IPIP=off,如果你的主机位于不同网段,或者运行在公有云上需要打开这个选项 CALICO_IPV4POOL_IPIP=always DOCKER_STORAGE_DIR: "/data/k8s/docker" #根据实际情况填写,建议选择磁盘空间最大分区下目录 INSECURE_REG: '["127.0.0.1/8"]' #私有仓库地址,根据实际情况填写,我这里没有搭建私有仓库,就默认没有修改 ETCD_DATA_DIR: "/data/k8s/etcd" #根据实际情况填写,建议选择磁盘空间最大分区下目录 dns_install: "yes" #这里必须安装,使用本地dns,解析速度快 metricsserver_install: "yes" #这里选择安装,根据实际情况修改 dashboard_install: "no" #这里选择不安装,根据实际情况修改 ingress_install: "no" #这里选择不安装,根据实际情况修改 prom_install: "no" #这里选择不安装,根据实际情况修改 nfs_provisioner_install: "no" #这里选择不安装,根据实际情况修改
7.4、执行一键安装
说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机。
[root@k8s-sdjw-ansible-190 kubeasz]# pwd /etc/kubeasz [root@k8s-sdjw-ansible-190 kubeasz]# ./ezctl setup mycluster all
一键部署全程无报错,如下图所示:
八、验证集群及组件状态 8.1、验证k8s集群状态
说明:controller-manager Unhealthy Get “https://127.0.0.1:10257/healthz”: dial tcp 127.0.0.1:10257: connect: connection refused
说明:出现这个报错是因为/etc/systemd/system/kube-controller-manager.servic配置文件种定义的配置–bind-address=192.168.1.192绑定的地址是192.168.1.192,不是127.0.0.1,由于后面需要搭建prometheus监控系统,如果设置为127.0.0.1,则无法监控到controller-manager这个组件,如果设置为0.0.0.0,则有点不太安全,所以你可以忽略它,如果你无法忽略它,则建议改成0.0.0.0。
根据上述图可以看出kube-controller-manager部署在192.168.1.191和192.168.1.192主机上,分别修改如下配置:
[root@k8s-sdjw-test-191 ~]# vi /etc/systemd/system/kube-controller-manager.service --bind-address=0.0.0.0 [root@k8s-sdjw-test-191 ~]# systemctl daemon-reload [root@k8s-sdjw-test-191 ~]# systemctl restart kube-controller-manager [root@k8s-sdjw-test-192 ~]# vi /etc/systemd/system/kube-controller-manager.service --bind-address=0.0.0.0 [root@k8s-sdjw-test-192 ~]# systemctl daemon-reload [root@k8s-sdjw-test-192 ~]# systemctl restart kube-controller-manager
如下图所示,则表明成功解决
8.2、验证calico网络状态
验证calico网络状态
[root@k8s-sdjw-test-191 ~]# /opt/kube/bin/calicoctl node status [root@k8s-sdjw-test-191 ~]# route -n [root@k8s-sdjw-test-191 ~]# netstat -antlp|grep ESTABLISHED|grep 179 [root@k8s-sdjw-test-191 ~]# ip a
如下图所示:
8.2、验证etcd集群状态
验证etcd集群状态,三台 etcd 的输出均为 healthy 时表示集群服务正常。
#1、systemctl status etcd 查看服务状态
#2、journalctl -u etcd 查看运行日志
# 3、在任一 etcd 集群节点上执行如下命令
# 根据hosts中配置设置shell变量 $NODE_IPS
export NODE_IPS="192.168.1.191 192.168.1.192 192.168.1.193"
for ip in ${NODE_IPS}; do
ETCDCTL_API=3 /opt/kube/bin/etcdctl
--endpoints=https://${ip}:2379
--cacert=/etc/kubernetes/ssl/ca.pem
--cert=/etc/kubernetes/ssl/etcd.pem
--key=/etc/kubernetes/ssl/etcd-key.pem
endpoint health; done
如下图所示:
8.4、验证各组件状态
如下所示:
# 查看进程状态 systemctl status kube-apiserver systemctl status kube-controller-manager systemctl status kube-scheduler # 查看进程运行日志 journalctl -u kube-apiserver journalctl -u kube-controller-manager journalctl -u kube-scheduler
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战



