当前位置: 首页 > article >正文

【k8s集群应用】kubeadm1.20高可用部署(3master)

文章目录

  • Kubeadm - K8S1.20 - 高可用集群部署
    • Kubernetes 环境准备
      • 1. 基础配置
      • 2. 修改主机名
      • 3. 修改 hosts 文件
      • 4. 时间同步
      • 5. Linux 资源限制
      • 6. 升级内核
      • 7. 调整内核参数
      • 8. 加载 ip_vs 模块
    • Kubernetes 集群部署
      • 在所有节点上安装 Docker
      • 在所有节点上安装 kubeadm、kubelet 和 kubectl
      • 在所有 Master 节点上部署 Haproxy
      • 在所有 Master 节点上部署 Keepalived
    • k8集群部署
      • 配置 Master 节点初始化文件
      • 拉取镜像
      • 初始化 Master 节点
      • 部署网络插件
      • 其他节点加入集群
      • 验证集群状态
    • 问题解决
      • 重置集群(如果初始化失败)
      • 节点加入集群
        • 加入集群的 Token 过期
        • 生成 Master 节点加入集群的 `--certificate-key`
      • Master 节点污点管理
        • 查看污点
        • 2.2 取消污点
      • 修改 NodePort 的默认端口范围
        • 修改 kube-apiserver 配置
      • 外部 etcd 部署配置
        • 生成 Kubeadm 配置文件
        • 编辑 Kubeadm 配置文件
        • 示例配置文件
        • 应用配置并初始化集群

Kubeadm - K8S1.20 - 高可用集群部署

注意
master节点cpu核心数要求大于2

  • 最新的版本不一定好,但相对于旧版本,核心功能稳定,但新增功能、接口相对不稳
  • 学会一个版本的 高可用部署,其他版本操作都差不多
  • 宿主机尽量升级到CentOS 7.9
  • 内核kernel升级到 4.19+ 这种稳定的内核
  • 部署k8s版本时,尽量找 1.xx.5 这种大于5的小版本(这种一般是比较稳定的版本)

Kubernetes 环境准备

1. 基础配置

  • 关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
  • 关闭 SELinux
    setenforce 0
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    
  • 清空 iptables 规则
    iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
    
  • 关闭 swap 交换
    swapoff -a
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    

2. 修改主机名

  • 主机名设置
    # 在 master01 上
    hostnamectl set-hostname master01
    # 在 master02 上
    hostnamectl set-hostname master02
    # 在 master03 上
    hostnamectl set-hostname master03
    # 在 node01 上
    hostnamectl set-hostname node01
    # 在 node02 上
    hostnamectl set-hostname node02
    

3. 修改 hosts 文件

  • 添加 IP 映射
    vim /etc/hosts
    # 添加以下内容
    192.168.80.10 master01
    192.168.80.11 master02
    192.168.80.12 master03
    192.168.80.20 node01
    192.168.80.30 node02
    

4. 时间同步

  • 安装 ntpdate
    yum -y install ntpdate
    
  • 设置时区
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    echo 'Asia/Shanghai' >/etc/timezone
    
  • 同步时间
    ntpdate time2.aliyun.com
    
  • 设置定时任务
    systemctl enable --now crond
    crontab -e
    # 添加以下内容
    */30 * * * * /usr/sbin/ntpdate time2.aliyun.com
    

5. Linux 资源限制

  • 修改 limits.conf
    vim /etc/security/limits.conf
    # 添加以下内容
    * soft nofile 65536
    * hard nofile 131072
    * soft nproc 65535
    * hard nproc 655350
    * soft memlock unlimited
    * hard memlock unlimited
    

6. 升级内核

  • 下载内核 RPM 包
    wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm -O /opt/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm
    wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm -O /opt/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm
    
  • 安装内核
    cd /opt/
    yum localinstall -y kernel-ml*
    
  • 设置默认内核并重启
    grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
    grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
    grubby --default-kernel
    reboot
    

