天天看點

用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

環境說明:

主機名 作業系統版本 ip docker version kubelet version kubeadm version kubectl version flannel version 備注
master Centos 7.6.1810 172.27.9.131 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 master主機
node01 Centos 7.6.1810 172.27.9.135 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node節點
node02 Centos 7.6.1810 172.27.9.136 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node節點

前言:本文通過kudeadm方式在centos7.6上安裝kubernetes v1.14.2叢集(目前centos和kubernetes都為最新版),共分為六個部分:

一、Docker安裝;

二、k8s安裝準備工作;

三、Master節點安裝;

四、Node節點安裝;

五、Dashboard安裝;

六、叢集測試。

目錄

一、Docker安裝

1. 安裝依賴包

2. 設定Docker源

3. 安裝Docker CE

3.1 docker安裝版本檢視

3.2 安裝docker

 4. 啟動Docker

5. 指令補全

5.1 安裝bash-completion

5.2 加載bash-completion

6. 鏡像加速

6.1 登陸阿裡雲容器子產品

6.2 配置鏡像加速器

7. 驗證

二、k8s安裝準備工作

1. 配置主機名

1.1 修改主機名

1.2 修改hosts檔案

2. 驗證mac位址uuid

3. 禁用swap

3.1 臨時禁用

3.2 永久禁用

4. 核心參數修改

4.1 臨時修改

4.2 永久修改

5. 修改Cgroup Driver

5.1 修改daemon.json

5.2 重新加載docker

6. 設定kubernetes源

6.1 新增kubernetes源

6.2 更新緩存

三、Master節點安裝

1. 版本檢視

2. 安裝kubelet、kubeadm和kubectl

2.1 安裝三個包

2.2 安裝包說明

2.3 啟動kubelet

2.4 kubelet指令補全

3. 下載下傳鏡像

3.1 鏡像下載下傳的腳本

3.2 下載下傳鏡像

4. 初始化Master

4.1 初始化

4.2 加載環境變量

5. 安裝pod cni網絡插件flannel

6. master節點配置

6.1 删除master節點預設污點

6.2 污點機制

四、Node節點安裝

1. 安裝kubelet、kubeadm和kubectl

2. 下載下傳鏡像

3. 将master的kubectl指令權限開放給node節點

4. 安裝pod cni 網絡插件flannel

5. node加入叢集

5.1 檢視令牌是否過期

5.2 node節點加入叢集

五、Dashboard安裝

1. 下載下傳yaml

2. 配置yaml

2.1 修改鏡像位址

2.2 外網通路

2.3 新增管理者帳号

3. 部署通路

3.1 部署Dashboard

3.2 狀态檢視

3.3 令牌檢視

3.4 通路

六、叢集測試

1. 部署應用

1.1 指令方式

1.2 配置檔案方式

2. 狀态檢視

2.1 檢視節點狀态

2.2 檢視pod狀态

2.3 檢視副本數

2.4 檢視deployment詳細資訊

2.5 檢視叢集基本元件狀态

一、Docker安裝

所有節點都需要安裝docker

1. 安裝依賴包

[[email protected] ~]# yum install -y yum-utils   device-mapper-persistent-data   lvm2
           

2. 設定Docker源

[[email protected] ~]# yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
           

3. 安裝Docker CE

3.1 docker安裝版本檢視

[[email protected] ~]# yum list docker-ce --showduplicates | sort -r
           

3.2 安裝docker

[[email protected] ~]# yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io
           

 指定安裝的docker版本為18.09.6,也可以直接安裝最新版本,則不用指定版本(出于各種元件的版本相容性考慮,不建議安裝最新版本):

yum install -y docker-ce docker-ce-cli containerd.io
           

 4. 啟動Docker

[[email protected] ~]# systemctl start docker
[[email protected] ~]# systemctl enable docker
           

5. 指令補全

5.1 安裝bash-completion

[[email protected] ~]# yum -y install bash-completion
           

5.2 加載bash-completion

[[email protected] /]# source /etc/profile.d/bash_completion.sh
           

6. 鏡像加速

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

6.1 登陸阿裡雲容器子產品

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

用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

6.2 配置鏡像加速器

配置daemon.json檔案

[[email protected] ~]# mkdir -p /etc/docker
[[email protected] ~]# tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uvjw7xxg.mirror.aliyuncs.com"]
}
EOF
           

 加速器配置完成。

7. 驗證

[[email protected] ~]# docker --version
[[email protected] ~]# docker run hello-world
           
用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

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

二、k8s安裝準備工作

