自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

教你一次性成功安裝K8S集群(基于一主兩從模式)

云計算
作者個人研發(fā)的在高并發(fā)場景下,提供的簡單、穩(wěn)定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業(yè)提供了精準定時調(diào)度方案,經(jīng)受住了生產(chǎn)環(huán)境的考驗。

[[354882]]

作者個人研發(fā)的在高并發(fā)場景下,提供的簡單、穩(wěn)定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業(yè)提供了精準定時調(diào)度方案,經(jīng)受住了生產(chǎn)環(huán)境的考驗。為使更多童鞋受益,現(xiàn)給出開源框架地址:

https://github.com/sunshinelyz/mykit-delay

PS: 歡迎各位Star源碼,也可以pr你牛逼哄哄的代碼。

寫在前面

研究K8S有一段時間了,最開始學習K8S時,根據(jù)網(wǎng)上的教程安裝K8S環(huán)境總是報錯。所以,我就改變了學習策略,先不搞環(huán)境搭建了。先通過官網(wǎng)學習了K8S的整體架構(gòu),底層原理,又硬啃了一遍K8S源碼。別問我為哈這樣學,只是我覺得對我個人來說,這樣學能讓我更好的理解整套云原生體系。這不,這次,我總結(jié)了如何一次性成功安裝K8S集群的方法。我們今天先來說說如何基于一主兩從模式搭建K8S集群。后面,我們再上如何完全無坑搭建K8S高可用集群的方案。

文章和搭建環(huán)境所需要的yml文件已收錄到:https://github.com/sunshinelyz/technology-binghe 和 https://gitee.com/binghe001/technology-binghe 。如果文件對你有點幫助,別忘記給個Star哦!

集群規(guī)劃

IP 主機名 節(jié)點 操作系統(tǒng)版本
192.168.175.101 binghe101 Master CentOS 8.0.1905
192.168.175.102 binghe102 Worker CentOS 8.0.1905
192.168.175.103 binghe103 Worker CentOS 8.0.1905

基礎(chǔ)配置

在三臺服務器上的/etc/hosts文件中添加如下配置項。

  1. 192.168.175.101  binghe101 
  2. 192.168.175.102  binghe102 
  3. 192.168.175.103  binghe103 

檢查系統(tǒng)環(huán)境

分別在三臺服務器上檢查系統(tǒng)的環(huán)境。

1.查看服務器操作系統(tǒng)版本

  1. cat /etc/redhat-release 

安裝Docker和K8S集群的服務器操作系統(tǒng)版本需要在CentOS 7以上。

2.查看服務器的主機名

  1. hostname 

注意:集群中服務器的主機名不能是localhost。

3.查看服務器的CPU核數(shù)

  1. lscpu 

注意:集群中服務器的CPU核數(shù)不能少于2個。

4.查看服務器網(wǎng)絡(luò)

以binghe101(Master)服務器為例。在服務器上執(zhí)行 ip route show 命令來查看服務器的默認網(wǎng)卡,如下所示。

  1. [root@binghe101 ~]# ip route show 
  2. default via 192.168.175.2 dev ens33 proto static metric 100  
  3. 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown  
  4. 192.168.175.0/24 dev ens33 proto kernel scope link src 192.168.175.101 metric 100  

在上面的輸出信息中有如下一行標注了binghe101服務器所使用的默認網(wǎng)卡。

  1. default via 192.168.175.2 dev ens33 proto static metric 100  

可以看到,binghe101服務器使用的默認網(wǎng)卡為ens33。

接下來,使用ip address命令查看服務器的IP地址,如下所示。

  1. [root@binghe101 ~]# ip address 
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
  4.     inet 127.0.0.1/8 scope host lo 
  5.        valid_lft forever preferred_lft forever 
  6.     inet6 ::1/128 scope host  
  7.        valid_lft forever preferred_lft forever 
  8. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 
  9.     link/ether 00:0c:29:68:06:63 brd ff:ff:ff:ff:ff:ff 
  10.     inet 192.168.175.101/24 brd 192.168.175.255 scope global noprefixroute ens33 
  11.        valid_lft forever preferred_lft forever 
  12.     inet6 fe80::890f:5a92:4171:2a11/64 scope link noprefixroute  
  13.        valid_lft forever preferred_lft forever 

