附034.Kubernetes_v1.21.0高可用部署架构二

kubeadm介绍

kubeadm概述

Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践。
kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。kubeadm 只关心启动集群,而不关心其他工作,如部署前的节点准备工作、安装各种Kubernetes Dashboard、监控解决方案以及特定云提供商的插件,这些都不属于 kubeadm 关注范围。

kubeadm功能

kubeadm 主要有如下功能:

  • kubeadm init 启动一个 Kubernetes 主节点;
  • kubeadm join 启动一个 Kubernetes 工作节点并且将其加入到集群;
  • kubeadm upgrade 更新一个 Kubernetes 集群到新版本;
  • kubeadm config 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集群,您需要对集群做一些配置以便使用 kubeadm upgrade 命令;
  • kubeadm token 管理 kubeadm join 使用的令牌;
  • kubeadm reset 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改;
  • kubeadm version 打印 kubeadm 版本;
  • kubeadm alpha 预览一组可用的新功能以便从社区搜集反馈。

本方案描述

本方案基于kubeadm部署,且实现高可用,同时提供相关Kubernetes周边组件。本方案可直接应用于生产环境。

  • 本方案采用kubeadm部署Kubernetes 1.21.0版本;
  • 基础系统为CentOS8.3;
  • etcd采用混部方式;
  • KeepAlived:实现VIP高可用;
  • HAProxy:以系统systemd形式运行,提供反向代理至3个master 6443端口;
  • 其他主要部署组件包括:
  • Metrics:度量;
  • Dashboard:Kubernetes 图形UI界面;
  • Helm:Kubernetes Helm包管理工具;
  • Ingress:Kubernetes 服务暴露;
  • containerd:Kubernetes底层容器时;
  • Longhorn:Kubernetes 动态存储组件。

  • worker04节点仅为测试模拟使用。

提示:本方案部署所使用脚本均由本人提供,可能不定期更新。

部署规划

节点规划

节点主机名 IP 类型 运行服务 master01 172.24.8.141 Kubernetes master节点 KeepAlived、HAProxy、containerd、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico、rook-osd master02 172.24.8.142 Kubernetes master节点 KeepAlived、HAProxy、containerd、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico、rook-osd master03 172.24.8.143 Kubernetes master节点 KeepAlived、HAProxy、containerd、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico、rook-osd worker01 172.24.8.144 Kubernetes worker节点 containerd、kubelet、proxy、calico、rook-osd、ingress worker02 172.24.8.145 Kubernetes worker节点 containerd、kubelet、proxy、calico、rook-osd、ingress worker03 172.24.8.146 Kubernetes worker节点 containerd、kubelet、proxy、calico、rook-osd、ingress worker04 172.24.8.147 Kubernetes worker节点 containerd、kubelet、proxy、calico、rook-osd、ingress

Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master。

附034.Kubernetes_v1.21.0高可用部署架构二

Kubernetes高可用架构中etcd与Master节点组件混布方式特点:

  • 所需机器资源少
  • 部署简单,利于管理
  • 容易进行横向扩展
  • etcd复用Kubernetes的高可用
  • 风险大,一台master主机挂了,master和etcd就都少了一套,集群冗余度受到一定影响

提示:本实验使用Keepalived+HAProxy架构实现Kubernetes的高可用。

主机名配置

建议对所有节点主机名进行相应配置。

[root@master01 ~]# hostnamectl set-hostname master01        #其他节点依次修改

[root@master01 ~]# cat >> /etc/hosts << EOF
172.24.8.141 master01
172.24.8.142 master02
172.24.8.143 master03
172.24.8.144 worker01
172.24.8.145 worker02
172.24.8.146 worker03
EOF

变量准备

为实现自动化部署,便于管理和维护,建议做如下变量准备。

[root@master01 ~]# wget http://down.linuxsb.com/mydeploy/k8s/v1.21.0/environment.sh

