shell 脚本部署二进制高可用 k8s 集群
脚本网盘链接:https://pan.baidu.com/s/11rut6hScd6nWP4iMj3NpKA?pwd=cjcj
CSDN下载链接
关于脚本
1.脚本目前可用CentOS7.x,作者在centOS7.9已验证
2.脚本使用方法(在第一个master节点执行)
tar -xf k8s1.25.4_binary.xz -C /
cd /k8s/sh && ./main.sh
2.在执行脚本前一定要先修改/k8s/config/env.sh
3.在/k8s/config/env.sh配置完全正确的情况下,脚本会自动关闭防火墙,selinux
4.脚本根据1.25.4编写,如需要安装其他版本请自行修改配置
5.脚本部署时候涉及自签证书,存在如下证书请求文件需要修改IP地址
/k8s/pki/apiserver-csr.json
/k8s/pki/etcd-csr.json
6.由于etcd集群安装时候需要多个节点同时在线才会正常,因此安装etcd时候如果第一个节点卡住超过2秒可以先Ctrl+C中断继续执行第二和第三个节点的etcd启动,待etcd脚本执行完毕之后在检查集群整体是否健康
目录结构
. ├── bin_tmp │ ├── cfssldir │ │ ├── cfssl │ │ ├── cfssl-certinfo │ │ └── cfssljson │ ├── cni │ │ ├── bandwidth │ │ ├── bridge │ │ ├── dhcp │ │ ├── firewall │ │ ├── flannel │ │ ├── host-device │ │ ├── host-local │ │ ├── ipvlan │ │ ├── loopback │ │ ├── macvlan │ │ ├── portmap │ │ ├── ptp │ │ ├── sbr │ │ ├── static │ │ ├── tuning │ │ ├── vlan │ │ └── vrf │ ├── containerddir │ │ ├── bandwidth │ │ ├── bridge │ │ ├── containerd │ │ ├── containerd-shim │ │ ├── containerd-shim-runc-v1 │ │ ├── containerd-shim-runc-v2 │ │ ├── containerd-stress │ │ ├── crictl │ │ ├── critest │ │ ├── ctd-decoder │ │ ├── ctr │ │ ├── dhcp │ │ ├── firewall │ │ ├── host-device │ │ ├── host-local │ │ ├── ipvlan │ │ ├── loopback │ │ ├── macvlan │ │ ├── portmap │ │ ├── ptp │ │ ├── runc │ │ ├── sbr │ │ ├── static │ │ ├── tuning │ │ ├── vlan │ │ └── vrf │ ├── etcddir │ │ ├── etcd │ │ ├── etcdctl │ │ └── etcdutl │ ├── k8sdir │ │ ├── kube-apiserver │ │ ├── kube-controller-manager │ │ ├── kubectl │ │ ├── kubelet │ │ ├── kube-proxy │ │ └── kube-scheduler │ └── nginxdir │ └── nginx ├── config │ ├── 10-flannel.conflist │ ├── CentOS-Base.repo │ ├── chrony.conf │ ├── cni-default.conf │ ├── containerd.conf │ ├── containerd.hosts.toml │ ├── containerd.service │ ├── crictl.yaml │ ├── elrepo.repo │ ├── env.sh │ ├── epel.repo │ ├── etcd.service │ ├── hosts │ ├── ipvs.conf │ ├── k8s.conf │ ├── kube-apiserver.service │ ├── kube-controller-manager.service │ ├── kubelet-conf.yml │ ├── kubelet.service │ ├── kube-nginx.service │ ├── kube-proxy.service │ ├── kube-proxy.yaml │ ├── kube-scheduler.service │ ├── limits.conf.tmp │ └── nginx.conf ├── kubeconfig ├── pki │ ├── admin-csr.json │ ├── apiserver-csr.json │ ├── ca-config.json │ ├── ca.csr │ ├── ca-csr.json │ ├── ca-key.pem │ ├── ca.pem │ ├── controller-manager-csr.json │ ├── etcd-csr.json │ ├── front-proxy-ca.csr │ ├── front-proxy-ca-csr.json │ ├── front-proxy-ca-key.pem │ ├── front-proxy-ca.pem │ ├── front-proxy-client-csr.json │ ├── kube-proxy-csr.json │ └── scheduler-csr.json ├── README.md ├── sh │ ├── 00.init_install.sh │ ├── 01.chrony.sh │ ├── 02.kernel.sh │ ├── 03.scpbin.sh │ ├── 04.etcd.sh │ ├── 05.nginx.sh │ ├── 06.ipvs.sh │ ├── 07.containerd.sh │ ├── 08.ssl.sh │ ├── 09.apiserver.sh │ ├── 10.controller-manager.sh │ ├── 11.scheduler.sh │ ├── 12.kubelet.sh │ ├── 13.kube-proxy.sh │ ├── 14.yaml.sh │ └── main.sh ├── ssl ├── ssl_etcd └── yaml ├── bootstrap.secret.yaml ├── calico.yaml ├── coredns_init.yaml ├── flannel_init.yaml ├── ingress_init.yaml ├── metrics-server.yaml └── nfs-storage.yaml
脚本配置参考
#!/bin/bash # k8s节点网段,方便做chronyd对时 NODEIPS=192.168.3.0/24 # k8s集群所有节点 HOSTS=(master1 master2 master3 node1) #可以以数组方式添加节点,添加之后需要在下方备注节点IP地址 # k8s管理节点 MASTERS=(master1 master2 master3) # k8s工作节点 WORKS=(master1 master2 master3 node1) #可以以数组方式添加节点,添加之后需要在下方备注节点IP地址 # 每个节点对应的IP地址 master1=192.168.3.201 master2=192.168.3.202 master3=192.168.3.203 node1=192.168.3.204 #node2=192.168.123.15 # 节点root密码,方便脚本自动免密 export SSHPASS=1 # 二进制文件所在目录 PATH=$PATH:/k8s/bin/ # 配置kubectl自动补全 source <(kubectl completion bash) # 服务网段(Service CIDR),部署前路由不可达,部署后集群内部使用IP:Port可达 SERVICE_CIDR="10.100.0.0/16" # Pod 网段(Cluster CIDR),部署前路由不可达,部署后路由可达(flanneld 保证) CLUSTER_CIDR="172.31.0.0/16" # 服务端口范围(NodePort Range) NODE_PORT_RANGE="30000-40000" # etcd集群服务地址列表(默认复用3个master节点) ETCD_ENDPOINTS="https://$master1:2379,https://$master2:2379,https://$master3:2379" # etcd集群服务地址列表(默认复用3个master节点) ETCD_CLUSTERS="master1=https://$master1:2380,master2=https://$master2:2380,master3=https://$master3:2380" # flanneld 网络配置前缀 FLANNEL_ETCD_PREFIX="/kubernetes/network" # kubernetes 服务IP(预先分配,一般为SERVICE_CIDR中的第一个IP) CLUSTER_KUBERNETES_SVC_IP="10.100.0.1" # 集群 DNS 服务IP(从SERVICE_CIDR 中预先分配) CLUSTER_DNS_SVC_IP="10.100.0.2" # 集群 DNS 域名 CLUSTER_DNS_DOMAIN="cluster.lcal." logger() { TIMESTAMP=$(date +'%Y-%m-%d %H:%M:%S') case "$1" in debug) printf "\e[1;34m===================== ${TIMESTAMP} =====================\e[0m\n" printf "\e[7;36m[DEBUG] $2 \e[0m\n" #echo -e "$TIMESTAMP \033[36mDEBUG $2\033[0m" ;; info) printf "\e[1;34m===================== ${TIMESTAMP} =====================\e[0m\n" printf "\e[7;32m[INFO] $2 \e[0m\n" #echo -e "$TIMESTAMP \033[32mINFO $2\033[0m" ;; warn) printf "\e[1;34m===================== ${TIMESTAMP} =====================\e[0m\n" printf "\e[7;33m[WARNING] $2 \e[0m\n" #echo -e "$TIMESTAMP \033[33mWARN $2\033[0m" ;; error) printf "\e[1;34m===================== ${TIMESTAMP} =====================\e[0m\n" printf "\e[7;31m[ERROR] $2 \e[0m\n" #echo -e "$TIMESTAMP \033[31mERROR $2\033[0m" ;; *) ;; esac }
脚本执行结果
3主1从集群节点概况
[root@master1 sh]# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master1 Ready <none> 48m v1.25.4 192.168.3.201 <none> CentOS Linux 7 (Core) 6.1.0-1.el7.elrepo.x86_64 containerd://1.6.10 master2 Ready <none> 48m v1.25.4 192.168.3.202 <none> CentOS Linux 7 (Core) 6.1.0-1.el7.elrepo.x86_64 containerd://1.6.10 master3 Ready <none> 48m v1.25.4 192.168.3.203 <none> CentOS Linux 7 (Core) 6.1.0-1.el7.elrepo.x86_64 containerd://1.6.10 node1 Ready <none> 48m v1.25.4 192.168.3.204 <none> CentOS Linux 7 (Core) 6.1.0-1.el7.elrepo.x86_64 containerd://1.6.10
安装CNI之后集群Pod概况
[root@master1 sh]# kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx ingress-nginx-admission-create-rn7k7 0/1 ContainerCreating 0 1m ingress-nginx ingress-nginx-admission-patch-pxq5x 0/1 ContainerCreating 0 1m ingress-nginx ingress-nginx-controller-86ccc65f47-59njl 0/1 ContainerCreating 0 1m kube-flannel kube-flannel-ds-dmtbr 1/1 Running 0 19s kube-flannel kube-flannel-ds-msq9p 1/1 Running 0 19s kube-flannel kube-flannel-ds-v5rzc 1/1 Running 0 19s kube-flannel kube-flannel-ds-vpr24 1/1 Running 0 19s kube-system coredns-5d4d84bd85-j4xvd 1/1 Running 0 10m kube-system coredns-5d4d84bd85-knvbx 1/1 Running 0 10m kube-system metrics-server-5b8d488886-w2f99 1/1 Running 0 10m