天天看點

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

一、部署環境

主機清單:

主機名 Centos版本 ip docker version flannel version Keepalived version 主機配置 備注
master01 7.6.1810 172.27.34.3 18.09.9 v0.11.0 v1.3.5 4C4G control plane
master02 172.27.34.4
master03 172.27.34.5
work01 172.27.34.93 / worker nodes
work02 172.27.34.94
work03 172.27.34.95
VIP 172.27.34.130 在control plane上浮動
client 172.27.34.234

共有7台伺服器,3台control plane,3台work,1台client。

k8s 版本:

kubelet version kubeadm version kubectl version
v1.16.4 kubectl選裝

二、高可用架構

本文采用kubeadm方式搭建高可用k8s叢集,k8s叢集的高可用實際是k8s各核心元件的高可用,這裡使用主備模式,架構如下:

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

主備模式高可用架構說明:

核心元件 高可用模式 高可用實作方式
apiserver 主備 keepalived
controller-manager leader election
scheduler
etcd 叢集 kubeadm
  • apiserver 通過keepalived實作高可用,當某個節點故障時觸發keepalived vip 轉移;
  • controller-manager k8s内部通過選舉方式産生上司者(由--leader-elect 選型控制,預設為true),同一時刻叢集内隻有一個controller-manager元件運作;
  • scheduler k8s内部通過選舉方式産生上司者(由--leader-elect 選型控制,預設為true),同一時刻叢集内隻有一個scheduler元件運作;
  • etcd 通過運作kubeadm方式自動建立叢集來實作高可用,部署的節點數為奇數,3節點方式最多容忍一台機器當機。

三、安裝準備工作

control plane和work節點都執行本部分操作。

Centos7.6安裝詳見:Centos7.6作業系統安裝及優化全紀錄

安裝Centos時已經禁用了防火牆和selinux并設定了阿裡源。

1. 配置主機名

1.1 修改主機名

[root@centos7 ~]# hostnamectl set-hostname master01
[root@centos7 ~]# more /etc/hostname             
master01           

退出重新登陸即可顯示新設定的主機名master01

1.2 修改hosts檔案

[root@master01 ~]# cat >> /etc/hosts << EOF
172.27.34.3    master01
172.27.34.4    master02
172.27.34.5    master03
172.27.34.93   work01 
172.27.34.94   work02
172.27.34.95   work03
EOF           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

2. 驗證mac位址uuid

[root@master01 ~]# cat /sys/class/net/ens160/address
[root@master01 ~]# cat /sys/class/dmi/id/product_uuid           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

保證各節點mac和uuid唯一

3. 禁用swap

3.1 臨時禁用

[root@master01 ~]# swapoff -a           

3.2 永久禁用

若需要重新開機後也生效,在禁用swap後還需修改配置檔案/etc/fstab,注釋swap

[root@master01 ~]# sed -i.bak '/swap/s/^/#/' /etc/fstab           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

4. 核心參數修改

本文的k8s網絡使用flannel,該網絡需要設定核心參數bridge-nf-call-iptables=1,修改這個參數需要系統有br_netfilter子產品。

4.1 br_netfilter子產品加載

檢視br_netfilter子產品:

[root@master01 ~]# lsmod |grep br_netfilter           

如果系統沒有br_netfilter子產品則執行下面的新增指令,如有則忽略。

臨時新增br_netfilter子產品:

[root@master01 ~]# modprobe br_netfilter           

該方式重新開機後會失效

永久新增br_netfilter子產品:

[root@master01 ~]# cat > /etc/rc.sysinit << EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF
[root@master01 ~]# cat > /etc/sysconfig/modules/br_netfilter.modules << EOF
modprobe br_netfilter
EOF
[root@master01 ~]# chmod 755 /etc/sysconfig/modules/br_netfilter.modules           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

4.2 核心參數臨時修改

[root@master01 ~]# sysctl net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-iptables = 1
[root@master01 ~]# sysctl net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-ip6tables = 1           

4.3 核心參數永久修改

[root@master01 ~]# cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master01 ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

5. 設定kubernetes源

5.1 新增kubernetes源