[root@master01 ~]# vi environment.sh            #&#x786E;&#x8BA4;&#x76F8;&#x5173;&#x4E3B;&#x673A;&#x540D;&#x548C;IP
#!/bin/sh
#****************************************************************#
ScriptName: environment.sh
Author: xhy
Create Date: 2020-05-30 16:30
Modify Author: xhy
Modify Date: 2020-05-30 16:30
Version:
#***************************************************************#
&#x96C6;&#x7FA4; MASTER &#x673A;&#x5668; IP &#x6570;&#x7EC4;
export MASTER_IPS=(172.24.8.141 172.24.8.142 172.24.8.143)

&#x96C6;&#x7FA4; MASTER IP &#x5BF9;&#x5E94;&#x7684;&#x4E3B;&#x673A;&#x540D;&#x6570;&#x7EC4;
export MASTER_NAMES=(master01 master02 master03)

&#x96C6;&#x7FA4; NODE &#x673A;&#x5668; IP &#x6570;&#x7EC4;
export NODE_IPS=(172.24.8.144 172.24.8.145 172.24.8.146)

&#x96C6;&#x7FA4; NODE IP &#x5BF9;&#x5E94;&#x7684;&#x4E3B;&#x673A;&#x540D;&#x6570;&#x7EC4;
export NODE_NAMES=(worker01 worker02 worker03)

&#x96C6;&#x7FA4;&#x6240;&#x6709;&#x673A;&#x5668; IP &#x6570;&#x7EC4;
export ALL_IPS=(172.24.8.141 172.24.8.142 172.24.8.143 172.24.8.144 172.24.8.145 172.24.8.146)

&#x96C6;&#x7FA4;&#x6240;&#x6709;IP &#x5BF9;&#x5E94;&#x7684;&#x4E3B;&#x673A;&#x540D;&#x6570;&#x7EC4;
export ALL_NAMES=(master01 master02 master03 worker01 worker02 worker03)

互信配置

为了方便远程分发文件和执行命令,本实验配置master01节点到其它节点的 ssh 信任关系,即免秘钥管理所有其他节点。

[root@master01 ~]# ssh-keygen -f ~/.ssh/id_rsa -N ''
[root@master01 ~]# for all_ip in ${ALL_IPS[@]}
  do
    echo ">>> ${all_ip}"
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@${all_ip}
  done

提示:此操作仅需要在master01节点操作。

环境初始化

kubeadm本身不负责对环境的准别,环境的初始化准备本方案使用脚本自动完成。
使用如下脚本对基础环境进行初始化,主要包括:

  • 安装containerd
  • 关闭SELinux及防火墙
  • 优化相关内核参数
  • 关闭swap
  • 设置相关模块
  • 配置相关基础软件
[root@master01 ~]# wget http://down.linuxsb.com/mydeploy/k8s/v1.21.0/k8sconinit.sh

[root@master01 ~]# vim k8sconinit.sh
#!/bin/sh
#****************************************************************#
ScriptName: k8sinit.sh
Author: xhy
Create Date: 2020-05-30 16:30
Modify Author: xhy
Modify Date: 2021-04-16 07:35
Version:
#***************************************************************#
Initialize the machine. This needs to be executed on every machine.

rm -f /var/lib/rpm/__db.00*
rpm -vv --rebuilddb
yum clean all
yum makecache
sleep 3s
Install containerd
CONVERSION=1.4.4                #&#x786E;&#x8BA4;containerd&#x7248;&#x672C;&#xFF0C;&#x5176;&#x4ED6;&#x4FDD;&#x6301;&#x9ED8;&#x8BA4;
&#x2026;&#x2026;

提示:此操作仅需要在master01节点操作。

  • 对于某些特性,可能需要升级内核,内核升级操作见018.Linux升级内核
  • 4.19版及以上内核nf_conntrack_ipv4已经改为nf_conntrack。
  • Kubernetes 1.20.0后可兼容的containerd版本最新为1.4.4。