7. 调整内核参数

  • 创建 k8s.conf
    cat > /etc/sysctl.d/k8s.conf <<EOF
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    fs.may_detach_mounts = 1
    vm.overcommit_memory=1
    vm.panic_on_oom=0
    fs.inotify.max_user_watches=89100
    fs.file-max=52706963
    fs.nr_open=52706963
    net.netfilter.nf_conntrack_max=2310720
    
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.tcp_keepalive_probes = 3
    net.ipv4.tcp_keepalive_intvl =15
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_max_orphans = 327680
    net.ipv4.tcp_orphan_retries = 3
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.ip_conntrack_max = 65536
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_timestamps = 0
    net.core.somaxconn = 16384
    EOF
    
  • 生效参数
    sysctl --system
    

8. 加载 ip_vs 模块

  • 加载模块
    for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
    

Kubernetes 集群部署

在所有节点上安装 Docker

  1. 安装必要的依赖包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  2. 添加 Docker 仓库
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  3. 安装 Docker
    yum install -y docker-ce docker-ce-cli containerd.io
    
  4. 配置 Docker
    • 创建 Docker 配置文件目录:
      mkdir /etc/docker
      
    • 编辑 daemon.json 文件以配置 Docker 镜像加速器和日志选项:
      cat > /etc/docker/daemon.json <<EOF
      {
        "registry-mirrors": ["https://docker.m.daocloud.io", "https://docker.1panel.live"],
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
          "max-size": "500m", "max-file": "3"
        }
      }
      EOF
      
  5. 重启 Docker 服务并设置开机自启
    systemctl daemon-reload
    systemctl restart docker.service
    systemctl enable docker.service
    
  6. 验证 Cgroup Driver
    docker info | grep "Cgroup Driver"
    # 应输出:Cgroup Driver: systemd
    

在所有节点上安装 kubeadm、kubelet 和 kubectl

  1. 定义 Kubernetes yum 仓库
    cat > /etc/yum.repos.d/kubernetes.repo << EOF
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
  2. 安装 kubeadm、kubelet 和 kubectl
    yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15
    
  3. 配置 Kubelet 使用阿里云的 pause 镜像
    • 编辑 /etc/sysconfig/kubelet 文件:
      cat > /etc/sysconfig/kubelet <<EOF
      KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2"
      EOF
      
  4. 启动并设置 kubelet 开机自启
    systemctl enable --now kubelet
    

在所有 Master 节点上部署 Haproxy

  1. 安装 Haproxy
    yum -y install haproxy
    
  2. 配置 Haproxy
    • 编辑 /etc/haproxy/haproxy.cfg 文件,以配置 Haproxy 作为 Kubernetes API Server 的负载均衡器。
    • 配置示例如下:
      # global 配置段
      global
          log         127.0.0.1 local0 info
          log         127.0.0.1 local1 warning
          chroot      /var/lib/haproxy
          pidfile     /var/run/haproxy.pid
          maxconn     4000
          user        haproxy
          group       haproxy
          daemon
          stats socket /var/lib/haproxy/stats
      
      # defaults 配置段
      defaults
          mode                    tcp
          log                     global
          option                  tcplog
          option                  dontlognull
          option                  redispatch
          retries                 3
          timeout queue           1m
          timeout connect         10s
          timeout client          1m
          timeout server          1m
          timeout check           10s
          maxconn                 3000
      
      # frontend 配置段:监控接口
      frontend monitor-in
          bind *:33305
          mode http
          option httplog
          monitor-uri /monitor
      
      # frontend 配置段:Kubernetes API Server 入口
      frontend k8s-master
          bind *:6443
          mode tcp
          option tcplog
          default_backend k8s-master
      
      # backend 配置段:Kubernetes Master 节点后端
      backend k8s-master
          mode tcp
          option tcplog
          option tcp-check
          balance roundrobin
          server k8s-master1 192.168.80.10:6443  check inter 10000 fall 2 rise 2 weight 1
          server k8s-master2 192.168.80.11:6443  check inter 10000 fall 2 rise 2 weight 1
          server k8s-master3 192.168.80.12:6443  check inter 10000 fall 2 rise 2 weight 1
      
  3. 启动并设置 Haproxy 开机自启
    systemctl enable --now haproxy
    

