编程技术分享平台

网站首页 > 技术教程 正文

kubeadm部署kubernetes集群(kubernetes部署应用)

xnh888 2024-09-30 04:48:33 技术教程 16 ℃ 0 评论

1.主机规划

角色 hostname IP

master db1 192.168.0.201

node1 db2 192.168.0.202

OS: redhat 7.2 最小化安装即可

需要配置网卡桥接,需要访问外网下载镜像


现在开始Master和Node都要做

2.配置基本信息

# yum install  vim  net-tools wget bash-com* -y

# vi /etc/hosts
192.168.0.201 db1
192.168.0.202 db2

3.配置网络信息

# systemctl stop  NetworkManager
# systemctl disable NetworkManager
# systemctl mask  NetworkManager
# vi  /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE="Ethernet"
BOOTPROTO="none"
IPADDR=192.168.0.201                                   //写自己虚拟机NAT网络的CIDR和网关
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DNS2=114.114.114.114
DEVICE="enp0s3"
ONBOOT="yes"
# systemctl enable network

4.关闭firewall,使用iptables

# systemctl disable firewalld.service
# systemctl stop  firewalld.service
# systemctl mask firewalld.service
# yum install iptables-services -y
# systemctl enable  iptables.service
# service iptables save

5.把selinux设置为disabled状态

# sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
# setenforce 0
# reboot 
调整之后,需要重启才能生效

6.设置内核参数

# vi /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0

# modprobe br_netfilter
# sysctl -p  /etc/sysctl.d/k8s.conf

7.关闭交换内存

# swapoff -a
# sed -ir 's/.*swap/#&/g' /etc/fstab

8.添加阿里云源

# wget -O /etc/yum.repos.d/Centos-7-Ali.repo https://mirrors.aliyun.com/repo/Centos-7.repo

9.安装配置docker

安装docker tools
# yum install yum-utils device-mapper-persistent-data lvm2 -y
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum list docker-ce --showduplicates | sort -r

安装docker-ce
# yum install docker-ce-19.03.9-3.el7 -y

修改docker镜像加速器
# mkdir /etc/docker
# vim  /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://3ca84f1l.mirror.aliyuncs.com"]         
}
备注:阿里云docker镜像加速器:
打开网址:https://cr.console.aliyun.com/#/accelerator
      注册、登录、设置密码,左下角,然后在页面上可以看到加速器地址,类似于:https://123abc.mirror.aliyuncs.com
# systemctl  daemon-reload
# systemctl  enable docker  
# systemctl  start  docker 
# docker info  

10.配置k8s,阿里云镜像

# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enable=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# yum repolist 

11.k8s安装

# yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0 ipsvadm 
# systemctl enable kubelet
注意,如果是安装node节点,务必保证版本和master一致

开启转发
# iptables -P FORWARD ACCEPT

=====================以下部分不用做
这一步可以不做,前面配置阿里源,会去阿里源拉去对应的镜像,这里采用1.19.0,最新版本不要用,因为没有,拉去会失败。
预先下载镜像
可以调用
kubeadm config images list --kubernetes-version=1.19.0
得到所需的镜像和版本号
k8s.gcr.io/kube-apiserver:v1.19.0
k8s.gcr.io/kube-controller-manager:v1.19.0
k8s.gcr.io/kube-scheduler:v1.19.0
k8s.gcr.io/kube-proxy:v1.19.0
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
由于国内网络原因,无法直接下载以上镜像,所以可以通过代理源自行下载