[root@master01 ~]# source environment.sh
[root@master01 ~]# chmod +x *.sh
[root@master01 ~]# for all_ip in ${ALL_IPS[@]}
  do
    echo ">>> ${all_ip}"
    scp -rp /etc/hosts root@${all_ip}:/etc/hosts
    scp -rp k8sconinit.sh root@${all_ip}:/root/
    ssh root@${all_ip} "bash /root/k8sconinit.sh"
  done

部署高可用组件

HAProxy安装

HAProxy是可提供高可用性、负载均衡以及基于TCP(从而可以反向代理kubeapiserver等应用)和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种高可用解决方案。

[root@master01 ~]# for master_ip in ${MASTER_IPS[@]}
  do
    echo ">>> ${master_ip}"
    ssh root@${master_ip} "yum -y install gcc gcc-c++ make libnl3 libnl3-devel libnfnetlink openssl-devel wget openssh-clients systemd-devel zlib-devel pcre-devel"
    ssh root@${master_ip} "wget http://down.linuxsb.com/software/haproxy-2.3.9.tar.gz"
    ssh root@${master_ip} "tar -zxvf haproxy-2.3.9.tar.gz"
    ssh root@${master_ip} "cd haproxy-2.3.9/ && make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_ZLIB=1 USE_SYSTEMD=1 PREFIX=/usr/local/haprpxy && make install PREFIX=/usr/local/haproxy"
    ssh root@${master_ip} "cp /usr/local/haproxy/sbin/haproxy /usr/sbin/"
    ssh root@${master_ip} "useradd -r haproxy && usermod -G haproxy haproxy"
    ssh root@${master_ip} "mkdir -p /etc/haproxy && cp -r /root/haproxy-2.3.9/examples/errorfiles/ /usr/local/haproxy/"
  done

KeepAlived安装

KeepAlived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。本方案3台master节点运行Keepalived,一台为主服务器(MASTER),另外两台为备份服务器(BACKUP)。
对集群外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

[root@master01 ~]# for master_ip in ${MASTER_IPS[@]}
  do
    echo ">>> ${master_ip}"
    ssh root@${master_ip} "yum -y install curl gcc gcc-c++ make libnl3 libnl3-devel libnfnetlink openssl-devel"
    ssh root@${master_ip} "wget http://down.linuxsb.com/software/keepalived-2.2.2.tar.gz"
    ssh root@${master_ip} "tar -zxvf keepalived-2.2.2.tar.gz"
    ssh root@${master_ip} "cd keepalived-2.2.2/ && LDFLAGS=\"$LDFAGS -L /usr/local/openssl/lib/\" ./configure --sysconf=/etc --prefix=/usr/local/keepalived && make && make install"
    ssh root@${master_ip} "systemctl enable keepalived --now && systemctl restart keepalived"
  done

