一、部署背景
由于业务系统的特殊性,我们需要针对不同的客户环境部署二进制版K8S集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了 基于ansible自动化工具一键远程离线部署进制版K8S集群。
说明:如果有兴趣,可以从工具下载中获取下载链接,此工具可帮助你快速了解一个自动化部署工具是如何编写的?
二、工具下载
基于Ubutntu系统使用Ansible一键部署K8S1.24.12二进制集群自动化工具
三、工具介绍
1、工具说明
1、当前一键部署工具仅支持 X86_64架构的 Ubuntu操作系统。
2、支持 单机、一主多从、两主多从、三主多从等四种部署架构和六种部署模式的二进制K8S离线集群,且 证书有效期为99年。
3、支持一键部署、启动、停止、检查、集群备份(etcd)、集群恢复(etcd)、集群移除等功能。
4、支持worker节点一键扩容和移除。
5、支持harbor私有镜像仓库。
说明:支持Centos系统正在开发中,同时后面也会开发出支持ARM架构的K8S二进制自动化部署工具,敬请期待!
2、架构介绍
名称 | 单master | 多master | harbor独立部署 | etcd独立部署 | 模式 | 说明 |
---|---|---|---|---|---|---|
node1 | 是 | - | 是 | 否(单机) | 单机模式 | 仅只需要2台服务器 |
node2 | 是 | - | 是 | 否(单机) | 一主多从集群模式一 | 至少需要3台服务器 |
node3 | 是 | - | 是 | 是(单机) | 一主多从集群模式二 | 至少需要4台服务器 |
node4 | - | 是 | 是 | 是(集群) | 两主多从高可用模式 | 至少需要9台服务器 |
node5 | - | 是 | 是 | 否(集群) | 三主多从高可用模式一 | 至少需要7台服务器 |
node6 | - | 是 | 是 | 是(集群) | 三主多从高可用模式二 | 至少需要10台服务器 |
说明:harbor独立部署是指额外使用1台服务器部署harbor镜像仓库。etcd独立部署是指部署在非master节点主机上。etcd非独立部署是指部署在master节点上。
3、工具说明
目录结构如下所示:
drwxr-xr-x 3 root root 4096 Jul 24 17:20 ansible/
drwxr-xr-x 3 root root 4096 Jul 24 17:41 cluster/
drwxr-xr-x 8 root root 4096 Jul 21 15:05 example/
drwxr-xr-x 11 root root 4096 Jul 21 14:53 images/
-rwxr-xr-x 1 root root 30659 Jul 21 14:53 op.sh*
drwxr-xr-x 8 root root 4096 Jul 21 14:53 playbooks/
-rwxr-xr-x 1 root root 25639 Jul 25 10:28 README.txt*
drwxr-xr-x 17 root root 4096 Jul 21 14:53 roles/
目录说明如下所示:
#1、ansible目录:存放ansible工具rpm包目录,可一键安装ansible
#2、cluster目录:存放hosts文件和config.yml文件目录,主要配置服务器信息及K8S二进制集群配置信息
#3、example目录:存放hosts文件和config.yml模板文件
#4、images目录:存放K8S二进制集群镜像文件及二进制文件
#5、op.sh:主控脚本
#6、playbooks:K8S二进制集群部署的剧本文件
#7、README.txt:帮助文档
#8、roles目录:K8S二进制集群部署的角色文件
说明:详细的操作,请参考README.txt文件。
四、部署步骤
说明:由于篇幅有限,这里以node6模式为例,像大家介绍K8S二进制高可用集群部署步骤!
1、生成hosts文件和config.yml文件
2、编辑hosts文件
3、编辑config.yml文件
root@k8s-master-101:/opt/kubernetes-tools# vim cluster/node6/config.yml
# --------------------------------------------------------------------------------------------------- #
# 宿主机最大磁盘空间分区下目录,比如说"/"分区下空间最大,就在"/"分区下创建一个data目录,可根据实际情况修改
MAX_SPACE_DIR: "/data"
# 部署架构类型: three-master-cluster-out-etcd表示三主多从集群模式二,默认不修改
CLUSTER_TYPE: "three-master-cluster-out-etcd"
# kubernetes工作目录,主要用来存放离线镜像及其它部署相关文件,默认不修改
KUBE_WORK_DIR: "{{ MAX_SPACE_DIR }}/pkgs/kube-tools"
# Binaries Directory,默认不修改
BIN_DIR: "/opt/kube/bin"
# --------------------------------------------------------------------------------------------------- #
# Secure port for apiservers,端口不冲突情况下,默认不修改
SECURE_PORT: "6443"
# [containerd]基础容器镜像,默认不修改
SANDBOX_IMAGE: "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"
# [coredns]基础容器镜像,默认不修改
COREDNS_IMAGE: "registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6"
# [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
# Kubelet 根目录,默认不修改
KUBELET_ROOT_DIR: "/var/lib/kubelet"
# Kube-proxy 根目录,默认不修改
KUBE_PROXY_ROOT_DIR: "/var/lib/kube-proxy"
# [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、查看部署帮助信息
5、执行部署操作
部署结果,如下图所示:
harbor主机手动执行,如下图所示:
K8S集群状态,如下图所示:
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战