在所有 Master 节点上部署 Keepalived

  1. 安装 Keepalived
    yum -y install keepalived
    
  2. 配置 Keepalived
    • 创建并编辑 /etc/keepalived/keepalived.conf 文件,以配置 Keepalived 实现高可用性的 VRRP(虚拟路由冗余协议)。
    • 配置示例如下:
      # global_defs 配置段
      global_defs {
          router_id LVS_HA1  # 每个节点的路由标识符应不同
      }
      
      # vrrp_script 配置段:检查 Haproxy 状态的脚本
      vrrp_script chk_haproxy {
          script "/etc/keepalived/check_haproxy.sh"
          interval 2
          weight 2
      }
      
      # vrrp_instance 配置段:定义 VRRP 实例
      vrrp_instance VI_1 {
          state MASTER  # 本机实例状态,MASTER/BACKUP,备机应配置为 BACKUP
          interface ens33  # 网络接口名
          virtual_router_id 51  # 虚拟路由器 ID,应保持一致
          priority 100  # 本机初始权重,备机应设置小于主机的值
          advert_int 1  # VRRP 广告间隔
          virtual_ipaddress {
              192.168.80.100  # 设置虚拟 IP(VIP)地址
          }
          track_script {
              chk_haproxy
          }
      }
      
    • 创建并编辑 /etc/keepalived/check_haproxy.sh 脚本,以检查 Haproxy 是否运行:
      #!/bin/bash
      if ! killall -0 haproxy; then
          systemctl stop keepalived
      fi
      
      • 确保脚本具有可执行权限:
        chmod +x /etc/keepalived/check_haproxy.sh
        
  3. 启动并设置 Keepalived 开机自启
    systemctl enable --now keepalived
    

k8集群部署

配置 Master 节点初始化文件

  • 生成默认配置文件
    kubeadm config print init-defaults > /opt/kubeadm-config.yaml
    
cd /opt/
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12   advertiseAddress: 192.168.80.10		#指定当前master节点的IP地址
13   bindPort: 6443

21 apiServer:
22   certSANs:								#在apiServer属性下面添加一个certsSANs的列表,添加所有master节点的IP地址和集群VIP地址
23   - 192.168.80.100
24   - 192.168.80.10
25   - 192.168.80.11
26   - 192.168.80.12

30 clusterName: kubernetes
31 controlPlaneEndpoint: "192.168.80.100:6443"		#指定集群VIP地址
32 controllerManager: {}

38 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers			#指定镜像下载地址
39 kind: ClusterConfiguration
40 kubernetesVersion: v1.20.15				#指定kubernetes版本号
41 networking:
42   dnsDomain: cluster.local
43   podSubnet: "10.244.0.0/16"				#指定pod网段,10.244.0.0/16用于匹配flannel默认网段
44   serviceSubnet: 10.96.0.0/16			#指定service网段
45 scheduler: {}
#末尾再添加以下内容
--- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs									#把默认的kube-proxy调度方式改为ipvs模式
  • 编辑配置文件

    • 修改 localAPIEndpoint.advertiseAddress 为当前 Master 节点的 IP 地址。
    • apiServer.certSANs 中添加所有 Master 节点的 IP 地址和集群 VIP 地址。
    • 设置 controlPlaneEndpoint 为集群 VIP 地址。
    • 修改 imageRepository 为阿里云镜像仓库。
    • 设置 kubernetesVersion 为目标版本(例如 v1.20.15)。
    • 配置 networking 部分,指定 podSubnetserviceSubnet
    • 添加 KubeProxy 配置,将模式改为 ipvs
  • 迁移配置文件

    kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
    

拉取镜像

  • 拷贝配置文件到其他节点
    for i in master02 master03 node01 node02; do scp /opt/new.yaml $i:/opt/; done
    
  • 在所有节点拉取镜像
    kubeadm config images pull --config /opt/new.yaml
    