可以看到,binghe101服務器上的默認網(wǎng)卡的IP地址為192.168.175.101,K8S將使用此 IP 地址與集群內(nèi)的其他節(jié)點通信。集群中所有K8S所使用的IP地址必須可以互通。

Docker安裝

分別在三臺服務器上安裝Docker并配置阿里云鏡像加速器。

1.安裝Docker

新建auto_install_docker.sh腳本文件

  1. vim auto_install_docker.sh 

文件的內(nèi)容如下所示。

  1. export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com 
  2. dnf install yum* 
  3. yum install -y yum-utils  device-mapper-persistent-data  lvm2 
  4. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
  5. dnf install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm 
  6. yum install docker-ce docker-ce-cli -y 
  7. systemctl enable docker.service 
  8. systemctl start docker.service 
  9. docker version 

或者指定Docker的版本進行安裝,此時auto_install_docker.sh腳本文件的內(nèi)容如下所示。

  1. export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com 
  2. dnf install yum* 
  3. yum install -y yum-utils device-mapper-persistent-data lvm2 
  4. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
  5. yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io 
  6. systemctl enable docker.service 
  7. systemctl start docker.service 
  8. docker version 

使用如下命令賦予auto_install_docker.sh文件可執(zhí)行權(quán)限。

  1. chmod a+x ./auto_install_docker.sh 

接下來,直接運行auto_install_docker.sh腳本文件安裝Docker即可。

  1. ./auto_install_docker.sh 

2.配置阿里云鏡像加速器

新建腳本文件aliyun_docker_images.sh。

  1. vim aliyun_docker_images.sh 