[root@master01 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF           
  • [] 中括号中的是repository id,唯一,用來辨別不同倉庫
  • name 倉庫名稱,自定義
  • baseurl 倉庫位址
  • enable 是否啟用該倉庫,預設為1表示啟用
  • gpgcheck 是否驗證從該倉庫獲得程式包的合法性,1為驗證
  • repo_gpgcheck 是否驗證中繼資料的合法性 中繼資料就是程式包清單,1為驗證
  • gpgkey=URL 數字簽名的公鑰檔案所在位置,如果gpgcheck值為1,此處就需要指定gpgkey檔案的位置,如果gpgcheck值為0就不需要此項了

5.2 更新緩存

[root@master01 ~]# yum clean all
[root@master01 ~]# yum -y makecache           

6. 免密登入

配置master01到master02、master03免密登入,本步驟隻在master01上執行。

6.1 建立秘鑰

[root@master01 ~]# ssh-keygen -t rsa           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

6.2 将秘鑰同步至master02/master03

[root@master01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[root@master01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

6.3 免密登陸測試

[root@master01 ~]# ssh 172.27.34.4
[root@master01 ~]# ssh master03           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

master01可以直接登入master02和master03,不需要輸入密碼。

四、Docker安裝

1. 安裝依賴包

[root@master01 ~]# yum install -y yum-utils   device-mapper-persistent-data   lvm2           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

2. 設定Docker源

[root@master01 ~]# yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3. 安裝Docker CE

3.1 docker安裝版本檢視

[root@master01 ~]# yum list docker-ce --showduplicates | sort -r           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3.2 安裝docker

[root@master01 ~]# yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

指定安裝的docker版本為18.09.9

4. 啟動Docker

[root@master01 ~]# systemctl start docker
[root@master01 ~]# systemctl enable docker           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

5. 指令補全

5.1 安裝bash-completion

[root@master01 ~]# yum -y install bash-completion           

5.2 加載bash-completion

[root@master01 ~]# source /etc/profile.d/bash_completion.sh           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

6. 鏡像加速

由于Docker Hub的伺服器在國外,下載下傳鏡像會比較慢,可以配置鏡像加速器。主要的加速器有:Docker官方提供的中國registry mirror、阿裡雲加速器、DaoCloud 加速器,本文以阿裡加速器配置為例。

6.1 登陸阿裡雲容器子產品

登陸位址為:https://cr.console.aliyun.com ,未注冊的可以先注冊阿裡雲賬戶

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

6.2 配置鏡像加速器

配置daemon.json檔案

[root@master01 ~]# mkdir -p /etc/docker
[root@master01 ~]# tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"]
}
EOF           

重新開機服務

[root@master01 ~]# systemctl daemon-reload
[root@master01 ~]# systemctl restart docker           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

加速器配置完成

7. 驗證

[root@master01 ~]# docker --version
[root@master01 ~]# docker run hello-world           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

通過查詢docker版本和運作容器hello-world來驗證docker是否安裝成功。

8. 修改Cgroup Driver

8.1 修改daemon.json

修改daemon.json,新增‘"exec-opts": ["native.cgroupdriver=systemd"’

[root@master01 ~]# more /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}           

8.2 重新加載docker

[root@master01 ~]# systemctl daemon-reload
[root@master01 ~]# systemctl restart docker           

修改cgroupdriver是為了消除告警:

[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/

五、keepalived安裝

control plane節點都執行本部分操作。

1. 安裝keepalived

[root@master01 ~]# yum -y install keepalived           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

2. keepalived配置

master01上keepalived配置:

[root@master01 ~]# more /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   router_id master01
}
vrrp_instance VI_1 {
    state MASTER 
    interface ens160
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.34.130
    }
}           

master02上keepalived配置:

[root@master02 ~]# more /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   router_id master02
}
vrrp_instance VI_1 {
    state BACKUP 
    interface ens160
    virtual_router_id 50
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.34.130
    }
}           

master03上keepalived配置:

[root@master03 ~]# more /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   router_id master03
}
vrrp_instance VI_1 {
    state BACKUP 
    interface ens160
    virtual_router_id 50
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.34.130
    }           

3. 啟動keepalived

所有control plane啟動keepalived服務并設定開機啟動

[root@master01 ~]# service keepalived start
[root@master01 ~]# systemctl enable keepalived           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

4. VIP檢視

