目前所有功能已经开发完成,初步完成所有功能测试,等待测试人员最终测试完成后会上线资源到CSDN!
由于业务系统的特殊性,我们需要针对不同的客户环境部署容器版版K8S集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了 基于ansible自一键远程离线部署容器版K8S集群动化工具。
说明:如果有兴趣,可以从工具下载中获取下载链接,此工具可帮助你快速了解一个自动化部署工具是如何编写的?
说明:如果你在使用此工具时,有更好的建议可私信博主!
1、工具说明
1、当前一键部署工具仅支持 X86_64架构的 Ubuntu操作系统。
2、支持 单机、一主多从、三主多从等 三种部署架构和 六种部署模式的容器版K8S离线集群, 证书有效期为99年。
3、支持 一键部署、分步部署、集群备份(etcd)、集群恢复(etcd)、集群移除
等功能。
4、支持 worker节点一键扩容和缩容。
5、支持 harbor私有镜像仓库。
2、架构介绍
部署模式 | 单master | 多master | harbor独立部署 | etcd部署类型 | 部署架构 | 说明 |
---|---|---|---|---|---|---|
node1 | 是 | 是(容器化) | 二进制(外部单机) | 单机模式 | 仅只需要2台服务器 | |
node2 | 是 | 是(容器化) | 二进制(外部单机) | 一主多从集群模式 | 至少需要3台服务器 | |
node3 | 是 | 是(容器化) | 二进制(外部集群) | 三主多从高可用模式 | 至少需要7台服务器 | |
node4 | 是 | 是(容器化) | 容器化(内部单机) | 单机模式 | 至少需要2台服务器 | |
node5 | 是 | 是(容器化) | 容器化(内部单机) | 一主多从集群模式 | 至少需要3台服务器 | |
node6 | 是 | 是(容器化) | 容器化(内部集群) | 三主多从高可用模式 | 至少需要7台服务器 |
3、工具说明
目录说明如下所示:
1、ansible目录:存放ansible服务软件包目录,可一键安装ansible
2、cluster目录:存放hosts文件和config.yml文件目录,分别为主机清单文件和变量文件
3、example目录:存放hosts文件和config.yml模板文件
4、tools目录:存放K8S镜像文件及其它文件
5、op.sh:主控脚本
6、playbooks:K8S集群部署的剧本文件
7、README.txt:帮助文档
8、roles目录:K8S集群部署的角色文件
说明:详细的操作,请参考README.txt文件。
说明:由于篇幅有限,这里以node3模式为例,像大家介绍K8S容器版高可用集群部署步骤!
1、生成 node3模式的hosts文件和config.yml文件
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh new node3
如下图所示:
2、编辑hosts文件
root@lolaage-virtual-machine:/opt/kubernetes-tools# vim cluster/node3/hosts
# 三主多从高可用模式
# < 2个lb节点(不变) + 3个master节点(不变) + N个worker节点(可变)+ 1个harbor节点(不变)>高可用集群
# harbor镜像仓库单独1台服务器独立部署
# 注意:至少需要7台服务器
[kube_master]
192.168.1.12 access_ip=192.168.1.12 hostname=k8s-master-12 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
192.168.1.13 access_ip=192.168.1.13 hostname=k8s-master-13 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
192.168.1.14 access_ip=192.168.1.14 hostname=k8s-master-14 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
[kube_node]
192.168.1.15 access_ip=192.168.1.15 hostname=k8s-worker-15 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
[kube_lb]
192.168.1.16 access_ip=192.168.1.16 hostname=k8s_lb_01 LB_ROLE=master EX_APISERVER_VIP=192.168.1.110 EX_APISERVER_PORT=6443 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
192.168.1.17 access_ip=192.168.1.17 hostname=k8s-lb-02 LB_ROLE=backup EX_APISERVER_VIP=192.168.1.110 EX_APISERVER_PORT=6443 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
[harbor]
192.168.1.18 access_ip=192.168.1.18 hostname=k8s-harbor-18 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
[addnode]
# 如果已经扩容完成,再进行新的worker节点扩容,请必须注释之前已经扩容的主机ip
#192.168.1.20 access_ip=192.168.1.20 hostname=k8s-worker-20 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
# 注意:如果已经移除完成,再进行新的worker节点移除,请必须注释之前已经移除的主机ip
[delnode]
#192.168.1.20 access_ip=192.168.1.20 hostname=k8s-worker-20 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
[all:vars]
# Deploy Directory(kuberntes 一键部署工具包workspace),不修改
base_dir="/opt/kubernetes-tools"
3、编辑config.yml文件
root@lolaage-virtual-machine:/opt/kubernetes-tools# vim cluster/node3/config.yml
# --------------------------------------------------------------------------------------------------- #
# 宿主机最大磁盘空间分区下目录,比如说"/"分区下空间最大,就在"/"分区下创建一个data目录,可根据实际情况修改
MAX_SPACE_DIR: "/data"
# 部署架构类型,默认不修改
CLUSTER_TYPE: "node3"
# kubernetes工作目录,主要用来存放离线镜像及其它部署相关文件,默认不修改
KUBE_WORK_DIR: "{{ MAX_SPACE_DIR }}/pkgs/kube-tools"
# Binaries Directory,默认不修改
BIN_DIR: "/opt/cni/bin"
# --------------------------------------------------------------------------------------------------- #
# kubernetes版本,默认不修改
KUBE_VERSION: "v1.24.17"
# Kubernetes基础容器版本,默认不修改
KUBE_PAUSE_VERSION: "3.7"
# coredns版本,默认不修改
KUBE_COREDNS_VERSION: "v1.8.6"
# calcio版本,默认不修改
KUBE_CACLICO_VERSION: "v3.25.0"
# Kubernetes镜像仓库地址,默认不修改
KUBE_REGISTRY: "registry.cn-hangzhou.aliyuncs.com/google_containers"
# [kubernetes镜像列表],默认不修改
SANDBOX_IMAGE: "{{ KUBE_REGISTRY }}/pause:{{ KUBE_PAUSE_VERSION }}"
COREDNS_IMAGE: "{{ KUBE_REGISTRY }}/coredns:{{ KUBE_COREDNS_VERSION }}"
KUBE_APISERVER_IMAGE: "{{ KUBE_REGISTRY }}/kube-apiserver:{{ KUBE_VERSION }}"
KUBE_CONTROLLER_MANAGER_IMAGE: "{{ KUBE_REGISTRY }}/kube-controller-manager:{{ KUBE_VERSION }"
KUBE_SCHEDULER_IMAGE: "{{ KUBE_REGISTRY }}/kube-scheduler:{{ KUBE_VERSION }"
KUBE_PROXY_IMAGE: "{{ KUBE_REGISTRY }}/kube-proxy:{{ KUBE_VERSION }"
# [calico]镜像列表,默认不修改
CALICO_CNI_IMAGE: "docker.io/calico/cni:{{ KUBE_CACLICO_VERSION }}"
CALICO_NODE_IMAGE: "docker.io/calico/node:{{ KUBE_CACLICO_VERSION }}"
CALICO_KUBE_CONTROLLER_IMAGE: "docker.io/calico/kube-controllers:{{ KUBE_CACLICO_VERSION }}"
# --------------------------------------------------------------------------------------------------- #
# Secure port for localhost apiservers,端口不冲突情况下,默认不修改
SECURE_PORT: "6443"
# [containerd]容器持久化存储目录,默认不修改
CONTAINERD_STORAGE_DIR: "{{ MAX_SPACE_DIR }}/basic-data/containerd"
# K8S Service CIDR, not overlap with node(host) networking,可根据实际情况修改
SERVICE_CIDR: "10.96.0.0/16"
# Cluster CIDR (Pod CIDR), not overlap with node(host) networking,可根据实际情况修改
CLUSTER_CIDR: "10.48.0.0/16"
# NodePort Range,可根据实际情况修改
NODE_PORT_RANGE: "30000-32767"
# Cluster DNS Domain,默认不修改
CLUSTER_DNS_DOMAIN: "cluster.local"
# CA and other components cert/key Directory,默认不修改
CA_DIR: "/etc/kubernetes/pki"
# node节点最大pod数,默认不修改
MAX_PODS: 110
# [calico] 隧道模式可选项有: [Always, Never],Always表示IPIP模式,Never表示开启BGP模式,],默认不修改
CALICO_IPV4POOL_IPIP: "Never"
# 默认的IP自动检测方法是first-found,calico会从部署节点路由中获取到达目的ip或者域名的源ip],默认不修改
IP_AUTODETECTION_METHOD: "can-reach={{ groups['kube_master'][0] }}"
# [calico]设置calico 网络backend模式可选项有:[brid, vxlan],默认不修改
CALICO_NETWORKING_BACKEND: "brid"
# etcd 数据目录,默认不修改
ETCD_DATA_DIR: "/var/lib/etcd"
# --------------------------------------------------------------------------------------------------- #
# harbor变量
# [docker]容器存储目录,默认不修改
DOCKER_STORAGE_DIR: "{{ MAX_SPACE_DIR }}/basic-data/docker"
# harbor主机域名地址,可根据实际情况修改
HARBOR_DOMAIN: "my.harbor.com"
# harbor http端口,端口不冲突情况下,默认不修改
HARBOR_HTTP_PORT: 9000
# harbor https端口,端口不冲突情况下,默认不修改
HARBOR_TLS_PORT: 8443
# harbor仓库地址,默认不修改
HARBOR_REGISTRY: "{{HARBOR_DOMAIN}}:{{HARBOR_TLS_PORT}}"
# harbor web平台管理用户admin密码,可根据实际情况修改
HARBOR_ADMIN_PASSWORD: "NEoCN0YjdGr"
# [harbor]数据存储目录,默认不修改
HARBOR_DATA_DIR: "{{ MAX_SPACE_DIR }}/basic-data/harbor"
# --------------------------------------------------------------------------------------------------- #
4、一键部署
# 1、一键部署
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 all
# 2、分步部署
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 01
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 02
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 03
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 04
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 05
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 06
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 07
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 08
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh setup node3 09
5、检查集群状态
root@k8s-master-12:~# kubectl get nodes -o wide
root@k8s-master-12:~# kubectl get pods -A -o wide
root@k8s-master-12:~# kubectl get svc -o wide
root@k8s-master-12:~# kubectl get cs
root@k8s-master-12:~# kubectl get svc
如下图所示:
6、检查证书时间
root@k8s-master-12:~# kubeadm certs check-expiration
说明:如果部署中途出现异常,可一键移除,重新部署。
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh clean node3 all
说明:扩容缩容只针对worker节点。
# 1、添加扩容主机
root@lolaage-virtual-machine:/opt/kubernetes-tools# vim cluster/node3/host
[addnode]
192.168.1.20 access_ip=192.168.1.20 hostname=k8s-worker-20 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
# 2、执行扩容命令
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh addnode node3 all
# 1、添加缩容主机
root@lolaage-virtual-machine:/opt/kubernetes-tools# vim cluster/node3/host
[delnode]
192.168.1.20 access_ip=192.168.1.20 hostname=k8s-worker-20 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python3
# 2、执行缩容命令
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh delnode node3 all
# etcd备份
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh bakcup node3 all
# etcd恢复
root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh restore node3 all
更多详细内容请参考:企业级K8s集群运维实战