初始化 Master 节点

  • 执行初始化命令
    kubeadm init --config new.yaml --upload-certs | tee kubeadm-init.log
    
#提示:
.........
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
 https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of the control-plane node running the following command on each as root:
#master节点加入使用的命令,记录!
 kubeadm join 192.168.80.100:6443 --token 7t2weq.bjbawausm0jaxury \
   --discovery-token-ca-cert-hash sha256:e76e4525ca29a9ccd5c24142a724bdb6ab86512420215242c4313fb830a4eb98 \
   --control-plane --certificate-key 0f2a7ff2c46ec172f834e237fcca8a02e7c29500746594c25d995b78c92dde96

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:
#node节点加入使用的命令。记录!
kubeadm join 192.168.80.100:6443 --token 7t2weq.bjbawausm0jaxury \
   --discovery-token-ca-cert-hash sha256:e76e4525ca29a9ccd5c24142a724bdb6ab86512420215242c4313fb830a4eb98

  • 配置 kubectl(master01节点):

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 修改controller-manager 和 scheduler 的配置文件

    vim /etc/kubernetes/manifests/kube-scheduler.yaml
    vim /etc/kubernetes/manifests/kube-controller-manager.yaml
    # 注释掉 - --port=0
    systemctl restart kubelet
    
  • 若初始化失败

kubeadm reset -f
ipvsadm --clear 
rm -rf ~/.kube
再次进行初始化

部署网络插件

所有节点上传 flannel 镜像 flannel.tar 和网络插件 cni-plugins-linux-amd64-v0.8.6.tgz 到 /opt 目录,master节点上传 kube-flannel.yml 文件

  • 上传并加载 Flannel 镜像

    cd /opt
    docker load < /opt/flannel.tar
    
  • 准备 CNI 插件

    mv /opt/cni /opt/cni_bak
    mkdir -p /opt/cni/bin
    tar zxvf /opt/cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin
    
  • 部署 Flannel 网络插件

    kubectl apply -f /opt/kube-flannel.yml
    

其他节点加入集群

  • Master 节点加入

    kubeadm join 192.168.80.100:6443 --token <token> --discovery-token-ca-cert-hash <hash> --control-plane --certificate-key <key>
    
  • 配置新加入的 Master 节点的 kubectl

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • node节点加入

    kubeadm join 192.168.80.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>
    

验证集群状态

  • master01查看集群信息
    kubectl get nodes
    
NAME       STATUS   ROLES                  AGE    VERSION
master01   Ready    control-plane,master   2h5m   v1.20.15
master02   Ready    control-plane,master   2h5m   v1.20.15
master03   Ready    control-plane,master   2h5m   v1.20.15
node01     Ready    <none>                 2h5m   v1.20.15
node02     Ready    <none>                 2h5m   v1.20.15

  • 查看 Pod 状态
    kubectl get pod -n kube-system
    
NAME                               READY   STATUS    RESTARTS   AGE
coredns-74ff55c5b-4fg44            1/1     Running   2          2h5m
coredns-74ff55c5b-jsdxz            1/1     Running   0          2h5m
etcd-master01                      1/1     Running   1          2h5m
etcd-master02                      1/1     Running   1          2h5m
etcd-master03                      1/1     Running   1          2h5m
kube-apiserver-master01            1/1     Running   1          2h5m
kube-apiserver-master02            1/1     Running   1          2h5m
kube-apiserver-master03            1/1     Running   1          2h5m
kube-controller-manager-master01   1/1     Running   3          2h5m
kube-controller-manager-master02   1/1     Running   1          2h5m
kube-controller-manager-master03   1/1     Running   2          2h5m
kube-flannel-ds-8qtx6              1/1     Running   2          2h4m
kube-flannel-ds-lmzdz              1/1     Running   0          2h4m
kube-flannel-ds-nb9qx              1/1     Running   1          2h4m
kube-flannel-ds-t4l4x              1/1     Running   1          2h4m
kube-flannel-ds-v592x              1/1     Running   1          2h4m
kube-proxy-6gd5j                   1/1     Running   1          2h5m
kube-proxy-f8k96                   1/1     Running   3          2h5m
kube-proxy-h7nrf                   1/1     Running   1          2h5m
kube-proxy-j96b6                   1/1     Running   1          2h5m
kube-proxy-mgmx6                   1/1     Running   0          2h5m
kube-scheduler-master01            1/1     Running   1          2h5m
kube-scheduler-master02            1/1     Running   2          2h5m
kube-scheduler-master03            1/1     Running   2          2h5m