[root@master01 ~]# ip a           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

vip在master01上

六、k8s安裝

1. 版本檢視

[root@master01 ~]# yum list kubelet --showduplicates | sort -r           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

本文安裝的kubelet版本是1.16.4,該版本支援的docker版本為1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09。

2. 安裝kubelet、kubeadm和kubectl

2.1 安裝三個包

[root@master01 ~]# yum install -y kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

2.2 安裝包說明

  • kubelet 運作在叢集所有節點上,用于啟動Pod和容器等對象的工具
  • kubeadm 用于初始化叢集,啟動叢集的指令工具
  • kubectl 用于和叢集通信的指令行,通過kubectl可以部署和管理應用,檢視各種資源,建立、删除和更新各種元件

2.3 啟動kubelet

啟動kubelet并設定開機啟動

[root@master01 ~]# systemctl enable kubelet && systemctl start kubelet           

2.4 kubectl指令補全

[root@master01 ~]# echo "source <(kubectl completion bash)" >> ~/.bash_profile
[root@master01 ~]# source .bash_profile            

3. 下載下傳鏡像

3.1 鏡像下載下傳的腳本

Kubernetes幾乎所有的安裝元件和Docker鏡像都放在goolge自己的網站上,直接通路可能會有網絡問題,這裡的解決辦法是從阿裡雲鏡像倉庫下載下傳鏡像,拉取到本地以後改回預設的鏡像tag。本文通過運作image.sh腳本方式拉取鏡像。

[root@master01 ~]# more image.sh 
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/loong576
version=v1.16.4
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
  docker pull $url/$imagename
  docker tag $url/$imagename k8s.gcr.io/$imagename
  docker rmi -f $url/$imagename
done           

url為阿裡雲鏡像倉庫位址,version為安裝的kubernetes版本。

3.2 下載下傳鏡像

運作腳本image.sh,下載下傳指定版本的鏡像

[root@master01 ~]# ./image.sh
[root@master01 ~]# docker images           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

七、初始化Master

master01節點執行本部分操作。

1. kubeadm.conf

[root@master01 ~]# more kubeadm-config.yaml 
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.16.4
apiServer:
  certSANs:    #填寫所有kube-apiserver節點的hostname、IP、VIP
  - master01
  - master02
  - master03
  - node01
  - node02
  - node03
  - 172.27.34.3
  - 172.27.34.4
  - 172.27.34.5
  - 172.27.34.93
  - 172.27.34.94
  - 172.27.34.95
  - 172.27.34.130
controlPlaneEndpoint: "172.27.34.130:6443"
networking:
  podSubnet: "10.244.0.0/16"           

kubeadm.conf為初始化的配置檔案

2. master初始化

[root@master01 ~]# kubeadm init --config=kubeadm-config.yaml           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

記錄kubeadm join的輸出,後面需要這個指令将work節點和其他control plane節點加入叢集中。

You can now join any number of control-plane nodes by copying certificate authorities 
and service account keys on each node and then running the following as root:

  kubeadm join 172.27.34.130:6443 --token qbwt6v.rr4hsh73gv8vrcij \
    --discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 \
    --control-plane       

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.27.34.130:6443 --token qbwt6v.rr4hsh73gv8vrcij \
    --discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966            

初始化失敗:

如果初始化失敗,可執行kubeadm reset後重新初始化

[root@master01 ~]# kubeadm reset
[root@master01 ~]# rm -rf $HOME/.kube/config           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3. 加載環境變量

[root@master01 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@master01 ~]# source .bash_profile           

本文所有操作都在root使用者下執行,若為非root使用者,則執行如下操作:

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

4. 安裝flannel網絡

在master01上建立flannel網絡