文件內(nèi)容如下所示。

  1. mkdir -p /etc/docker 
  2. tee /etc/docker/daemon.json <<-'EOF' 
  3.   "registry-mirrors": ["https://zz3sblpi.mirror.aliyuncs.com"
  4. EOF 
  5. systemctl daemon-reload 
  6. systemctl restart docker 

為aliyun_docker_images.sh腳本文件賦予可執(zhí)行權(quán)限,如下所示。

  1. chmod a+x ./aliyun_docker_images.sh 

執(zhí)行aliyun_docker_images.sh腳本文件配置阿里云鏡像加速器。

  1. ./aliyun_docker_images.sh 

系統(tǒng)設(shè)置

分別在三臺服務器上進行系統(tǒng)設(shè)置。

1.安裝nfs-utils

  1. yum install -y nfs-utils 
  2. yum install -y wget 

2.關(guān)閉防火墻

  1. systemctl stop firewalld 
  2. systemctl disable firewalld 

3.關(guān)閉 SeLinux

  1. setenforce 0 
  2. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 

4.關(guān)閉 swap

  1. swapoff -a 
  2. yes | cp /etc/fstab /etc/fstab_bak 
  3. cat /etc/fstab_bak |grep -v swap > /etc/fstab 

5.修改 /etc/sysctl.conf

新建sys_config.sh腳本文件。

  1. vim sys_config.sh 

sys_config.sh腳本文件的內(nèi)容如下所示,

  1. # 如果有配置,則修改 
  2. sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g"  /etc/sysctl.conf 
  3. sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g"  /etc/sysctl.conf 
  4. sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g"  /etc/sysctl.conf 
  5. sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g"  /etc/sysctl.conf 
  6. sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g"  /etc/sysctl.conf 
  7. sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g"  /etc/sysctl.conf 
  8. sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g"  /etc/sysctl.conf 
  9. # 可能沒有,追加 
  10. echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
  11. echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf 
  12. echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf 
  13. echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf 
  14. echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf 
  15. echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf 
  16. echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf 
  17. # 執(zhí)行命令以應用 
  18. sysctl -p 

執(zhí)行如下命令賦予sys_config.sh文件可執(zhí)行權(quán)限。

  1. chmod a+x ./sys_config.sh 

執(zhí)行sys_config.sh腳本文件。

  1. ./sys_config.sh 

安裝K8S

分別在三臺服務器上安裝K8S。

1.配置K8S yum源

新建k8s_yum.sh腳本文件。

  1. vim k8s_yum.sh 

文件的內(nèi)容如下所示。

  1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
  2. [kubernetes] 
  3. name=Kubernetes 
  4. baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
  5. enabled=1 
  6. gpgcheck=0 
  7. repo_gpgcheck=0 
  8. gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
  9.        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
  10. EOF 

賦予k8s_yum.sh腳本文件的可執(zhí)行權(quán)限。

  1. chmod a+x ./k8s_yum.sh 

執(zhí)行k8s_yum.sh文件。

  1. ./k8s_yum.sh 

2.卸載舊版本的K8S

  1. yum remove -y kubelet kubeadm kubectl 

3.安裝kubelet、kubeadm、kubectl

  1. yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2 

4.修改docker Cgroup Driver為systemd

  1. sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service 

5.重啟 docker,并啟動 kubelet

  1. systemctl daemon-reload 
  2. systemctl restart docker 
  3. systemctl enable kubelet && systemctl start kubelet 

綜合安裝腳本

綜上,上述安裝Docker、進行系統(tǒng)設(shè)置,安裝K8S的操作可以統(tǒng)一成auto_install_docker_k8s.sh腳本。腳本的內(nèi)容如下所示。

  1. #安裝Docker 19.03.8 
  2. export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com 
  3. dnf install yum* 
  4. yum install -y yum-utils device-mapper-persistent-data lvm2 
  5. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
  6. yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io 
  7. systemctl enable docker.service 
  8. systemctl start docker.service 
  9. docker version 
  10.  
  11. #配置阿里云鏡像加速器 
  12. mkdir -p /etc/docker 
  13. tee /etc/docker/daemon.json <<-'EOF' 
  14.   "registry-mirrors": ["https://zz3sblpi.mirror.aliyuncs.com"
  15. EOF 
  16. systemctl daemon-reload 
  17. systemctl restart docker 
  18.  
  19. #安裝nfs-utils 
  20. yum install -y nfs-utils 
  21. yum install -y wget 
  22.  
  23. #關(guān)閉防火墻 
  24. systemctl stop firewalld 
  25. systemctl disable firewalld 
  26.  
  27. #關(guān)閉SeLinux 
  28. setenforce 0 
  29. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 
  30.  
  31. # 關(guān)閉 swap 
  32. swapoff -a 
  33. yes | cp /etc/fstab /etc/fstab_bak 
  34. cat /etc/fstab_bak |grep -v swap > /etc/fstab 
  35.  
  36. #修改 /etc/sysctl.conf 
  37. # 如果有配置,則修改 
  38. sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g"  /etc/sysctl.conf 
  39. sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g"  /etc/sysctl.conf 
  40. sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g"  /etc/sysctl.conf 
  41. sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g"  /etc/sysctl.conf 
  42. sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g"  /etc/sysctl.conf 
  43. sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g"  /etc/sysctl.conf 
  44. sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g"  /etc/sysctl.conf 
  45. # 可能沒有,追加 
  46. echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
  47. echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf 
  48. echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf 
  49. echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf 
  50. echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf 
  51. echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf 
  52. echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf 
  53. # 執(zhí)行命令以應用 
  54. sysctl -p 
  55.  
  56. # 配置K8S的yum源 
  57. cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
  58. [kubernetes] 
  59. name=Kubernetes 
  60. baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
  61. enabled=1 
  62. gpgcheck=0 
  63. repo_gpgcheck=0 
  64. gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
  65.        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
  66. EOF 
  67.  
  68. # 卸載舊版本K8S 
  69. yum remove -y kubelet kubeadm kubectl 
  70.  
  71. # 安裝kubelet、kubeadm、kubectl,這里我安裝的是1.18.2版本,你也可以安裝1.17.2版本 
  72. yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2 
  73.  
  74. # 修改docker Cgroup Driver為systemd 
  75. # # 將/usr/lib/systemd/system/docker.service文件中的這一行 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 
  76. # # 修改為 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd 
  77. # 如果不修改,在添加 worker 節(jié)點時可能會碰到如下錯誤 
  78. # [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".  
  79. # Please follow the guide at https://kubernetes.io/docs/setup/cri/ 
  80. sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service 
  81.  
  82. # 設(shè)置 docker 鏡像,提高 docker 鏡像下載速度和穩(wěn)定性 
  83. # 如果您訪問 https://hub.docker.io 速度非常穩(wěn)定,亦可以跳過這個步驟 
  84. # curl -sSL https://kuboard.cn/install-script/set_mirror.sh | sh -s ${REGISTRY_MIRROR} 
  85.  
  86. # 重啟 docker,并啟動 kubelet 
  87. systemctl daemon-reload 
  88. systemctl restart docker 
  89. systemctl enable kubelet && systemctl start kubelet 
  90.  
  91. docker version 

注意:我安裝的K8S版本是1.18.2,大家在安裝K8S時,也可以選擇其他版本進行安裝

賦予auto_install_docker_k8s.sh腳本文件可執(zhí)行權(quán)限。

  1. chmod a+x ./auto_install_docker_k8s.sh 

執(zhí)行auto_install_docker_k8s.sh腳本文件。

  1. ./auto_install_docker_k8s.sh 

注意:需要在每臺服務器上執(zhí)行auto_install_docker_k8s.sh腳本文件。

初始化Master節(jié)點

只在binghe101服務器上執(zhí)行的操作。

1.初始化Master節(jié)點的網(wǎng)絡(luò)環(huán)境

  1. # 只在 master 節(jié)點執(zhí)行 
  2. # export 命令只在當前 shell 會話中有效,開啟新的 shell 窗口后,如果要繼續(xù)安裝過程,請重新執(zhí)行此處的 export 命令 
  3. export MASTER_IP=192.168.175.101 
  4. # 替換 k8s.master 為 您想要的 dnsName 
  5. export APISERVER_NAME=k8s.master 
  6. # Kubernetes 容器組所在的網(wǎng)段,該網(wǎng)段安裝完成后,由 kubernetes 創(chuàng)建,事先并不存在于您的物理網(wǎng)絡(luò)中 
  7. export POD_SUBNET=172.18.0.1/16 
  8. echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts 

2.初始化Master節(jié)點

在binghe101服務器上創(chuàng)建init_master.sh腳本文件,文件內(nèi)容如下所示。

  1. #!/bin/bash 
  2. # 腳本出錯時終止執(zhí)行 
  3. set -e 
  4.  
  5. if [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]; then 
  6.   echo -e "\033[31;1m請確保您已經(jīng)設(shè)置了環(huán)境變量 POD_SUBNET 和 APISERVER_NAME \033[0m" 
  7.   echo 當前POD_SUBNET=$POD_SUBNET 
  8.   echo 當前APISERVER_NAME=$APISERVER_NAME 
  9.   exit 1 
  10. fi 
  11.  
  12.  
  13. # 查看完整配置選項 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 
  14. rm -f ./kubeadm-config.yaml 
  15. cat <<EOF > ./kubeadm-config.yaml 
  16. apiVersion: kubeadm.k8s.io/v1beta2 
  17. kind: ClusterConfiguration 
  18. kubernetesVersion: v1.18.2 
  19. imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers 
  20. controlPlaneEndpoint: "${APISERVER_NAME}:6443" 
  21. networking: 
  22.   serviceSubnet: "10.96.0.0/16" 
  23.   podSubnet: "${POD_SUBNET}" 
  24.   dnsDomain: "cluster.local" 
  25. EOF 
  26.  
  27. # kubeadm init 
  28. # 根據(jù)您服務器網(wǎng)速的情況,您需要等候 3 - 10 分鐘 
  29. kubeadm init --config=kubeadm-config.yaml --upload-certs 
  30.  
  31. # 配置 kubectl 
  32. rm -rf /root/.kube/ 
  33. mkdir /root/.kube/ 
  34. cp -i /etc/kubernetes/admin.conf /root/.kube/config 
  35.  
  36. # 安裝 calico 網(wǎng)絡(luò)插件 
  37. # 參考文檔 https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onpremises 
  38. echo "安裝calico-3.13.1" 
  39. rm -f calico-3.13.1.yaml 
  40. wget https://kuboard.cn/install-script/calico/calico-3.13.1.yaml 
  41. kubectl apply -f calico-3.13.1.yaml 

賦予init_master.sh腳本文件可執(zhí)行權(quán)限。

  1. chmod a+x ./init_master.sh 

執(zhí)行init_master.sh腳本文件。

  1. ./init_master.sh 

3.查看Master節(jié)點的初始化結(jié)果

(1)確保所有容器組處于Running狀態(tài)

  1. # 執(zhí)行如下命令,等待 3-10 分鐘,直到所有的容器組處于 Running 狀態(tài) 
  2. watch kubectl get pod -n kube-system -o wide 

如下所示。

  1. [root@binghe101 ~]# watch kubectl get pod -n kube-system -o wide 
  2. Every 2.0s: kubectl get pod -n kube-system -o wide                                                                                                                          binghe101: Sat May  2 23:40:33 2020 
  3.  
  4. NAME                                       READY   STATUS    RESTARTS   AGE     IP                NODE        NOMINATED NODE   READINESS GATES 
  5. calico-kube-controllers-5b8b769fcd-l2tmm   1/1     Running   0          3m59s   172.18.203.67     binghe101   <none>           <none> 
  6. calico-node-8krsl                          1/1     Running   0          3m59s   192.168.175.101   binghe101   <none>           <none> 
  7. coredns-546565776c-rd2zr                   1/1     Running   0          3m59s   172.18.203.66     binghe101   <none>           <none> 
  8. coredns-546565776c-x8r7l                   1/1     Running   0          3m59s   172.18.203.65     binghe101   <none>           <none> 
  9. etcd-binghe101                             1/1     Running   0          4m14s   192.168.175.101   binghe101   <none>           <none> 
  10. kube-apiserver-binghe101                   1/1     Running   0          4m14s   192.168.175.101   binghe101   <none>           <none> 
  11. kube-controller-manager-binghe101          1/1     Running   0          4m14s   192.168.175.101   binghe101   <none>           <none> 
  12. kube-proxy-qnffb                           1/1     Running   0          3m59s   192.168.175.101   binghe101   <none>           <none> 
  13. kube-scheduler-binghe101                   1/1     Running   0          4m14s   192.168.175.101   binghe101   <none>           <none> 

(2) 查看 Master 節(jié)點初始化結(jié)果

  1. kubectl get nodes -o wide 

如下所示。

  1. [root@binghe101 ~]# kubectl get nodes -o wide 
  2. NAME        STATUS   ROLES    AGE     VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION         CONTAINER-RUNTIME 
  3. binghe101   Ready    master   5m43s   v1.18.2   192.168.175.101   <none>        CentOS Linux 8 (Core)   4.18.0-80.el8.x86_64   docker://19.3.8 

初始化Worker節(jié)點

1.獲取join命令參數(shù)

在Master節(jié)點上執(zhí)行如下命令獲取join命令參數(shù)。

  1. kubeadm token create --print-join-command 

具體執(zhí)行如下所示。

  1. [root@binghe101 ~]# kubeadm token create --print-join-command 
  2. W0502 23:44:55.218947   59318 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io] 
  3. kubeadm join k8s.master:6443 --token s0hoh1.2cwyf1fyyjl2h04a     --discovery-token-ca-cert-hash sha256:6d78e360dc64d84762611ac6beec8ac0f0fe9f72a5c2cca008df949e07827c19 

其中,有如下一行輸出。

  1. kubeadm join k8s.master:6443 --token s0hoh1.2cwyf1fyyjl2h04a     --discovery-token-ca-cert-hash sha256:6d78e360dc64d84762611ac6beec8ac0f0fe9f72a5c2cca008df949e07827c19 

這行代碼就是獲取到的join命令。

注意:join命令中的token的有效時間為 2 個小時,2小時內(nèi),可以使用此 token 初始化任意數(shù)量的 worker 節(jié)點。

2.初始化Worker節(jié)點

針對所有的 worker 節(jié)點執(zhí)行,在這里,就是在binghe102服務器和binghe103服務器上執(zhí)行。

創(chuàng)建init_worker.sh腳本文件,文件內(nèi)容如下所示。

  1. # 只在 worker 節(jié)點執(zhí)行 
  2. # 192.168.175.101 為 master 節(jié)點的內(nèi)網(wǎng) IP 
  3. export MASTER_IP=192.168.175.101 
  4. # 替換 k8s.master 為初始化 master 節(jié)點時所使用的 APISERVER_NAME 
  5. export APISERVER_NAME=k8s.master 
  6. echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts 
  7.  
  8. # 替換為 master 節(jié)點上 kubeadm token create 命令輸出的join 
  9. kubeadm join k8s.master:6443 --token s0hoh1.2cwyf1fyyjl2h04a     --discovery-token-ca-cert-hash sha256:6d78e360dc64d84762611ac6beec8ac0f0fe9f72a5c2cca008df949e07827c19 

其中,kubeadm join...就是master 節(jié)點上 kubeadm token create 命令輸出的join。

賦予init_worker.sh腳本文件文件可執(zhí)行權(quán)限,并執(zhí)行init_worker.sh腳本文件。

  1. chmod a+x ./init_worker.sh 
  2. ./init_worker.sh 

3.查看初始化結(jié)果

在Master節(jié)點執(zhí)行如下命令查看初始化結(jié)果。

  1. kubectl get nodes -o wide 

如下所示。

  1. [root@binghe101 ~]# kubectl get nodes 
  2. NAME        STATUS   ROLES    AGE     VERSION 
  3. binghe101   Ready    master   20m     v1.18.2 
  4. binghe102   Ready    <none>   2m46s   v1.18.2 
  5. binghe103   Ready    <none>   2m46s   v1.18.2 

注意:kubectl get nodes命令后面加上-o wide參數(shù)可以輸出更多的信息。

重啟K8S集群引起的問題

1.Worker節(jié)點故障不能啟動

Master 節(jié)點的 IP 地址發(fā)生變化,導致 worker 節(jié)點不能啟動。需要重新安裝K8S集群,并確保所有節(jié)點都有固定的內(nèi)網(wǎng) IP 地址。

2.Pod崩潰或不能正常訪問

重啟服務器后使用如下命令查看Pod的運行狀態(tài)。

  1. kubectl get pods --all-namespaces 

發(fā)現(xiàn)很多 Pod 不在 Running 狀態(tài),此時,需要使用如下命令刪除運行不正常的Pod。

  1. kubectl delete pod <pod-name> -n <pod-namespece> 

注意:如果Pod 是使用 Deployment、StatefulSet 等控制器創(chuàng)建的,K8S 將創(chuàng)建新的 Pod 作為替代,重新啟動的 Pod 通常能夠正常工作。

本文轉(zhuǎn)載自微信公眾號「冰河技術(shù)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系冰河技術(shù)公眾號。

 

責任編輯:武曉燕 來源: 冰河技術(shù)
相關(guān)推薦

2020-11-02 13:44:56

CentOSK8SLinux

2020-09-23 10:40:50

Centos7k8sJava

2011-04-18 13:36:42

2024-04-03 09:00:10

2014-08-04 14:38:25

LinuxToken

2013-04-17 09:16:37

2024-02-28 08:18:13

Java日志項目

2023-12-05 08:33:44

滴滴故障k8s

2019-08-06 09:21:45

2021-08-12 09:48:21

Webpack Loa工具Webpack

2023-09-26 07:11:15

KubernetesJob節(jié)點

2021-08-20 11:35:04

服務運維 故障

2009-12-25 14:46:53

Windows 7文件關(guān)聯(lián)

2010-11-24 16:32:50

2014-03-06 15:16:18

安全管理linux安全

2021-11-04 07:49:58

K8SStatefulSetMySQL

2012-09-18 15:04:31

Office 2013微軟

2019-08-12 08:36:33

K8S網(wǎng)絡(luò)Pod

2022-06-02 14:18:44

kubeadm云原生

2022-02-23 08:01:04

KubernetesK8sPod
點贊
收藏

51CTO技術(shù)棧公眾號