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