提示:如上仅需Master01节点操作,从而实现所有节点自动化安装。若出现如下报错:undefined reference to `OPENSSL_init_ssl’,可带上openssl lib路径:

LDFLAGS="$LDFAGS -L /usr/local/openssl/lib/" ./configure --sysconf=/etc --prefix=/usr/local/keepalived

创建配置文件

对集群相关的组件提前配置,可使用如下脚本定义。

[root@master01 ~]# wget http://down.linuxsb.com/mydeploy/k8s/v1.21.0/k8sconfig.sh               #拉取自动部署脚本

[root@master01 ~]# vi k8sconfig.sh
#!/bin/sh
#****************************************************************#
ScriptName: k8sconfig
Author: xhy
Create Date: 2020-06-08 20:00
Modify Author: xhy
Modify Date: 2021-04-16 23:16
Version: v3
#***************************************************************#
set variables below to create the config files, all files will create at ./kubeadm directory

master keepalived virtual ip address
export K8SHA_VIP=172.24.8.100

master01 ip address
export K8SHA_IP1=172.24.8.141

master02 ip address
export K8SHA_IP2=172.24.8.142

master03 ip address
export K8SHA_IP3=172.24.8.143

master01 hostname
export K8SHA_HOST1=master01

master02 hostname
export K8SHA_HOST2=master02

master03 hostname
export K8SHA_HOST3=master03

master01 network interface name
export K8SHA_NETINF1=eth0

master02 network interface name
export K8SHA_NETINF2=eth0

master03 network interface name
export K8SHA_NETINF3=eth0

keepalived auth_pass config
export K8SHA_KEEPALIVED_AUTH=412f7dc3bfed32194d1600c483e10ad1d

kubernetes CIDR pod subnet
export K8SHA_PODCIDR=10.10.0.0

kubernetes CIDR svc subnet
export K8SHA_SVCCIDR=10.20.0.0

[root@master01 ~]# bash k8sconfig.sh

解释:如上仅需Master01节点操作。执行k8sconfig.sh脚本后会生产如下配置文件清单:

  • kubeadm-config.yaml:kubeadm初始化配置文件,位于kubeadm/目录
  • keepalived:keepalived配置文件,位于各个master节点的/etc/keepalived目录
  • haproxy:haproxy的配置文件,位于各个master节点的/etc/haproxy/目录
  • calico.yaml:calico网络组件部署文件,位于kubeadm/calico/目录
[root@master01 ~]# vim kubeadm/kubeadm-config.yaml  #&#x68C0;&#x67E5;&#x96C6;&#x7FA4;&#x521D;&#x59CB;&#x5316;&#x914D;&#x7F6E;
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
networking:
  serviceSubnet: "10.20.0.0/16"                     #&#x8BBE;&#x7F6E;svc&#x7F51;&#x6BB5;
  podSubnet: "10.10.0.0/16"                         #&#x8BBE;&#x7F6E;Pod&#x7F51;&#x6BB5;
  dnsDomain: "cluster.local"
kubernetesVersion: "v1.21.0"                        #&#x8BBE;&#x7F6E;&#x5B89;&#x88C5;&#x7248;&#x672C;
controlPlaneEndpoint: "172.24.8.100:16443"          #&#x8BBE;&#x7F6E;&#x76F8;&#x5173;API VIP&#x5730;&#x5740;
apiServer:
  certSANs:
  - master01
  - master02
  - master03
  - 127.0.0.1
  - 172.24.8.141
  - 172.24.8.142
  - 172.24.8.143
  - 172.24.8.100
  timeoutForControlPlane: 4m0s
certificatesDir: "/etc/kubernetes/pki"
imageRepository: "k8s.gcr.io"

&#x2026;&#x2026;                                                #&#x5982;&#x4E0B;&#x5168;&#x90E8;&#x6CE8;&#x91CA;
#apiVersion: v1
#kind: Secret
#metadata:
 labels:
   k8s-app: kubernetes-dashboard
 name: kubernetes-dashboard-certs
 namespace: kubernetes-dashboard
#type: Opaque
&#x2026;&#x2026;
kind: Deployment
&#x2026;&#x2026;
  replicas: 3                                   #&#x9002;&#x5F53;&#x8C03;&#x6574;&#x4E3A;3&#x526F;&#x672C;
&#x2026;&#x2026;
    spec:
      containers:
        - name: kubernetes-dashboard
          image: kubernetesui/dashboard:v2.2.0
          imagePullPolicy: IfNotPresent         #&#x4FEE;&#x6539;&#x955C;&#x50CF;&#x4E0B;&#x8F7D;&#x7B56;&#x7565;
          ports:
            - containerPort: 8443
              protocol: TCP
          args:
            - --auto-generate-certificates
            - --namespace=kubernetes-dashboard
            - --tls-key-file=tls.key
            - --tls-cert-file=tls.crt
            - --token-ttl=3600                  #&#x8FFD;&#x52A0;&#x5982;&#x4E0A;args
&#x2026;&#x2026;
      nodeSelector:
       "kubernetes.io/os": "linux"
        "dashboard": enable                     #&#x90E8;&#x7F72;&#x5728;master&#x8282;&#x70B9;
&#x2026;&#x2026;
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: dashboard-metrics-scraper
  name: dashboard-metrics-scraper
  namespace: kubernetes-dashboard
spec:
  type: NodePort                                #&#x65B0;&#x589E;
  ports:
    - port: 8000
      targetPort: 8000
      nodePort: 30000                           #&#x65B0;&#x589E;
  selector:
    k8s-app: dashboard-metrics-scraper
&#x2026;&#x2026;
   replicas: 3                                  #&#x9002;&#x5F53;&#x8C03;&#x6574;&#x4E3A;3&#x526F;&#x672C;
&#x2026;&#x2026;
      nodeSelector:
       "beta.kubernetes.io/os": linux
        "dashboard": enable                     #&#x90E8;&#x7F72;&#x5728;master&#x8282;&#x70B9;
&#x2026;&#x2026;

正式部署

[root@master01 dashboard]# kubectl apply -f recommended.yaml
[root@master01 dashboard]# kubectl get deployment kubernetes-dashboard -n kubernetes-dashboard
[root@master01 dashboard]# kubectl get services -n kubernetes-dashboard
[root@master01 dashboard]# kubectl get pods -o wide -n kubernetes-dashboard

附034.Kubernetes_v1.21.0高可用部署架构二

提示:master NodePort 30001/TCP映射到 dashboard pod 443 端口。

创建管理员账户

提示:dashboard v2版本默认没有创建具有管理员权限的账户,可如下操作创建。

[root@master01 dashboard]# cat <<eof> dashboard-admin.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kubernetes-dashboard
EOF

[root@master01 dashboard]# kubectl apply -f dashboard-admin.yaml
</eof>

ingress暴露dashboard

创建ingress tls

[root@master01 dashboard]# kubectl -n kubernetes-dashboard create secret tls kubernetes-dashboard-tls --cert=/root/dashboard/certs/tls.crt --key=/root/dashboard/certs/tls.key
[root@master01 dashboard]# kubectl -n kubernetes-dashboard describe secrets kubernetes-dashboard-tls

附034.Kubernetes_v1.21.0高可用部署架构二

创建ingress策略

[root@master01 dashboard]# cat <<eof> dashboard-ingress.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: longhorn-manager
  name: longhorn-manager
&#x2026;&#x2026;
        imagePullPolicy: IfNotPresent
&#x2026;&#x2026;
kind: Service
apiVersion: v1
metadata:
  labels:
    app: longhorn-ui
  name: longhorn-frontend
  namespace: longhorn-system
spec:
  type: NodePort                                    #&#x4FEE;&#x6539;&#x4E3A;nodeport
  selector:
    app: longhorn-ui
  ports:
  - port: 80
    targetPort: 8000
    nodePort: 30002
apiVersion: v1
kind: Pod
metadata:
  name: longhorn-pod
  namespace: default
spec:
  containers:
  - name: volume-test
    image: nginx:stable-alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: volv
      mountPath: /data
    ports:
    - containerPort: 80
  volumes:
  - name: volv
    persistentVolumeClaim:
      claimName: longhorn-pvc
EOF
</eof>
[root@master01 longhorn]# kubectl apply -f longhornpod.yaml
[root@master01 longhorn]# kubectl get pods
[root@master01 longhorn]# kubectl get pvc
[root@master01 longhorn]# kubectl get pv

附034.Kubernetes_v1.21.0高可用部署架构二

Ingress暴露Longhorn

[root@master01 longhorn]# yum -y install httpd-tools
[root@master01 longhorn]# htpasswd -c auth xhy          #&#x521B;&#x5EFA;&#x7528;&#x6237;&#x540D;&#x548C;&#x5BC6;&#x7801;
New password: [&#x8F93;&#x5165;&#x5BC6;&#x7801;]
Re-type new password:  [&#x8F93;&#x5165;&#x5BC6;&#x7801;]

提示:也可通过如下命令创建:

USER=xhy; PASSWORD=x120952576; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" >> auth
[root@master01 longhorn]# kubectl -n longhorn-system create secret generic longhorn-basic-auth --from-file=auth

[root@master01 longhorn]# cat <<eof> longhorn-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: longhorn-ingress
  namespace: longhorn-system
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: longhorn-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required '
spec:
  rules:
  - host: longhorn.odocker.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: longhorn-frontend
            port:
              number: 80
EOF
</eof>
[root@master01 longhorn]# kubectl apply -f longhorn-ingress.yaml
[root@master01 longhorn]# kubectl -n longhorn-system get ingress
NAME               CLASS    HOSTS                  ADDRESS                                  PORTS   AGE
longhorn-ingress   <none>   longhorn.odocker.com   172.24.8.144,172.24.8.145,172.24.8.146   80      45s
</none>

确认验证

浏览器访问:longhorn.odocker.com,并输入账号和密码。

附034.Kubernetes_v1.21.0高可用部署架构二

使用xhy/[密码]登录查看。

附034.Kubernetes_v1.21.0高可用部署架构二

Helm部署

前置准备

Helm 将使用 kubectl 在已配置的集群上部署 Kubernetes 资源,因此需要如下前置准备:

  • 正在运行的 Kubernetes 集群;
  • 预配置的 kubectl 客户端和 Kubernetes 集群正确交互。

二进制安装Helm

[root@master01 ~]# wget https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz
[root@master01 ~]# tar -zxvf helm-v3.5.4-linux-amd64.tar.gz
[root@master01 ~]# cp linux-amd64/helm /usr/local/bin/

[root@master01 ~]# helm version     #&#x67E5;&#x770B;&#x5B89;&#x88C5;&#x7248;&#x672C;
[root@master01 ~]# echo 'source <(helm completion bash)'>> $HOME/.bashrc    #helm&#x81EA;&#x52A8;&#x8865;&#x5168;
</(helm>

提示:更多安装方式参考官方手册:https://helm.sh/docs/intro/install/。

Helm操作

查找chart

helm search:可以用于搜索两种不同类型的源。
helm search hub:搜索 Helm Hub,该源包含来自许多不同仓库的Helm chart。
helm search repo:搜索已添加到本地头helm客户端(带有helm repo add)的仓库,该搜索是通过本地数据完成的,不需要连接公网。

[root@master01 ~]# helm search hub                      #&#x53EF;&#x641C;&#x7D22;&#x5168;&#x90E8;&#x53EF;&#x7528;chart
[root@master01 ~]# helm search hub wordpress

添加repo

[root@master01 ~]# helm repo list                       #&#x67E5;&#x770B;repo
[root@master01 ~]# helm repo add brigade https://brigadecore.github.io/charts
[root@master01 ~]# helm repo add stable https://kubernetes-charts.storage.googleapis.com/   #&#x6DFB;&#x52A0;&#x5B98;&#x65B9;repo
[root@master01 ~]# helm repo add bitnami https://charts.bitnami.com/bitnami

[root@master01 ~]# helm search repo brigade
[root@master01 ~]# helm search repo stable              #&#x641C;&#x7D22;repo&#x4E2D;&#x7684;chart
[root@master01 ~]# helm repo update                     #&#x66F4;&#x65B0;repo&#x7684;chart

扩展:集群扩容及缩容

集群扩容

  • master节点扩容
    参考:添加Master节点 步骤
  • worker节点扩容
    参考:添加Worker节点 步骤

集群缩容

  • master节点缩容
[root@master01 ~]# kubectl drain master03 --delete-emptydir-data --force --ignore-daemonsets
[root@master01 ~]# kubectl delete node master03

[root@master03 ~]# kubeadm reset -f && rm -rf $HOME/.kube
  • worker节点缩容
[root@master01 ~]# kubectl drain worker04 --delete-emptydir-data --force --ignore-daemonsets
[root@master01 ~]# kubectl delete node worker04

[root@worker04 ~]# kubeadm reset -f
[root@worker04 ~]# rm -rf /etc/kubernetes/admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf

Original: https://www.cnblogs.com/itzgr/p/14676860.html
Author: 木二
Title: 附034.Kubernetes_v1.21.0高可用部署架构二

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607241/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球