安裝Centos是已經禁用了防火牆和selinux并設定了阿裡源。master和node節點都執行本部分操作。

1. 配置主機名

1.1 修改主機名

[[email protected] ~]# hostnamectl set-hostname master
[[email protected] ~]# more /etc/hostname             
master
           

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

1.2 修改hosts檔案

[[email protected] ~]# cat >> /etc/hosts << EOF
172.27.9.131    master
172.27.9.135    node01
172.27.9.136    node02
EOF
           

2. 驗證mac位址uuid

[[email protected] ~]# cat /sys/class/net/ens33/address
[[email protected] ~]# cat /sys/class/dmi/id/product_uuid
           

保證各節點mac和uuid唯一

3. 禁用swap

3.1 臨時禁用

[[email protected] ~]# swapoff -a
           

3.2 永久禁用

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

[[email protected] ~]# sed -i.bak '/swap/s/^/#/' /etc/fstab
           

4. 核心參數修改

4.1 臨時修改

[[email protected] ~]# sysctl net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-iptables = 1
[[email protected] ~]# sysctl net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-ip6tables = 1
           

4.2 永久修改

[[email protected] ~]# cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[[email protected] ~]# sysctl -p /etc/sysctl.d/k8s.conf
           
用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

5. 修改Cgroup Driver

5.1 修改daemon.json

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

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

5.2 重新加載docker