问题解决

重置集群(如果初始化失败)

kubeadm reset -f
ipvsadm --clear
rm -rf ~/.kube

节点加入集群

加入集群的 Token 过期

Token值在集群初始化后,有效期为 24小时 ,过了24小时过期。进行重新生成Token,再次加入集群,新生成的Token为 2小时。

kubeadm token create --print-join-command

执行后,您将得到一个类似于以下的命令,用于新节点加入集群:

kubeadm join 192.168.80.100:6443 --token NEW_TOKEN --discovery-token-ca-cert-hash sha256:CA_CERT_HASH

记得将NEW_TOKENCA_CERT_HASH 替换为实际生成的值。

生成 Master 节点加入集群的 --certificate-key

当您需要将新的 master 节点加入到集群中时,需要获取 --certificate-key

kubeadm init phase upload-certs --upload-certs

该命令的输出中包含了新的 certificate key。使用这个 key 和之前生成的 token,可以执行类似于以下的命令来加入新的 master 节点

kubeadm join 192.168.80.100:6443 --token EXISTING_TOKEN --discovery-token-ca-cert-hash sha256:CA_CERT_HASH --control-plane --certificate-key CERTIFICATE_KEY

记得将 EXISTING_TOKENCA_CERT_HASHCERTIFICATE_KEY 替换为实际的值。

Master 节点污点管理

查看污点
kubectl describe node -l node-role.kubernetes.io/master= | grep Taints
2.2 取消污点

如果需要在测试环境中取消 master 节点的污点,以便能够部署非系统 Pod

kubectl taint node -l node-role.kubernetes.io/master node-role.kubernetes.io/master:NoSchedule-

或者,如果知道具体的节点名称,您可以针对单个节点执行:

kubectl taint node NODE_NAME node-role.kubernetes.io/master:NoSchedule-

记得将 NODE_NAME 替换为实际的节点名称。

修改 NodePort 的默认端口范围

默认k8s的使用端口的范围为30000左右,作为对外部提供的端口。我们也可以通过对配置文件的修改去指定默认的对外端口的范围。

  • 报错
The Service "nginx-svc" is invalid: spec.ports[0].nodePort: Invalid value: 80: provided port is not in the valid range. The range of valid ports is 30000-32767

修改 kube-apiserver 配置

要修改 NodePort 的默认端口范围,需要编辑 kube-apiserver 的配置文件(通常是 /etc/kubernetes/manifests/kube-apiserver.yaml)。找到 --service-node-port-range 参数,并将其设置为所需的端口范围。

vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --service-cluster-ip-range=10.96.0.0/16
- --service-node-port-range=1-65535    #找到后进行添加即可

无需重启,k8s会自动生效

外部 etcd 部署配置

生成 Kubeadm 配置文件

使用 kubeadm config print init-defaults 命令可以生成 Kubeadm 的默认初始化配置文件,并将其重定向到指定文件路径,例如 /opt/kubeadm-config.yaml

kubeadm config print init-defaults > /opt/kubeadm-config.yaml
编辑 Kubeadm 配置文件
cd /opt/
vim kubeadm-config.yaml

