【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940145.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

五、windows上vscode构建c/c++环境

1、安装vscode 官网下载界面&#xff1a;https://code.visualstudio.com/Download 请根据电脑系统安装所需版本点击下载链接&#xff08;一般情况下点击windows按钮即可&#xff09;鼠标左键双击&#xff0c;即可运行安装程序&#xff0c;点击【确认】&#xff1b;选择安装路径…

Spring实例化的基本流程和Bean处理器

目录 Spring实例化的基本流程 Bean的处理器 Bean工厂后处理器&#xff08;BeanFactoryPostProcessor&#xff09; 动态注册beanDefinition Bean后处理器&#xff08;BeanPostProcessor&#xff09; Spring实例化的基本流程 在了解处理器之前&#xff0c;要清除spring实例化…

【SH】Ubuntu Server 24搭建Web服务器访问Python程序研发笔记

文章目录 说个问题写个方案一、安装Ubuntu Server二、安装Web服务器采用Nginx服务器 三、安装Python及依赖创建项目虚拟环境 四、安装Python Web框架采用Flask框架创建和运行Flask应用&#xff08;以后的重点&#xff09; 五、安装WSGI服务器采用Gunicorn 六、配置Nginx七、验证…

109.【C语言】数据结构之求二叉树的高度

目录 1.知识回顾&#xff1a;高度&#xff08;也称深度&#xff09; 2.分析 设计代码框架 返回左右子树高度较大的那个的写法一:if语句 返回左右子树高度较大的那个的写法二:三目操作符 3.代码 4.反思 问题 出问题的代码 改进后的代码 执行结果 1.知识回顾&#xf…

瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现

瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现 文章目录 3 项目组件优化3.1 实现Swagger文档输出3.2 实现logback日志打印3.3 实现表单校验功能3.4 实现请求参数和响应参数的打印 3 项目组件优化 3.1 实现Swagger文档输出 1&#xff09;在application.yml中增加knife4…

OpenEuler 22.03 安装 flink-1.17.2 集群

零&#xff1a;规划 本次计划安装三台OpenEuler 22.03 版本操作系统的服务器&#xff0c;用于搭建 flink 集群。这里使用flink1.17.2 的原因&#xff0c;是便于后续与springboot的整合 服务器名IP地址作用其他应用flink01192.168.159.133主jdk11、flink-1.17.2flink02192.168.…

[数据结构] 链表

目录 1.链表的基本概念 2.链表的实现 -- 节点的构造和链接 节点如何构造? 如何将链表关联起来? 3.链表的方法(功能) 1).display() -- 链表的遍历 2).size() -- 求链表的长度 3).addFirst(int val) -- 头插法 4).addLast(int val) -- 尾插法 5).addIndex -- 在任意位置…

20241220在荣品开发板PRO-RK3566的buildroot下适配gc2093

20241220在荣品开发板PRO-RK3566的buildroot下适配gc2093 2024/12/20 16:00 余顺?PRO-RK3566开发板 挂 gc2093模块。刷 buildroot的预编译固件。 update-pro-rk3566-buildroot-hdmi-20231130-034633.img 1、现在发现 qcamera的 拍照Capture、Record录像模式都是640x480分辨率…

实习冲刺数据库练习-01 基础查询

原题链接&#xff1a;牛客网在线编程_SQL篇_非技术快速入门 数据表示例&#xff1a; 根据数据表示例要求我们完成以下查询&#xff1a; &#xff08;1&#xff09;获取用户信息表中所有的数据&#xff0c;请你取出相应结果 &#xff08;2&#xff09;获取用户的设备id对应的…

【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换

相关链接&#xff1a; http://mars3d.cn/editor-vue.html?keyex_1_2_1&idmap/other/backgroundImg 实现代码&#xff1a; export function show1() {map.setOptions({scene: {backgroundType: "image",backgroundImage: "url(//data.mars3d.cn/img/busin…

telnet命令检查端口

1、简介 telnet是一种用于远程登录的协议&#xff0c;可以通过telnet客户端连接到远程主机&#xff0c;并在远程主机上执行命令。 2、使用telnet命令检查端口 2.1 进入linux终端 2.2 输入telnet命令 如果没有安装telnet命令&#xff0c;请执行以下命令安装 sudo yum install…

Unity 根据文本宽度自动移动图像位置

游戏中有时候需要变动的显示一个物品的数量&#xff0c;变化的文本宽度不停的变化&#xff0c;这时候需要将物品的icon随着文本的长度而改变位置。 实现思路&#xff1a;使用Content Size Fitter来动态改变内容的大小。 首先建立一个文本组件&#xff0c;添加Content Size Fi…

基于Springboot人口老龄化社区服务与管理平台【附源码】

基于Springboot人口老龄化社区服务与管理平台 效果如下&#xff1a; 系统登陆页面 系统主页面 社区信息页面 社区文件页面 活动报名页面 走访任务管理页面 社区资讯页面 老人信息管理页面 研究背景 随着社会老龄化的加剧&#xff0c;老年人口比例逐渐增加&#xff0c;对老年…

加密数据库在现代企业中的应用实践

以下是对加密数据库在现代企业中的应用实践的详细阐述&#xff1a; 一、加密数据库的应用背景 随着信息技术的飞速发展&#xff0c;现代企业对于数据的安全性和隐私保护要求越来越高。数据库作为存储大量敏感信息的关键设施&#xff0c;其安全性直接关系到企业的商业利益和声誉…

安卓环境配置及打开新项目教程,2024年12月20日最新版

1.去官网下载最新的Android Studio&#xff0c;网址&#xff1a;https://developer.android.com/studio?hlzh-cn 2.下载加速器&#xff0c;注册账号&#xff0c;开启加速器。网址&#xff1a;放在文末。 3.下载安卓代码&#xff0c;项目的路径上不能有中文&#xff0c;特别是…

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 2024/12/17 17:21 缘起&#xff0c;最近需要识别法国电影《地下铁》的法语字幕&#xff0c;使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…

sqlite3 支持位运算 和view和 triger

数据设置条件以后可以.根据门限自动调整其他的值 由数据库记录修改时间,及记录-> 网元设备的告警产生时间,设置超时清除时间,记录系统的原始时间戳 CPp 有 sqlite 支持 json 导出字符串,json 库将字符串,映射为结构体 triger update table 更新到一个 可设置参数列表 ,view …

11-C语言结构体(下篇)

一、结构体指针变量 结构体指针变量&#xff1a;本质上是一个指针变量&#xff0c;保存的是结构体变量的地址。 1.结构体变量的地址 结构体变量的地址&#xff1a;对结构体变量名取地址。 代码演示 typedef struct stu {char name[32];int age;float score; }STU;int main…

linux普通用户使用sudo不需要输密码

1.root用户如果没有密码&#xff0c;先给root用户设置密码 sudo passwd root #设置密码 2.修改visudo配置 su #切换到root用户下 sudo visudo #修改visudo配置文件 用户名 ALL(ALL) NOPASSWD: ALL #下图所示处新增一行配置 用户名需要输入自己当前主机的用户名

百度面试手撕 go context channel部分学习

题目 手撕 对无序的切片查询指定数 使用context进行子协程的销毁 并且进行超时处理。 全局变量定义 var (startLoc int64(0) // --- 未处理切片数据起始位置endLoc int64(0) // --- 切片数据右边界 避免越界offset int64(0) // --- 根据切片和协程数量 在主线程 动态设…