[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# 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/

6. 設定kubernetes源

6.1 新增kubernetes源

[[email protected] ~]# 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就不需要此項了

6.2 更新緩存

[[email protected] ~]# yum clean all
[[email protected] ~]# yum -y makecache
           

三、Master節點安裝

1. 版本檢視

[[email protected] ~]# yum list kubelet --showduplicates | sort -r 
           

目前最新版是1.14.2,該版本支援的docker版本為1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09。

2. 安裝kubelet、kubeadm和kubectl

2.1 安裝三個包

[[email protected] ~]# yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2
           

若不指定版本直接運作‘yum install -y kubelet kubeadm kubectl’則預設安裝最新版。(注:不要安裝 kubernets-cni插件,否則會導緻依賴的kubelet的版本号發生變化)

2.2 安裝包說明

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

2.3 啟動kubelet

啟動kubelet并設定開機啟動

[[email protected] ~]# systemctl enable kubelet && systemctl start kubelet
           

2.4 kubelet指令補全

[[email protected] ~]# echo "source <(kubectl completion bash)" >> ~/.bash_profile
[[email protected] ~]# source .bash_profile 
           

3. 下載下傳鏡像

3.1 鏡像下載下傳的腳本

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

[[email protected] ~]# more image.sh 
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.14.2
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,下載下傳指定版本的鏡像,運作腳本前先賦權。

[[email protected] ~]# chmod u+x image.sh
[[email protected] ~]# ./image.sh
[[email protected] ~]# docker images
           
用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

4. 初始化Master

4.1 初始化

[[email protected] ~]# kubeadm init --apiserver-advertise-address 172.27.9.131 --pod-network-cidr=10.244.0.0/16
           

apiserver-advertise-address指定master的interface,pod-network-cidr指定Pod網絡的範圍,這裡使用flannel網絡方案。

用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

記錄kubeadm join的輸出,後面需要這個指令将各個節點加入叢集中。

4.2 加載環境變量

[[email protected] ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[[email protected] ~]# 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
           

5. 安裝pod cni網絡插件flannel

[[email protected] ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
           

注:若出現報錯:The connection to the server raw.githubusercontent.com was refused,則在hosts檔案中添加一行解析:vi /etc/hosts

用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

6. master節點配置

taint:污點的意思。如果一個節點被打上了污點,那麼pod是不允許運作在這個節點上面的

6.1 删除master節點預設污點

預設情況下叢集不會在master上排程pod,如果偏想在master上排程Pod,可以執行如下操作:

檢視污點:

[[email protected] ~]# kubectl describe node master|grep -i taints
Taints:             node-role.kubernetes.io/master:NoSchedule
           

删除預設污點:

[[email protected] ~]# kubectl taint nodes master node-role.kubernetes.io/master-
node/master untainted
           

6.2 污點機制

文法:

kubectl taint node [node] key=value[effect]   
     其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
      NoSchedule: 一定不能被排程
      PreferNoSchedule: 盡量不要排程
      NoExecute: 不僅不會排程, 還會驅逐Node上已有的Pod
           

打污點

[[email protected] ~]# kubectl taint node master key1=value1:NoSchedule
node/master tainted
[[email protected] ~]# kubectl describe node master|grep -i taints
Taints:             key1=value1:NoSchedule
           

key為key1,value為value1(value可以為空),effect為NoSchedule表示一定不能被排程

删除污點:

[[email protected] ~]# kubectl taint nodes master  key1-     
node/master untainted
[[email protected] ~]# kubectl describe node master|grep -i taints
Taints:             <none>
           

删除指定key所有的effect,‘-’表示移除所有以key1為鍵的污點。

四、Node節點安裝

1. 安裝kubelet、kubeadm和kubectl

同: master節點安裝;

2. 下載下傳鏡像

同:master節點下載下傳鏡像;

3. 将master的kubectl指令權限開放給node節點

該步在master節點操作:将admin.conf檔案拷貝到其它從節點

[[email protected] ~]# scp -r /etc/kubernetes/admin.conf [email protected]:/etc/kubernetes/  
           

然後回到node節點,在node節點上建立一個./kube的目錄用來儲存的我們的連接配接配置:

mkdir -p $HOME/.kube
           

接着複制admin.conf到該目錄下:

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
           

最後授予權限:

sudo chown $(id -u):$(id -g) $HOME/.kube/config
           

4. 安裝pod cni 網絡插件flannel

[[email protected] ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
           

5. node加入叢集

以下操作master上執行

5.1 檢視令牌是否過期

[[email protected] ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
j5eoyz.zu0x6su7wzh752b3   <invalid>   2019-06-04T17:40:41+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
           

若初始化時的令牌過期則執行如下兩步:

生成新的令牌:

[[email protected] ~]# kubeadm token create
1zl3he.fxgz2pvxa3qkwxln
           

生成新的加密串:

[[email protected] ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'
           

5.2 node節點加入叢集

在node節點上分别執行如下操作:

[[email protected] ~]# kubeadm join 172.27.9.131:6443 --token 1zl3he.fxgz2pvxa3qkwxln  --discovery-token-ca-cert-hash sha256:5f656ae26b5e7d4641a979cbfdffeb7845cc5962bbfcd1d5435f00a25c02ea50
           
用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

五、Dashboard安裝

1. 下載下傳yaml

[[email protected] ~]# wget  https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
           

如果連接配接逾時,可以多試幾次

2. 配置yaml

2.1 修改鏡像位址

sed -i 's/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/kuberneters/g' kubernetes-dashboard.yaml
           

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

2.2 外網通路

sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml
           

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

2.3 新增管理者帳号

cat >> kubernetes-dashboard.yaml << EOF
---
# ------------------- dashboard-admin ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
 EOF 
           

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

3. 部署通路

3.1 部署Dashboard

[[email protected] ~]# kubectl apply -f kubernetes-dashboard.yaml 
           
用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

3.2 狀态檢視

[[email protected] ~]# kubectl get deployment kubernetes-dashboard -n kube-system
[[email protected] ~]# kubectl get pods -n kube-system -o wide
[[email protected] ~]# kubectl get services -n kube-system
           

3.3 令牌檢視

kubectl describe secrets -n kube-system dashboard-admin
           
用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

令牌為:

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4ta3Q5eDciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYzI2MjZiYTUtOTE5Ny0xMWU5LTk2OTQtMDAwYzI5ZDk5YmEzIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.XnBTkkMNQx_hKlTml7B-D1Ip-hp-WFi1mgjgx2E_SHbaRJluLN5qXWLsBAPl1Cgp-IY5ujg9pYePAZL2GDYyjnCaMiFmQsRW-zbNfkyYfPWje8MtCxJqoILTlCxsa5apwWsKdbsW_X8moMC4cM92hApQshn_-x-V7cxydEKuQPrB3PfQ7ReNMM5VCj4rexAh9Qr7I1wEHFa0KX1XaDRiedjWgXFKU7kWX2VQ3vwnfRdpKq_r0vlDSQRVdrMDPT1BHuBaUn8Gz-EdLR3qUy5vlZbzo1UFvxuL2enoZxntHZmnP1vg4552HROeEJhigdtRSbDvxHTEGWT3A67faha-Kg
           

3.4 通路

https://NodeIp:30001

用虛拟機搭建k8s叢集節點二 —— kubeadm方式一、Docker安裝二、k8s安裝準備工作三、Master節點安裝四、Node節點安裝 五、Dashboard安裝六、叢集測試

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

六、叢集測試

1. 部署應用

1.1 指令方式

[[email protected] ~]# kubectl run httpd-app --image=httpd --replicas=3
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/httpd-app created
           

通過指令行方式部署apache服務

1.2 配置檔案方式

cat >> nginx.yml << EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      restartPolicy: Always
      containers:
      - name: nginx
        image: nginx:latest
EOF
[[email protected] ~]# kubectl apply -f nginx.yml 
deployment.extensions/nginx created
           

通過配置檔案方式部署nginx服務

2. 狀态檢視

2.1 檢視節點狀态

[[email protected] ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   47h     v1.14.2
node01   Ready    <none>   22h     v1.14.2
node02   Ready    <none>   6h55m   v1.14.2
           

2.2 檢視pod狀态

[[email protected] ~]# kubectl get pod --all-namespaces
NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
default       httpd-app-6df58645c6-42zmc       1/1     Running   0          176m
default       httpd-app-6df58645c6-g6bkc       1/1     Running   0          176m
default       httpd-app-6df58645c6-kp8tl       1/1     Running   0          176m
default       nginx-9d4cf4f77-dft2f            1/1     Running   0          18m
default       nginx-9d4cf4f77-dztxq            1/1     Running   0          18m
default       nginx-9d4cf4f77-l9gdh            1/1     Running   0          18m
kube-system   coredns-fb8b8dccf-bxvrz          1/1     Running   1          47h
kube-system   coredns-fb8b8dccf-mqvd8          1/1     Running   1          47h
kube-system   etcd-master                      1/1     Running   3          47h
kube-system   kube-apiserver-master            1/1     Running   3          47h
kube-system   kube-controller-manager-master   1/1     Running   4          47h
kube-system   kube-flannel-ds-amd64-lkh5n      1/1     Running   0          6h55m
kube-system   kube-flannel-ds-amd64-pv5ll      1/1     Running   1          24h
kube-system   kube-flannel-ds-amd64-wnn5g      1/1     Running   1          22h
kube-system   kube-proxy-42vb5                 1/1     Running   3          47h
kube-system   kube-proxy-7nrfk                 1/1     Running   0          6h55m
kube-system   kube-proxy-x7dmk                 1/1     Running   1          22h
kube-system   kube-scheduler-master            1/1     Running   4          47h
           

2.3 檢視副本數

[[email protected] ~]# kubectl get deployments
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
httpd-app   3/3     3            3           178m
nginx       3/3     3            3           19m
[[email protected] ~]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE    IP           NODE     NOMINATED NODE   READINESS GATES
httpd-app-6df58645c6-42zmc   1/1     Running   0          179m   10.244.0.6   master   <none>           <none>
httpd-app-6df58645c6-g6bkc   1/1     Running   0          179m   10.244.1.2   node01   <none>           <none>
httpd-app-6df58645c6-kp8tl   1/1     Running   0          179m   10.244.2.2   node02   <none>           <none>
nginx-9d4cf4f77-dft2f        1/1     Running   0          20m    10.244.0.7   master   <none>           <none>
nginx-9d4cf4f77-dztxq        1/1     Running   0          20m    10.244.2.3   node02   <none>           <none>
nginx-9d4cf4f77-l9gdh        1/1     Running   0          20m    10.244.1.3   node01   <none>           <none>
[[email protected] ~]# 
           

可以看到nginx和httpd的3個副本pod均勻分布在3個節點上

2.4 檢視deployment詳細資訊

[[email protected] ~]# kubectl describe deployments
           

2.5 檢視叢集基本元件狀态

[[email protected] ~]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   
           

至此完成Centos7.6下k8s(v1.14.2)叢集部署。

附:若有node節點NotReady, 可用指令檢視node的kubelet日志:

journalctl -f -u kubelet

另外,在node節點的配置daemon.json中的項目,‘"exec-opts": ["native.cgroupdriver=systemd"]可能會引起kubelet的報錯:

kubelet cgroup driver: “cgroupfs“ is different from docker cgroup driver: “systemd“

這裡要修改3個配置檔案為cgroupfs(或者systemd,視具體情況而定)

1.vim /etc/docker/daemon.json

"exec-opts": ["native.cgroupdriver=cgroupfs"]
           

2.vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

在KUBELET_KUBECONFIG_ARGS 後面追加 --cgroup-driver=cgroupfs

Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=cgroupfs"
           

3.vim /var/lib/kubelet/kubeadm-flags.env

KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.2"
           

然後重新開機kubelet和docker,k8s叢集就恢複了:

systemctl daemon-reload

systemctl restart docker

systemctl restart kubelet

k8s主備高可用部署詳見:Centos7.6部署k8s v1.16.4高可用叢集(主備模式)

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

 參考: https://blog.51cto.com/3241766/2405624#h51

繼續閱讀