目前可用的代理源包括:
– registry.cn-hangzhou.aliyuncs.com/google_containers/*
其中coredns可以直接调用docker pull coredns/coredns:1.6.5进行下载,
其他都可以把前面的k8s.gcr.io替换为以上前缀pull down
pull完成后使用docker tag指令将前缀换回k8s.gcr.io即可

docker pull registry.aliyuncs.com/google-containers/kube-apiserver:v1.19.7
docker tag registry.aliyuncs.com/google-containers/kube-apiserver:v1.19.0 gcr.io/google_containers/kube-apiserver:v1.19.7

配置kubelet参数
这里涉及到前面parse image的版本号,保持同步
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --pod-infra-container-image=k8s.gcr.io/pause:3.2"

至此公共部分完成


12.Master配置

在Master端执行
[root@db1 ~]# mkdir -p $HOME/.kube
[root@db1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@db1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
简单来说就是把admin.conf复制到对应用户根目录.kube/config文件,并修改归属关系,
root用户就是放到/root/.kube/config

  
查看node
[root@db1 ~]# kubectl get node
NAME   STATUS     ROLES    AGE     VERSION
db1    NotReady   master   8m11s   v1.19.0

13.kubectl配置

在node节点执行。向集群添加新节点,执行在kubeadm init输出的kubeadm join命令。
[root@db2 ~]# kubeadm join 192.168.0.201:6443 --token rm3lna.2d4uarrsskk7vjcc \
    --discovery-token-ca-cert-hash sha256:f3747e539ffafa3d5634393971c86bcdcab9838421c2a0dd13e9388439d41d28

[root@db2 ~]# scp root@db1:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf
[root@db2 ~]# echo export KUBECONFIG=/etc/kubernetes/admin.conf >> /root/.bash_profile
[root@db2 ~]# source /root/.bash_profile

[root@db2 ~]# kubectl get node
NAME   STATUS     ROLES    AGE     VERSION
db1    NotReady   master   14m     v1.19.0
db2    NotReady   <none>   4m54s   v1.19.0

由于没有配置网络,所以这里还是NotReady状态。继续后面的配置

14.节点加入集群

在node节点执行。向集群添加新节点,执行在kubeadm init输出的kubeadm join命令。
[root@db2 ~]# kubeadm join 192.168.0.201:6443 --token rm3lna.2d4uarrsskk7vjcc \
    --discovery-token-ca-cert-hash sha256:f3747e539ffafa3d5634393971c86bcdcab9838421c2a0dd13e9388439d41d28

[root@db2 ~]# scp root@db1:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf
[root@db2 ~]# echo export KUBECONFIG=/etc/kubernetes/admin.conf >> /root/.bash_profile
[root@db2 ~]# source /root/.bash_profile

[root@db2 ~]# kubectl get node
NAME   STATUS     ROLES    AGE     VERSION
db1    NotReady   master   14m     v1.19.0
db2    NotReady   <none>   4m54s   v1.19.0

由于没有配置网络,所以这里还是NotReady状态。继续后面的配置

token默认有效期为24小时,过期后需要重新创建:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

15.配置k8s网络

这里遇到了coredns无法启动的问题,进而导致kubectl get nodes一直是NotReady,这里提供一个命令

echo "199.232.4.133 raw.githubusercontent.com" >> /etc/hosts
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

配置flannel网络

[root@db1 ~]# kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
db1    Ready    master   21m   v1.19.0
db2    Ready    <none>   11m   v1.19.0

查看node状态

[root@db1 ~]# kubectl get pod -o wide -n kube-system
NAME                          READY   STATUS     RESTARTS   AGE     IP              NODE   NOMINATED NODE   READINESS GATES
coredns-6d56c8448f-ndx9j      1/1     Running    0          20m     10.44.0.1       db1    <none>           <none>
coredns-6d56c8448f-zz4rm      1/1     Running    0          20m     10.44.0.2       db1    <none>           <none>
etcd-db1                      1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
kube-apiserver-db1            1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
kube-controller-manager-db1   1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
kube-flannel-ds-7vz8g         0/1     Init:0/1   0          13s     192.168.0.201   db1    <none>           <none>
kube-flannel-ds-h5d26         0/1     Init:0/1   0          13s     192.168.0.202   db2    <none>           <none>
kube-proxy-2q6ht              1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
kube-proxy-lc9rj              1/1     Running    0          10m     192.168.0.202   db2    <none>           <none>
kube-scheduler-db1            1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
weave-net-crn7z               2/2     Running    0          2m50s   192.168.0.201   db1    <none>           <none>
weave-net-vz7qc               2/2     Running    0          2m50s   192.168.0.202   db2    <none>           <none> 

查看pod状态

[root@db1 ~]# kubectl get pod -o wide -n kube-system
NAME                          READY   STATUS     RESTARTS   AGE     IP              NODE   NOMINATED NODE   READINESS GATES
coredns-6d56c8448f-ndx9j      1/1     Running    0          20m     10.44.0.1       db1    <none>           <none>
coredns-6d56c8448f-zz4rm      1/1     Running    0          20m     10.44.0.2       db1    <none>           <none>
etcd-db1                      1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
kube-apiserver-db1            1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
kube-controller-manager-db1   1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
kube-flannel-ds-7vz8g         0/1     Init:0/1   0          13s     192.168.0.201   db1    <none>           <none>
kube-flannel-ds-h5d26         0/1     Init:0/1   0          13s     192.168.0.202   db2    <none>           <none>
kube-proxy-2q6ht              1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
kube-proxy-lc9rj              1/1     Running    0          10m     192.168.0.202   db2    <none>           <none>
kube-scheduler-db1            1/1     Running    0          20m     192.168.0.201   db1    <none>           <none>
weave-net-crn7z               2/2     Running    0          2m50s   192.168.0.201   db1    <none>           <none>
weave-net-vz7qc               2/2     Running    0          2m50s   192.168.0.202   db2    <none>           <none> 

16.安装kubernetes-dashboard

k8s dashboard是一个常用UI控制台组件,目前已更新到2.0版本(1.x版本不再支持k8s 1.6以上版本,虽然能安装但是无法正常访问deployments)

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部。
# vim recommended.yaml
--- 
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001       # 添加
  type: NodePort            # 添加
  selector:
    k8s-app: kubernetes-dashboard
    
---

# kubectl apply -f recommended.yaml
# kubectl get pods,svc -n kubernetes-dashboard
NAME                                             READY   STATUS    RESTARTS   AGE
pod/dashboard-metrics-scraper-7b59f7d4df-tcvv5   1/1     Running   0          21s
pod/kubernetes-dashboard-665f4c5ff-v2dnf         1/1     Running   0          21s

NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
service/dashboard-metrics-scraper   ClusterIP   10.100.195.96   <none>        8000/TCP        21s
service/kubernetes-dashboard        NodePort    10.100.27.197   <none>        443:30001/TCP   22s
[root@db1 ~]# netstat -an|grep 30001
tcp        0      0 0.0.0.0:30001           0.0.0.0:*               LISTEN     

查看pod日志
kubectl describe pod kubernetes-dashboard-665f4c5ff-v2dnf -n kubernetes-dashboard

访问方式:

https://192.168.0.201:30001

查询登录token

# kubectl get secrets -n kubernetes-dashboard
NAME                               TYPE                                  DATA   AGE
default-token-6tjx9                kubernetes.io/service-account-token   3      4m59s
kubernetes-dashboard-certs         Opaque                                0      4m59s
kubernetes-dashboard-csrf          Opaque                                1      4m59s
kubernetes-dashboard-key-holder    Opaque                                2      4m59s
kubernetes-dashboard-token-w5xp2   kubernetes.io/service-account-token   3      4m59s

查询到kubernetes-dashboard-token-xxxxx的条目后describe一下就能看到token了

# kubectl describe secret kubernetes-dashboard-token-w5xp2 -n kubernetes-dashboard
Name:         kubernetes-dashboard-token-w5xp2
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: 7ec0b131-edb8-4910-9b01-2b2efac98e83

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  20 bytes
token:        eyJhbGciOiJSUzI1NiIsImtpZCI6IkR2MUNQeDBBYUp2bFlTSzhFRnh6TDJ6eG83RDA2QVB1V0dhN2lvZG9NNlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi13NXhwMiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjdlYzBiMTMxLWVkYjgtNDkxMC05YjAxLTJiMmVmYWM5OGU4MyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.HZdMUWal4eFmhvbZh4RDZ_DA0JYPxflUk--Gd2Rb3vuLEnhOJAncCbhgIJjuOqjT1CnWpgY6S0bsHk4JpW51192A_N8hGqdY0_c5bpAvehX0fYOimjVRwnBYwOFtSZooJeQs3XnVxa9j8-lrvCGNuLY05NCfVdgy9dEPGJvHRO81EPN0uHfh5kAumU6WQoC8NNc0i1ynibvzaOdGulkfpaHd2GkYH9I-Tl9DpHAAWdt8xl0ty-8Qv-bIv8kvNcpMfY1MxUM6duvcwNJq-czpBQRrMiIOV7FAfeXyw066IrdWGHGGxHkfwWtpc375aqoHSxmyslxDHjsBYgS76kpsDg

访问成功界面,最小用户权限

创建service account并绑定默认cluster-admin管理员集群角色:

# kubectl create serviceaccount dashboard-admin -n kube-system
# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
查看管理员权限的Token
# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
Name:         dashboard-admin-token-gvt5w
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: dashboard-admin
              kubernetes.io/service-account.uid: 866014b5-5790-49a9-b06f-43ed50336150

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkR2MUNQeDBBYUp2bFlTSzhFRnh6TDJ6eG83RDA2QVB1V0dhN2lvZG9NNlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tZ3Z0NXciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiODY2MDE0YjUtNTc5MC00OWE5LWIwNmYtNDNlZDUwMzM2MTUwIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.H7uZweWL2jXFSmcjKMWe5X1qfrQdVZWFQbvAqpqBPqvK3AFqFBLauU82JEhsPOHT3pUI7lmUJ1H9_jIIaicMzbrrMI0Co9TjOb3bpV-BAF_UmO1cUCBus1haZkCmbqweEtWWFUwu5aqsyAwb2dmdtPUiFhwreRHsa-qLgOLALLIQyy1BVgS960M7p1HrcQNBSAceeNG8P50Gqd0mmNWE5TrfCjfHzMGyBdvBD1qLdo-gjmGX6hMHP30qclpJH7zpkAMKpNv8qFy5s56VTRxAT1vqUzCxXnyqWN2z_epbxfpCiSHJXv8ByqctAl53SHNy-rs5LjoKG9BMoVGk1Te0Yg

管理员权限登陆 https://192.168.0.201:30001


kubernetes dashboard 排错

如果dashboard没有部署到master节点会出现无法连接10.96.0.1:443的故障

需要Deployment中增加一个nodeSelector ,格式如下:

kubernetes.io/hostname: mastername

默认token登录有效期很短,可添加环境变量,找到kubernetesui/dashboard image,在下面的args内添加参数:

--token-ttl=43200(12小时)

查看node的标签

# kubectl get nodes --show-labels
NAME   STATUS   ROLES    AGE     VERSION   LABELS
db1    Ready    master   3h46m   v1.19.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=db1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
db2    Ready    <none>   3h36m   v1.19.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=db2,kubernetes.io/os=linux

17.集群测试

17.1 部署deployment service

通过deployment部署一个nginx
# kubectl create deployment nginx-deploy --image=nginx:1.18
通过svc暴露服务
# kubectl expose deployment nginx-deploy --name=nginx-svc --port=80 --target-port=80 --type=NodePort
查看
# kubectl get deploy,pods,svc -o wide
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES       SELECTOR
deployment.apps/nginx-deploy   1/1     1            1           2m56s   nginx        nginx:1.18   app=nginx-deploy

NAME                               READY   STATUS    RESTARTS   AGE     IP           NODE   NOMINATED NODE   READINESS GATES
pod/nginx-deploy-fb74b55d4-t5slf   1/1     Running   0          2m56s   10.244.1.6   db2    <none>           <none>

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE     SELECTOR
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        3h40m   <none>
service/nginx-svc    NodePort    10.101.243.114   <none>        80:30488/TCP   2m30s   app=nginx-deploy
 
在node节点访问
#  curl -I 10.244.1.6    此为pod IP
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Thu, 12 Nov 2020 06:30:35 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 12:43:12 GMT
Connection: keep-alive
ETag: "5e9eea60-264"
Accept-Ranges: bytes
 
# curl -I 10.101.243.114:80      此为svc的IP
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Thu, 12 Nov 2020 06:30:54 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Apr 2020 12:43:12 GMT
Connection: keep-alive
ETag: "5e9eea60-264"
Accept-Ranges: bytes

# curl 192.168.0.202:30488     此为db2节点的endpoint
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

17.2 集群DNS测试

kubeadm方式默认已部署coredns
# kubectl get pods -n kube-system
NAME                          READY   STATUS    RESTARTS   AGE
coredns-6d56c8448f-ndx9j      1/1     Running   0          3h42m
coredns-6d56c8448f-zz4rm      1/1     Running   0          3h42m
 
# kubectl run busybox-test --rm -it --image=busybox:1.28.4 -- sh
If you don't see a command prompt, try pressing enter.
/ # nslookup kubernetes    
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name:      kubernetes
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
/ # nslookup nginx-svc    此svc刚才是刚才创建的
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      nginx-svc
Address 1: 10.101.243.114 nginx-svc.default.svc.cluster.local
解析正常

18.重置k8s集群

18.1 重置k8s集群

重置k8s,主节点执行
# kubeadm reset

kubeadm reset 负责从使用 kubeadm init 或 kubeadm join 命令创建的文件中清除节点本地文件系统。
对于控制平面节点,reset 还从 etcd 集群中删除该节点的本地 etcd 堆成员,
还从 kubeadm ClusterStatus 对象中删除该节点的信息。 
ClusterStatus 是一个 kubeadm 管理的 Kubernetes API 对象,该对象包含 kube-apiserver 端点列表。

18.2 删除node节点

驱逐这个node01节点上的pod
# kubectl drain node01 --delete-local-data --force --ignore-daemonsets

删除这个node01节点
kubectl delete node node01

然后再node01上执行
kubeadm reset
systemctl stop kubelet
systemctl stop docker

rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/

ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1

systemctl start docker
systemctl start kubelet

如果不做上面的操作的话会导致这个节点上的pod无法启动,
具体报错信息为:networkPlugin cni failed to set up pod "alertmanager-main-1_monitoring" 
network: failed to set bridge ad has an IP address different from 10.244.5.1/24 ,
意思是已经集群网络cni已经有一个不同于10.244.51.1/24 的网络地址,
所以需要执行上述命令重置节点网络。

18.3 重新加入这个node节点

节点加入集群的命令格式:kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash> 

由于默认token的有效期为24小时,当过期之后,该token就不可用了,解决方法如下:
重新生成新的token ==> kubeadm token create 

# 1.查看当前的token列表
# kubeadm token list

# 2.重新生成新的token
# kubeadm token create

# 3.再次查看当前的token列表
# kubeadm token list

# 4.获取ca证书sha256编码hash值
# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

# 5.节点加入集群
# kubeadm join 172.16.40.2:58443 --token 369tcl.oe4punpoj9gaijh7(新的token) --discovery-token-ca-cert-hash sha256:7ae10591aa593c2c36fb965d58964a84561e9ccd416ffe7432550a0d0b7e4f90(ca证书sha256编码hash值) 

再次在master节点查看node发现已经加入到集群了。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表