文章目录
一、部署背景简介
根据公司业务场景的不同,你可能需要部署几套或几十套K8S高可用集群,面对繁琐的部署步骤,你可能望而却步,急需自动化的K8S部署工具,kubespray就可以很好的解决你的问题。
二、部署工具介绍
当前kubespray工具版本要求如下:
三、部署方案介绍
说明:根据国内网络情况及实际部署环境,综合有如下四种部署方案:
方案一:基于docker使用kubespray工具在线部署高可用kubernetes集群(国内互联网环境)
方案二:基于containerd使用kubespray工具在线部署高可用kubernetes集群(国内互联网环境)
方案三:基于docker使用kubespray工具离线部署高可用kubernetes集群(国内专网环境)
方案四:基于containerd使用kubespray工具离线部署高可用kubernetes集群(国内专网环境)
四、部署环境信息
说明:由于服务器资源有限,演示环境共五台服务器,按如下规划进行部署。
IP地址 | 主机名 | 操作系统 | 内核版本 | K8S版本 | 角色 |
---|---|---|---|---|---|
192.168.1.11 | k8s-sdjw-ansible-11 | centos7.6.1810 | 5.4.13 | ansible-client | |
192.168.1.12 | k8s-sdjw-test-12 | centos7.6.1810 | 5.4.13 | v1.22.8 | 控制节点 |
192.168.1.19 | k8s-sdjw-test-19 | centos7.6.1810 | 5.4.13 | v1.22.8 | 控制节点 |
192.168.1.20 | k8s-sdjw-test-20 | centos7.6.1810 | 5.4.13 | v1.22.8 | 工作节点 |
192.168.1.20 | k8s-sdjw-test-21 | centos7.6.1810 | 5.4.13 | v1.22.8 | 工作节点 |
192.168.1.20 | k8s-sdjw-test-22 | centos7.6.1810 | 5.4.13 | v1.22.8 | 工作节点 |
五、部署资源下载
说明:当前kubespray-v2.18.1版本默认安装的是K8S版本为v1.22.8,方便大家,特意找了一台能pull镜像及文件的服务器下载好了相关部署安装包及镜像。
基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案一)部署资源包
资源信息如下:
六、部署准备工作
6.1、系统内核升级
说明:当前操作需在 所有主机上执行,执行更新后 必须重启服务器。
如下所示:
6.2、设置主机名
说明:当前操作需在 所有主机上执行,请根据部署环境信息中的主机名 分别对部署主机进行主机名设置。
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-ansible-11
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-12
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-19
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-20
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-21
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-22
6.3、环境初始化
说明:当前操作需在 所有主机上执行,环境初始化内容包括: 关闭防火墙、关闭selinux、关闭swap、内核参数。 配置完成后需再次重启服务器,内核参数vm.swappiness才生效。
注意事项:如果服务器默认开启dnsmasq服务,请关闭dnsmasq(否则可能导致容器无法解析域名),命令如下:
[root@localhost ~]# service dnsmasq stop && systemctl disable dnsmasq
6.4、ssh多机互信
说明:当前操作只需在 ansible-client主机上执行。
1、使用ssh-keygen工具生成秘钥
2、执行脚本
[root@k8s-sdjw-ansible-11 basic-env]# yum install expect -y
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.12 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.19 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.20 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.21 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.22 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
如下图所示:
6.5、安装基础包
说明:当前操作需在 所有主机上执行。注意sshpass、expect 、rsync、ntpdate为必须要安装的包。
6.6、配置时间同步
说明:配置时间同步操作需在 所有主机上执行。,如果你有自己的时间同步服务器,可配置为自己的时间服务器地址。
crontab -e
*/2 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
七、部署操作步骤
7.1、上传部署文件
说明:将提前准备好的镜像及安装文件上传到 服务器集群所有主机,包括ansible-client主机上,如果不修改默认download_cache_dir变量值,则目录路径必须为/tmp/kubespray_cache。,如果你使用的是我提供的资源包,解压后,将kubespray_cache移至/tmp目录下即可。如下所示:
7.2、下载解压源码
说明:我提供的资源包里包含kubespray-2.18.1.zip,也是在github上下载的,你可以自己手动从github下载。
[root@k8s-sdjw-ansible-11 ~]# wget https://github.com/dongchengjueshen110/kubespray/archive/refs/tags/v2.18.1.zip
[root@k8s-sdjw-ansible-11 ~]# unzip v2.18.1.zip
7.3、安装依赖软件
说明:当前操作只需在 ansible-client主机上执行。
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# yum install python3-pip -y
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# pip3 install -r requirements.txt
如下图所示:
如下所示,即表示安装成功。
7.4、生成inventory配置
说明:由于kubespray给我们准备了py脚本,可以直接根据环境变量自动生成配置文件,所以我们现在只需要设定好环境变量就可以
1、copy一份demo配置,准备自定义
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# cp -rpf inventory/sample inventory/mycluster
2、使用真实的hostname,(否则会自动把你的hostname改成node1/node2...这种)
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# export USE_REAL_HOSTNAME=true
3、指定配置文件位置
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# export CONFIG_FILE=inventory/mycluster/hosts.yaml
4、定义ip列表(你的服务器内网ip地址列表,3台及以上,前两台默认为master节点)
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# declare -a IPS=(192.168.1.12 192.168.1.19 192.168.1.20 192.168.1.21 192.168.1.22)
5、生成配置文件
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# python3 contrib/inventory_builder/inventory.py ${IPS[@]}
操作步骤如下所示:
查看主机名,确认USE_REAL_HOSTNAME=true生效
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# cat inventory/mycluster/hosts.yaml
如下所示:
7.5、个性化配置
说明:配置文件都生成好了,虽然可以直接用,但并不能完全满足大家的个性化需求,比如用docker还是containerd,docker的工作目录是否用默认的/var/lib/docker等等。
1、默认使用containerd修改为docker
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
container_manager: docker
2、修改docker数据存储目录
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/all/docker.yml
docker_daemon_graph: "/data/docker"
3、k8s集群配置(包括设置容器运行时、svc网段、pod网段等)
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
kube_version: v1.22.8
kube_service_addresses: 10.233.0.0/18
kube_pods_subnet: 10.233.64.0/18
4、修改etcd部署类型为host(当前kubespray-v2.18.1版本etcd安装模式默认为host)
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/etcd.yml
etcd_deployment_type: host
5、附加组件(可选操作)
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/k8s_cluster/addons.yml
# 代理,默认是false
ingress_nginx_enabled: true
# 界面(可选),这里是默认注释的状态,取消注释即可
dashboard_enabled: true
6、修改镜像下载方式
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim roles/download/defaults/main.yml
download_force_cache: true #表示下载镜像源及文件会先从本地缓存目录中下载,即/tmp/kubespray_cache目录
7.6、执行一键部署
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
或带详细日志
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml -vvvv
如下所示,即表明部署成功。
1.查看节点状态
2.查看pod信息
3.查看集群各组件状态
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战