一、部署背景

由于业务系统的特殊性,我们需要针对不同的客户环境部署容器版版K8S集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了 基于ansible自一键远程离线部署容器版K8S集群动化工具

说明:如果有兴趣,可以从工具下载中获取下载链接,此工具可帮助你快速了解一个自动化部署工具是如何编写的?


二、工具下载

基于Ubutntu系统使用Ansible一键部署K8S1.24.17容器版集群自动化工具

说明:如果你在使用此工具时,有更好的建议可私信博主!


三、工具介绍

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容器版高可用集群部署步骤!

4.1、帮助命令

在这里插入图片描述


4.2、一键部署

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

如下图所示:
在这里插入图片描述


4.3、一键卸载

说明:如果部署中途出现异常,可一键移除,重新部署。

root@lolaage-virtual-machine:/opt/kubernetes-tools# ./op.sh clean node3 all

如下图所示:
在这里插入图片描述


4.4、扩容缩容

说明:扩容缩容只针对worker节点。

4.4.1、扩容

# 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

如下图所示:
在这里插入图片描述


4.4.2、缩容

# 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

如下图所示:
在这里插入图片描述


4.5、备份恢复

# 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集群运维实战

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