二进制部署高可用kubernetes1.25.4

文章目录

    • 关于脚本
    • 目录结构
    • 脚本配置参考
    • 脚本执行结果

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

你可能感兴趣的:(k8s,linux)