[root@master01 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

由于網絡原因,可能會安裝失敗,可以在文末直接下載下傳kube-flannel.yml檔案,然後再執行apply

八、control plane節點加入叢集

1. 證書分發

master01分發證書:

在master01上運作腳本cert-main-master.sh,将證書分發至master02和master03

[root@master01 ~]# ll|grep cert-main-master.sh 
-rwxr--r--  1 root root   638 1月   2 15:23 cert-main-master.sh
[root@master01 ~]# more cert-main-master.sh 
USER=root # customizable
CONTROL_PLANE_IPS="172.27.34.4 172.27.34.5"
for host in ${CONTROL_PLANE_IPS}; do
    scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:
    scp /etc/kubernetes/pki/ca.key "${USER}"@$host:
    scp /etc/kubernetes/pki/sa.key "${USER}"@$host:
    scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:
    scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:
    scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:
    scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt
    # Quote this line if you are using external etcd
    scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
done           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

master02移動證書至指定目錄:

在master02上運作腳本cert-other-master.sh,将證書移至指定目錄

[root@master02 ~]# pwd
/root
[root@master02 ~]# ll|grep cert-other-master.sh 
-rwxr--r--  1 root root  484 1月   2 15:29 cert-other-master.sh
[root@master02 ~]# more cert-other-master.sh 
USER=root # customizable
mkdir -p /etc/kubernetes/pki/etcd
mv /${USER}/ca.crt /etc/kubernetes/pki/
mv /${USER}/ca.key /etc/kubernetes/pki/
mv /${USER}/sa.pub /etc/kubernetes/pki/
mv /${USER}/sa.key /etc/kubernetes/pki/
mv /${USER}/front-proxy-ca.crt /etc/kubernetes/pki/
mv /${USER}/front-proxy-ca.key /etc/kubernetes/pki/
mv /${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt
# Quote this line if you are using external etcd
mv /${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key
[root@master02 ~]# ./cert-other-master.sh            

master03移動證書至指定目錄:

在master03上也運作腳本cert-other-master.sh

[root@master03 ~]# pwd
/root
[root@master03 ~]# ll|grep cert-other-master.sh 
-rwxr--r--  1 root root  484 1月   2 15:31 cert-other-master.sh
[root@master03 ~]# ./cert-other-master.sh            

2. master02加入叢集

kubeadm join 172.27.34.130:6443 --token qbwt6v.rr4hsh73gv8vrcij \
    --discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 \
    --control-plane           

運作初始化master生成的control plane節點加入叢集的指令

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3. master03加入叢集

kubeadm join 172.27.34.130:6443 --token qbwt6v.rr4hsh73gv8vrcij \
    --discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 \
    --control-plane           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

4. 加載環境變量

master02和master03加載環境變量

[root@master02 ~]# scp master01:/etc/kubernetes/admin.conf /etc/kubernetes/
[root@master02 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@master02 ~]# source .bash_profile            
[root@master03 ~]# scp master01:/etc/kubernetes/admin.conf /etc/kubernetes/
[root@master03 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@master03 ~]# source .bash_profile            

該步操作是為了在master02和master03上也能執行kubectl指令。

5. 叢集節點檢視

[root@master01 ~]# kubectl get nodes
[root@master01 ~]# kubectl get po -o wide -n kube-system            
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

所有control plane節點處于ready狀态,所有的系統元件也正常。

九、work節點加入叢集

1. work01加入叢集

kubeadm join 172.27.34.130:6443 --token qbwt6v.rr4hsh73gv8vrcij \
    --discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966            

運作初始化master生成的work節點加入叢集的指令

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

2. work02加入叢集

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3. work03加入叢集

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

4. 叢集節點檢視

[root@master01 ~]# kubectl get nodes
NAME       STATUS   ROLES    AGE     VERSION
master01   Ready    master   44m     v1.16.4
master02   Ready    master   33m     v1.16.4
master03   Ready    master   23m     v1.16.4
work01     Ready    <none>   11m     v1.16.4
work02     Ready    <none>   7m50s   v1.16.4
work03     Ready    <none>   3m4s    v1.16.4           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

十、client配置

1. 設定kubernetes源

1.1 新增kubernetes源

[root@client ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

1.2 更新緩存

[root@client ~]# yum clean all
[root@client ~]# yum -y makecache           

2. 安裝kubectl

[root@client ~]# yum install -y kubectl-1.16.4           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

安裝版本與叢集版本保持一緻

3. 指令補全

3.1 安裝bash-completion

[root@client ~]# yum -y install bash-completion           

3.2 加載bash-completion

[root@client ~]# source /etc/profile.d/bash_completion.sh           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3.3 拷貝admin.conf

[root@client ~]# mkdir -p /etc/kubernetes
[root@client ~]# scp 172.27.34.3:/etc/kubernetes/admin.conf /etc/kubernetes/
[root@client ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@client ~]# source .bash_profile            
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3.4 加載環境變量

[root@master01 ~]# echo "source <(kubectl completion bash)" >> ~/.bash_profile
[root@master01 ~]# source .bash_profile            

4. kubectl測試

[root@client ~]# kubectl get nodes 
[root@client ~]# kubectl get cs
[root@client ~]# kubectl get po -o wide -n kube-system            
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

十一、Dashboard搭建

本節内容都在client端完成

1. 下載下傳yaml

[root@client ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml           

如果連接配接逾時,可以多試幾次。recommended.yaml已上傳,也可以在文末下載下傳。

2. 配置yaml

2.1 修改鏡像位址

[root@client ~]# sed -i 's/kubernetesui/registry.cn-hangzhou.aliyuncs.com\/loong576/g' recommended.yaml           

由于預設的鏡像倉庫網絡通路不通,故改成阿裡鏡像

2.2 外網通路

[root@client ~]# sed -i '/targetPort: 8443/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' recommended.yaml           

配置NodePort,外部通過https://NodeIp:NodePort 通路Dashboard,此時端口為30001

2.3 新增管理者帳号

[root@client ~]# cat >> recommended.yaml << EOF
---
# ------------------- dashboard-admin ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

建立超級管理者的賬号用于登入Dashboard

3. 部署通路

3.1 部署Dashboard

[root@client ~]# kubectl apply -f recommended.yaml           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3.2 狀态檢視

[root@client ~]# kubectl get all -n kubernetes-dashboard            
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

3.3 令牌檢視

[root@client ~]# kubectl describe secrets -n kubernetes-dashboard dashboard-admin           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

令牌為:

eyJhbGciOiJSUzI1NiIsImtpZCI6Ikd0NHZ5X3RHZW5pNDR6WEdldmlQUWlFM3IxbGM3aEIwWW1IRUdZU1ZKdWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNms1ZjYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZjk1NDE0ODEtMTUyZS00YWUxLTg2OGUtN2JmMWU5NTg3MzNjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.LAe7N8Q6XR3d0W8w-r3ylOKOQHyMg5UDfGOdUkko_tqzUKUtxWQHRBQkowGYg9wDn-nU9E-rkdV9coPnsnEGjRSekWLIDkSVBPcjvEd0CVRxLcRxP6AaysRescHz689rfoujyVhB4JUfw1RFp085g7yiLbaoLP6kWZjpxtUhFu-MKh1NOp7w4rT66oFKFR-_5UbU3FoetAFBmHuZ935i5afs8WbNzIkM6u9YDIztMY3RYLm9Zs4KxgpAmqUmBSlXFZNW2qg6hxBqDijW_1bc0V7qJNt_GXzPs2Jm1trZR6UU1C2NAJVmYBu9dcHYtTCgxxkWKwR0Qd2bApEUIJ5Wug           

3.4 通路

請使用火狐浏覽器通路:https://VIP:30001

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

接受風險

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

通過令牌方式登入

k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

Dashboard提供了可以實作叢集管理、工作負載、服務發現和負載均衡、存儲、字典配置、日志視圖等功能。

十二、叢集高可用測試

1. 元件所在節點檢視

通過ip檢視apiserver所在節點,通過leader-elect檢視scheduler和controller-manager所在節點:

[root@master01 ~]# ip a|grep 130
    inet 172.27.34.130/32 scope global ens160           
[root@client ~]# kubectl get endpoints kube-controller-manager -n kube-system -o yaml |grep holderIdentity
    control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"master01_6caf8003-052f-451d-8dce-4516825213ad","leaseDurationSeconds":15,"acquireTime":"2020-01-02T09:36:23Z","renewTime":"2020-01-03T07:57:55Z","leaderTransitions":2}'
[root@client ~]# kubectl get endpoints kube-scheduler -n kube-system -o yaml |grep holderIdentity
    control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"master01_720d65f9-e425-4058-95d7-e5478ac951f7","leaseDurationSeconds":15,"acquireTime":"2020-01-02T09:36:20Z","renewTime":"2020-01-03T07:58:03Z","leaderTransitions":2}'           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 
元件名 所在節點

2. master01關機

2.1 關閉master01,模拟當機

[root@master01 ~]# init 0           

2.2 各元件檢視

vip飄到了master02

[root@master02 ~]# ip a|grep 130
    inet 172.27.34.130/32 scope global ens160           

controller-manager和scheduler也發生了遷移

[root@client ~]# kubectl get endpoints kube-controller-manager -n kube-system -o yaml |grep holderIdentity
    control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"master02_b3353e8f-a02f-4322-bf17-2f596cd25ba5","leaseDurationSeconds":15,"acquireTime":"2020-01-03T08:04:42Z","renewTime":"2020-01-03T08:06:36Z","leaderTransitions":3}'
[root@client ~]# kubectl get endpoints kube-scheduler -n kube-system -o yaml |grep holderIdentity
    control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"master03_e0a2ec66-c415-44ae-871c-18c73258dc8f","leaseDurationSeconds":15,"acquireTime":"2020-01-03T08:04:56Z","renewTime":"2020-01-03T08:06:45Z","leaderTransitions":3}'           

2.3 叢集功能性測試

查詢:

[root@client ~]# kubectl get nodes
NAME       STATUS     ROLES    AGE   VERSION
master01   NotReady   master   22h   v1.16.4
master02   Ready      master   22h   v1.16.4
master03   Ready      master   22h   v1.16.4
work01     Ready      <none>   22h   v1.16.4
work02     Ready      <none>   22h   v1.16.4
work03     Ready      <none>   22h   v1.16.4           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

master01狀态為NotReady

建立pod:

[root@client ~]# more nginx-master.yaml 
apiVersion: apps/v1             #描述檔案遵循extensions/v1beta1版本的Kubernetes API
kind: Deployment                #建立資源類型為Deployment
metadata:                       #該資源中繼資料
  name: nginx-master            #Deployment名稱
spec:                           #Deployment的規格說明
  selector:
    matchLabels:
      app: nginx 
  replicas: 3                   #指定副本數為3
  template:                     #定義Pod的模闆
    metadata:                   #定義Pod的中繼資料
      labels:                   #定義label(标簽)
        app: nginx              #label的key和value分别為app和nginx
    spec:                       #Pod的規格說明
      containers:               
      - name: nginx             #容器的名稱
        image: nginx:latest     #建立容器所使用的鏡像
[root@client ~]# kubectl apply -f nginx-master.yaml 
deployment.apps/nginx-master created
[root@client ~]# kubectl get po -o wide
NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
nginx-master-75b7bfdb6b-lnsfh   1/1     Running   0          4m44s   10.244.5.6   work03   <none>           <none>
nginx-master-75b7bfdb6b-vxfg7   1/1     Running   0          4m44s   10.244.3.3   work01   <none>           <none>
nginx-master-75b7bfdb6b-wt9kc   1/1     Running   0          4m44s   10.244.4.5   work02   <none>           <none>           
k8s實踐(十五):Centos7.6部署k8s v1.16.4高可用叢集(主備模式)一、部署環境二、高可用架構三、安裝準備工作四、Docker安裝五、keepalived安裝六、k8s安裝七、初始化Master八、control plane節點加入叢集九、work節點加入叢集十、client配置十一、Dashboard搭建十二、叢集高可用測試 

2.4 結論

當有一個control plane節點當機時,VIP會發生漂移,叢集各項功能不受影響。

3. master02關機

在關閉master01的同時關閉master02,測試叢集還能否正常對外服務。

3.1 關閉master02:

[root@master02 ~]# init 0           

3.2 檢視VIP:

[root@master03 ~]# ip a|grep 130
    inet 172.27.34.130/32 scope global ens160           

vip漂移至唯一的control plane:master03

3.3 叢集功能測試

[root@client ~]# kubectl get nodes
Error from server: etcdserver: request timed out
[root@client ~]# kubectl get nodes
The connection to the server 172.27.34.130:6443 was refused - did you specify the right host or port?           

etcd叢集崩潰,整個k8s叢集也不能正常對外服務。

單節點版k8s叢集部署詳見:Centos7.6部署k8s(v1.14.2)叢集

k8s叢集高可用部署詳見:lvs+keepalived部署k8s v1.16.4高可用叢集

繼續閱讀