示例配置文件的详细解读

  • InitConfiguration

    • bootstrapTokens:定义了用于节点加入的 token,包括其所属的组、token 值、有效期(ttl)以及用途(usages)。
    • localAPIEndpoint:指定了 API 服务器的广告地址(advertiseAddress)和绑定端口(bindPort)。
    • nodeRegistration:包含了节点注册的相关信息,如 CRI 套接字路径(criSocket)、节点名称(name)以及污点(taints)。
  • ClusterConfiguration

    • apiServer:配置了 API 服务器的相关参数,包括证书的主机名/IP 地址(certSANs)、控制平面超时时间(timeoutForControlPlane)。
    • certificatesDir:指定了存放证书的目录。
    • clusterName:集群的名称。
    • controlPlaneEndpoint:控制平面的端点地址,通常是 Kubernetes API 服务器的地址和端口。
    • controllerManagerdnsetcdimageRepositoryscheduler:分别配置了控制器管理器、DNS、etcd、镜像仓库和调度器的相关参数。其中,etcd 部分配置为外部 etcd 集群的访问方式,需要指定 etcd 集群的端点、CA 证书、服务器证书和私钥文件的路径。
    • kubernetesVersion:指定了 Kubernetes 的版本。
    • networking:配置了网络的 DNS 域(dnsDomain)、Pod 子网(podSubnet)和服务子网(serviceSubnet)。
  • KubeProxyConfiguration

    • 配置了 kube-proxy 的模式为 IPVS。
示例配置文件
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
bootstrapTokens:
- token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
localAPIEndpoint:
  advertiseAddress: 192.168.80.14
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master01
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master

---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
apiServer:
  certSANs:
  - 10.96.0.1
  - 127.0.0.1
  - localhost
  - kubernetes
  - kubernetes.default
  - kubernetes.default.svc
  - kubernetes.default.svc.cluster.local
  - 192.168.80.100
  - 192.168.80.10-12
  - master01-03
  timeoutForControlPlane: 4m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 192.168.80.100:6443
dns:
  type: CoreDNS
etcd:
  external:
    endpoints:
    - https://192.168.80.10:2379
    - https://192.168.80.11:2379
    - https://192.168.80.12:2379
    caFile: /opt/etcd/ssl/ca.pem
    certFile: /opt/etcd/ssl/server.pem
    keyFile: /opt/etcd/ssl/server-key.pem
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kubernetesVersion: v1.20.15
networking:
  dnsDomain: cluster.local
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/16

---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

注意

  • certSANs 中,使用了范围表示法(192.168.80.10-12master01-03)来简化配置,但 Kubeadm 可能不支持这种表示法,根据实际情况替换为具体的 IP 地址和主机名。
  • 外部 etcd 的证书文件路径需要确保在所有 master 节点上都可访问。
应用配置并初始化集群
kubeadm init --config /opt/kubeadm-config.yaml

http://www.kler.cn/a/446573.html

相关文章:

  • (14)D-FINE网络,爆锤yolo系列
  • C++ 智能指针(高频面试题)
  • 多音轨视频使用FFmpeg删除不要音轨方法
  • Redis的主从集群以及哨兵机制学习总结
  • Ansible 批量管理华为 CE 交换机
  • run postinstall error, please remove node_modules before retry!
  • Eclipse设置自动补全后 输入字符串类型变量后会自动追加String的解决方案
  • 网络安全技术深度解析与实践案例
  • P1305 新二叉树
  • RPA 助力电商:自动化商品信息上传,节省人力资源 —— 以影刀 RPA 为例【rpa.top】
  • 【信息系统项目管理师】高分论文:论信息系统项目的成本管理(社区网格化管理平台系统)
  • 如何使用Python进行音频片断合成
  • vscode配置markdown代码片段snippet不生效问题
  • MFC/C++学习系列之简单记录13
  • Pytorch常用内置优化器合集
  • lvs介绍与应用
  • 提示词工程-Prompt Engineering
  • 关于小程序内嵌h5打开新的小程序
  • Spring Boot 核心技术解析与应用实践
  • 【深度学习量化交易10】miniQMT快速上手教程案例集——使用xtQuant获取板块及成分股数据篇
  • IIS漏洞复现
  • 如何进行JS框架搭建
  • 一二三物联网 | 工业技改盛事,共绘产业升级新篇章
  • 递归实现指数型枚举(递归)
  • pydantic BaseModel
  • C++点云大文件读取