基于kubeadm的kubernetes高可用集群部署<二>

image

上一篇我們的基本工作已經(jīng)準(zhǔn)備完成蜻直,這篇我們說(shuō)重要的安裝過(guò)程。

kubernetes 相關(guān)服務(wù)安裝

  1. 在 kubernetes 所有節(jié)點(diǎn)上驗(yàn)證 SELINUX 模式蓬坡,必須保證 SELINUX 為 permissive 模式锐膜,否則 kubernetes 啟動(dòng)會(huì)出現(xiàn)各種異常沉迹。
[root@k8s-master1 yaml]# getenforcePermissive
  1. 在 kubernetes 所有節(jié)點(diǎn)上安裝并啟動(dòng) kubernetes 和 docker
yum install -y kubernetes-cni-0.6.0-0.x86_64 kubelet-1.10.3-0.x86_64 kubectl-1.10.3-0.x86_64 kubeadm-1.10.3-0.x86_64systemctl enable docker && systemctl start dockersystemctl enable kubelet && systemctl start kubelet
  1. 獨(dú)立 etcd 集群部署
  • 在 k8s-master1 節(jié)點(diǎn)上以 docker 方式啟動(dòng) etcd 集群
$ docker stop etcd && docker rm etcd$ rm -rf /var/lib/etcd-cluster$ mkdir -p /var/lib/etcd-cluster$ docker run -d \--restart always \-v /etc/ssl/certs:/etc/ssl/certs \-v /var/lib/etcd-cluster:/var/lib/etcd \-p 4001:4001 \-p 2380:2380 \-p 2379:2379 \--name etcd \k8s.gcr.io/etcd-amd64:3.2.17 \etcd --name=etcd0 \--advertise-client-urls=http://172.24.12.32:2379,http://172.24.12.32:4001 \--listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001 \--initial-advertise-peer-urls=http://172.24.12.32:2380 \--listen-peer-urls=http://0.0.0.0:2380 \--initial-cluster-token=9477af68bbee1b9ae037d6fd9e7efefd \--initial-cluster=etcd0=http://172.24.12.32:2380,etcd1=http://172.24.12.33:2380,etcd2=http://172.24.12.34:2380 \--initial-cluster-state=new \--auto-tls \--peer-auto-tls \--data-dir=/var/lib/etcd
  • 在 k8s-master2 節(jié)點(diǎn)上以 docker 方式啟動(dòng) etcd 集群
$ docker stop etcd && docker rm etcd$ rm -rf /var/lib/etcd-cluster$ mkdir -p /var/lib/etcd-cluster$ docker run -d \--restart always \-v /etc/ssl/certs:/etc/ssl/certs \-v /var/lib/etcd-cluster:/var/lib/etcd \-p 4001:4001 \-p 2380:2380 \-p 2379:2379 \--name etcd \k8s.gcr.io/etcd-amd64:3.2.17 \etcd --name=etcd1 \--advertise-client-urls=http://172.24.12.33:2379,http://172.24.12.33:4001 \--listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001 \--initial-advertise-peer-urls=http://172.24.12.33:2380 \--listen-peer-urls=http://0.0.0.0:2380 \--initial-cluster-token=9477af68bbee1b9ae037d6fd9e7efefd \--initial-cluster=etcd0=http://172.24.12.32:2380,etcd1=http://172.24.12.33:2380,etcd2=http://172.24.12.34:2380 \--initial-cluster-state=new \--auto-tls \--peer-auto-tls \--data-dir=/var/lib/etcd
  • 在 k8s-master3 節(jié)點(diǎn)上以 docker 方式啟動(dòng) etcd 集群
$ docker stop etcd && docker rm etcd$ rm -rf /var/lib/etcd-cluster$ mkdir -p /var/lib/etcd-cluster$ docker run -d \--restart always \-v /etc/ssl/certs:/etc/ssl/certs \-v /var/lib/etcd-cluster:/var/lib/etcd \-p 4001:4001 \-p 2380:2380 \-p 2379:2379 \--name etcd \k8s.gcr.io/etcd-amd64:3.2.17 \etcd --name=etcd2 \--advertise-client-urls=http://172.24.12.34:2379,http://172.24.12.34:4001 \--listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001 \--initial-advertise-peer-urls=http://172.24.12.34:2380 \--listen-peer-urls=http://0.0.0.0:2380 \--initial-cluster-token=9477af68bbee1b9ae037d6fd9e7efefd \--initial-cluster=etcd0=http://172.24.12.32:2380,etcd1=http://172.24.12.33:2380,etcd2=http://172.24.12.34:2380 \--initial-cluster-state=new \--auto-tls \--peer-auto-tls \--data-dir=/var/lib/etcd
  • 在 k8s-master1、k8s-master2开睡、k8s-master3 上檢查 etcd 啟動(dòng)狀態(tài)
[root@k8s-master1 yaml]# docker exec -ti etcd ash/ # etcdctl member list7952c466eeed1e71: name=etcd0 peerURLs=http://172.24.12.32:2380 clientURLs=http://172.24.12.32:2379,http://172.24.12.32:4001 isLeader=falseea0f9c89ab07d1c2: name=etcd2 peerURLs=http://172.24.12.34:2380 clientURLs=http://172.24.12.34:2379,http://172.24.12.34:4001 isLeader=truefd15cb75a309af35: name=etcd1 peerURLs=http://172.24.12.33:2380 clientURLs=http://172.24.12.33:2379,http://172.24.12.33:4001 isLeader=false/ # etcdctl cluster-healthmember 7952c466eeed1e71 is healthy: got healthy result from http://172.24.12.32:2379member ea0f9c89ab07d1c2 is healthy: got healthy result from http://172.24.12.34:2379member fd15cb75a309af35 is healthy: got healthy result from http://172.24.12.33:2379cluster is healthy/ # exit
  1. kubeadm 初始化
  • 在 k8s-master1 上修改 kubeadm-init.yaml 文件因苹,設(shè)置 etcd.endpoints 的${HOST_IP}為 k8s-master1、k8s-master2篇恒、k8s-master3 的 IP 地址
[root@k8s-master1 yaml]# cat kubeadm-init.yamlapiVersion: kubeadm.k8s.io/v1alpha1kind: MasterConfigurationkubernetesVersion: v1.10.3networking:  podSubnet: 10.244.0.0/16apiServerCertSANs:- k8s-master1- k8s-master2- k8s-master3- 172.24.12.32- 172.24.12.33- 172.24.12.34- 172.24.12.80etcd:  endpoints:  - http://172.24.12.32:2379  - http://172.24.12.33:2379  - http://172.24.12.34:2379

注:如果使用kubeadm初始化集群扶檐,啟動(dòng)過(guò)程可能會(huì)卡在以下位置,那么可能是因?yàn)?cgroup-driver 參數(shù)與 docker 的不一致引起胁艰,如下:

[apiclient] Created API client, waiting for the control plane to become ready$ journalctl -t kubelet -S '2017-06-08' #查看日志款筑,發(fā)現(xiàn)如下錯(cuò)誤error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd"

需要修改 KUBELET_CGROUP_ARGS=--cgroup-driver=systemd 為 KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs

$ vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf#Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd" Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
  • 在 k8s-master1 上使用 kubeadm 初始化 kubernetes 集群,連接外部 etcd 集群
$ kubeadm init --config=/home/yaml/kubeadm-init.yaml
  • 在 k8s-master1 上設(shè)置 kubectl 的環(huán)境變量 KUBECONFIG腾么,連接 kubelet
$ vi ~/.bashrc export KUBECONFIG=/etc/kubernetes/admin.conf$ source ~/.bashrc
  1. flannel 網(wǎng)絡(luò)組件安裝
$ kubectl create -f /home/yaml/kube-flannel.yml

在 k8s-master1 上驗(yàn)證 kube-dns 成功啟動(dòng)醋虏,大概等待3分鐘,驗(yàn)證所有 pods 的狀態(tài)為 Running哮翘,驗(yàn)證方式見(jiàn) k8s-測(cè)試dns

$ kubectl get pods --all-namespaces -o wide
  1. dashboard 和 heapster 組件安裝
kubectl create -f /home/yaml/kubernetes-dashboard-admin.rbac.yamlkubectl create -f /home/yaml/kubernetes-dashboard.yaml

注:在 k8s-master1 上允許在 master 上部署 pod颈嚼,否則 heapster 會(huì)無(wú)法部署,執(zhí)行以下命令:

$ kubectl taint nodes --all node-role.kubernetes.io/master-node "k8s-master1" taintedkubectl create -f /home/yaml/heapster-rbac.yamlkubectl create -f /home/yaml/heapster.yaml

在本機(jī)上訪(fǎng)問(wèn) dashboard 地址 http://172.24.12.32:30090饭寺,驗(yàn)證 heapster 成功啟動(dòng)阻课,查看 Pods 的 CPU 以及 Memory 信息是否正常呈現(xiàn)叫挟,如下:

dashboard

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">dashboard</figcaption>

至此,第一臺(tái) master 成功安裝限煞,并已經(jīng)完成 flannel抹恳、dashboard、heapster 的部署署驻。

master 集群高可用設(shè)置

  1. 在 k8s-master1 上把 /etc/kubernetes/ 復(fù)制到 k8s-master2奋献、k8s-master3
  2. 在 k8s-master2、k8s-master3 上重啟 kubelet 服務(wù)旺上,并檢查 kubelet 服務(wù)狀態(tài)為 active (running)
systemctl daemon-reload && systemctl restart kubelet
  1. 在 k8s-master2瓶蚂、k8s-master3 上設(shè)置 kubectl 的環(huán)境變量 KUBECONFIG,連接 kubelet
$ vi ~/.bashrcexport KUBECONFIG=/etc/kubernetes/admin.conf$ source ~/.bashrc
  1. 在 k8s-master2宣吱、k8s-master3 檢測(cè)節(jié)點(diǎn)狀態(tài)窃这,發(fā)現(xiàn)節(jié)點(diǎn)已經(jīng)加進(jìn)來(lái)
[root@k8s-master1 yaml]# kubectl get nodes -o wide
nodes

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">nodes</figcaption>

  1. 在 k8s-master2、k8s-master3 上修改 kube-apiserver.yaml 的配置征候,${HOST_IP}改為本機(jī) IP
$ vi /etc/kubernetes/manifests/kube-apiserver.yaml- --advertise-address=${HOST_IP}
  1. 在 k8s-master2 和 k8s-master3 上的修改 kubelet.conf 設(shè)置杭攻,${HOST_IP}改為本機(jī) IP
$ vi /etc/kubernetes/kubelet.confserver: https://${HOST_IP}:6443
  1. 在 k8s-master2 和 k8s-master3 上的重啟服務(wù)
$ systemctl daemon-reload && systemctl restart docker kubelet
  1. 創(chuàng)建證書(shū)
    (1)在 k8s-master2 和 k8s-master3 上修改 kubelet.conf 后,由于 kubelet.conf 配置的 crt 和 key 與本機(jī) IP 地址不一致的情況疤坝,kubelet 服務(wù)會(huì)異常退出兆解,crt 和 key 必須重新制作。查看 apiserver.crt 的簽名信息跑揉,發(fā)現(xiàn) IP Address 以及 DNS 綁定了 k8s-master1锅睛,必須進(jìn)行相應(yīng)修改。
$ openssl x509 -noout -text -in /etc/kubernetes/pki/apiserver.crt
k8s-apiserver.crt

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">k8s-apiserver.crt</figcaption>

(2)在 k8s-master1畔裕、k8s-master2衣撬、k8s-master3 上使用 ca.key 和 ca.crt 制作 apiserver.crt 和
apiserver.key

$ mkdir -p /etc/kubernetes/pki-local$ cd /etc/kubernetes/pki-local

(3)在 k8s-master1、k8s-master2扮饶、k8s-master3 上生成 2048 位的密鑰對(duì)

$ openssl genrsa -out apiserver.key 2048

(4)在 k8s-master1具练、k8s-master2、k8s-master3 上生成證書(shū)簽署請(qǐng)求文件

$ openssl req -new -key apiserver.key -subj "/CN=kube-apiserver," -out apiserver.csr

(5)在 k8s-master1甜无、k8s-master2扛点、k8s-master3 上編輯 apiserver.ext 文件,${HOST_NAME}修改為本機(jī)主機(jī)名岂丘,${HOST_IP}修改為本機(jī) IP 地址陵究,${VIRTUAL_IP}修改為 keepalived 的虛擬 IP(172.24.12.80)

$ vi apiserver.extsubjectAltName = DNS:${HOST_NAME},DNS:kubernetes,DNS:kubernetes.default,DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP:10.96.0.1, IP:${HOST_IP}, IP:${VIRTUAL_IP}

(6)在 k8s-master1、k8s-master2奥帘、k8s-master3 上使用 ca.key 和 ca.crt 簽署上述請(qǐng)求

$ openssl x509 -req -in apiserver.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out apiserver.crt -days 365 -extfile /etc/kubernetes/pki-local/apiserver.ext

(7)在 k8s-master1铜邮、k8s-master2、k8s-master3 上查看新生成的證書(shū):

$ openssl x509 -noout -text -in apiserver.crt
k8s-apiserver.crt2

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">k8s-apiserver.crt2</figcaption>

(8)在 k8s-master1、k8s-master2松蒜、k8s-master3 上把 apiserver.crt 和 apiserver.key 文件復(fù)制到 /etc/kubernetes/pki 目錄

cp apiserver.crt apiserver.key /etc/kubernetes/pki/
  1. 在 k8s-master2 和 k8s-master3 上修改 admin.conf扔茅,${HOST_IP}修改為本機(jī) IP 地址
$ vi /etc/kubernetes/admin.confserver: https://${HOST_IP}:6443
  1. 在 k8s-master2 和 k8s-master3 上修改 controller-manager.conf,${HOST_IP}修改為本機(jī) IP 地址
$ vi /etc/kubernetes/controller-manager.confserver: https://${HOST_IP}:6443
  1. 在 k8s-master2 和 k8s-master3 上修改 scheduler.conf秸苗,${HOST_IP}修改為本機(jī) IP 地址
$ vi /etc/kubernetes/scheduler.confserver: https://${HOST_IP}:6443
  1. 在 k8s-master1召娜、k8s-master2、k8s-master3 上重啟所有服務(wù)
$ systemctl daemon-reload && systemctl restart docker kubelet

驗(yàn)證高可用安裝

  1. 在 k8s-master1惊楼、k8s-master2玖瘸、k8s-master3 任意節(jié)點(diǎn)上檢測(cè)服務(wù)啟動(dòng)情況,發(fā)現(xiàn) apiserver檀咙、controller-manager雅倒、kube-scheduler、proxy攀芯、flannel 已經(jīng)在 k8s-master1屯断、k8s-master2文虏、k8s-master3 成功啟動(dòng)
$ kubectl get pod --all-namespaces -o wide | grep k8s-master1$ kubectl get pod --all-namespaces -o wide | grep k8s-master2$ kubectl get pod --all-namespaces -o wide | grep k8s-master3
服務(wù)啟動(dòng)情況

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">服務(wù)啟動(dòng)情況</figcaption>

  1. 在 k8s-master1侣诺、k8s-master2、k8s-master3 任意節(jié)點(diǎn)上通過(guò) kubectl logs 檢查各個(gè) controller-manager 和 scheduler 的 leader election 結(jié)果氧秘,可以發(fā)現(xiàn)只有一個(gè)節(jié)點(diǎn)有效表示選舉正常
$ kubectl logs -n kube-system kube-controller-manager-k8s-master1$ kubectl logs -n kube-system kube-controller-manager-k8s-master2$ kubectl logs -n kube-system kube-controller-manager-k8s-master3$ kubectl logs -n kube-system kube-scheduler-k8s-master1$ kubectl logs -n kube-system kube-scheduler-k8s-master2$ kubectl logs -n kube-system kube-scheduler-k8s-master3
  1. 在 k8s-master1年鸳、k8s-master2、k8s-master3 任意節(jié)點(diǎn)上查看 deployment 的情況
$ kubectl get deploy --all-namespaces
deployment的情況

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">deployment的情況</figcaption>

  1. 在 k8s-master1丸相、k8s-master2搔确、k8s-master3 任意節(jié)點(diǎn)上把 kubernetes-dashboard、kube-dns灭忠、 scale up 擴(kuò)成 replicas=3膳算,保證各個(gè) master 節(jié)點(diǎn)上都有運(yùn)行
$ kubectl scale --replicas=3 -n kube-system deployment/kube-dns$ kubectl get pods --all-namespaces -o wide| grep kube-dns$ kubectl scale --replicas=3 -n kube-system deployment/kubernetes-dashboard$ kubectl get pods --all-namespaces -o wide| grep kubernetes-dashboard$ kubectl scale --replicas=3 -n kube-system deployment/heapster$ kubectl get pods --all-namespaces -o wide| grep heapster

keepalived 安裝配置

  1. 在 k8s-master、k8s-master2弛作、k8s-master3 上安裝 keepalived
$ yum install -y keepalived$ systemctl enable keepalived && systemctl restart keepalived
  1. 在 k8s-master1涕蜂、k8s-master2、k8s-master3 上備份 keepalived 配置文件
$ mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
  1. 在 k8s-master1映琳、k8s-master2机隙、k8s-master3 上設(shè)置 apiserver 監(jiān)控腳本,當(dāng) apiserver 檢測(cè)失敗的時(shí)候關(guān)閉 keepalived 服務(wù)萨西,轉(zhuǎn)移虛擬 IP 地址
$ vi /etc/keepalived/check_apiserver.sh#!/bin/bash err=0 for k in $( seq 1 10 ) do check_code=$(ps -ef|grep kube-apiserver | wc -l) if [ "$check_code" = "1" ]; then err=$(expr $err + 1) sleep 5 continue else err=0 break fi done if [ "$err" != "0" ]; then echo "systemctl stop keepalived" /usr/bin/systemctl stop keepalived exit 1 else exit 0 fi$ chmod a+x /etc/keepalived/check_apiserver.sh
  1. 在 k8s-master1有鹿、k8s-master2、k8s-master3 上查看接口名字
$ ip a | grep 172.24.12
  1. 在 k8s-master1谎脯、k8s-master2葱跋、k8s-master3 上設(shè)置 keepalived,參數(shù)說(shuō)明如下:
    state ${STATE}:為 MASTER 或者 BACKUP,只能有一個(gè) MASTER
    interface ${INTERFACE_NAME}:為本機(jī)的需要綁定的接口名字(通過(guò)上邊的 ip a 命令查看)
    mcast_src_ip ${HOST_IP}:為本機(jī)的IP地址
    priority ${PRIORITY}:為優(yōu)先級(jí)娱俺,例如 102际看、101、100矢否,優(yōu)先級(jí)越高越容易選擇為 MASTER仲闽,優(yōu)先級(jí)不能一樣, master設(shè)置應(yīng)高于 backup
    ${VIRTUAL_IP}:為虛擬的 IP 地址僵朗,這里設(shè)置為 172.24.12.80
$ vi /etc/keepalived/keepalived.conf
keepalived參數(shù)設(shè)置

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">keepalived參數(shù)設(shè)置</figcaption>

  1. 在 k8s-master1赖欣、k8s-master2、k8s-master3 上重啟 keepalived 服務(wù)验庙,檢測(cè)虛擬 IP 地址是否生效
$ systemctl restart keepalived$ ping 172.24.12.80

nginx負(fù)載均衡配置

  1. 在 k8s-master1顶吮、k8s-master2、k8s-master3 上修改 nginx-default.conf設(shè)置粪薛,${HOST_IP}對(duì)應(yīng) k8s-master1悴了、k8s-master2、k8s-master3 的地址违寿。通過(guò) nginx 把訪(fǎng)問(wèn) apiserver 的 6443 端口負(fù)載均衡到 8433 端口上
$ vi /home/yaml/nginx-default.confstream {   upstream apiserver {     server ${HOST_IP}:6443 weight=5 max_fails=3 fail_timeout=30s;     server ${HOST_IP}:6443 weight=5 max_fails=3 fail_timeout=30s;     server ${HOST_IP}:6443 weight=5 max_fails=3 fail_timeout=30s;  }  server {     listen 8443;     proxy_connect_timeout 1s;     proxy_timeout 3s; proxy_pass apiserver;  } }
  1. 在 k8s-master1湃交、k8s-master2验残、k8s-master3 上啟動(dòng) nginx 容器
$ docker run -d -p 8443:8443 \ --name nginx-lb \ --restart always \ -v /home/yaml/nginx-default.conf:/etc/nginx/nginx.conf \ nginx
  1. 在 k8s-master1污茵、k8s-master2、k8s-master3 上檢測(cè) keepalived 服務(wù)的虛擬 IP 地址指向
$ curl -L 192.168.60.80:8443 | wc -l% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 14 0 14 0 0 18324 0 --:--:-- --:--:-- --:--:-- 14000 1
  1. 業(yè)務(wù)恢復(fù)后務(wù)必重啟 keepalived疚鲤,否則 keepalived 會(huì)處于關(guān)閉狀態(tài)
$ systemctl restart keepalived
  1. 在 k8s-master1掂咒、k8s-master2才沧、k8s-master3 上查看 keeplived 日志,有以下輸出表示當(dāng)前虛擬 IP 地址綁定的主機(jī)
$ systemctl status keepalived -lVRRP_Instance(VI_1) Sending gratuitous ARPs on ens160 for 172.24.12.80

kube-proxy配置

  1. 在 k8s-master1 上設(shè)置 kube-proxy 使用 keepalived 的虛擬IP地址绍刮,避免 k8s-master1 異常的時(shí)候所有節(jié)點(diǎn)的 kube-proxy 連接不上
$ kubectl get -n kube-system configmap  NAME DATA AGE extension-apiserver-authentication 6 4h kube-flannel-cfg 2 4h kube-proxy 1 4h
  1. 在 k8s-master1 上修改 configmap/kube-proxy 的 server 指向 keepalived 的虛擬IP地址
$ kubectl edit -n kube-system configmap/kube-proxy  server: https://172.24.12.80:8443
  1. 在 k8s-master1 上查看 configmap/kube-proxy 設(shè)置情況
$ kubectl get -n kube-system configmap/kube-proxy -o yaml
  1. 在 k8s-master1 上刪除所有 kube-proxy 的 pod温圆,讓 proxy 重建
kubectl get pods --all-namespaces -o wide | grep proxy
  1. 在 k8s-master1、k8s-master2孩革、k8s-master3 上重啟 docker kubelet keepalived 服務(wù)
systemctl restart docker kubelet keepalived

驗(yàn)證 master 集群高可用

在 k8s-master1 上檢查各個(gè)節(jié)點(diǎn) pod 的啟動(dòng)狀態(tài)岁歉,每個(gè)上都成功啟動(dòng) heapster、kube-apiserver嫉戚、kube-controller-manager刨裆、kube-dns、kube-flannel彬檀、kube-proxy帆啃、kube-scheduler、kubernetes-dashboard窍帝、monitoring-grafana努潘、monitoring-influxdb。并且所有 pod 都處于 Running 狀態(tài)表示正常

$ kubectl get pods --all-namespaces -o wide | grep k8s-master1$ kubectl get pods --all-namespaces -o wide | grep k8s-master2$ kubectl get pods --all-namespaces -o wide | grep k8s-master3

node 節(jié)點(diǎn)加入高可用集群設(shè)置

  1. 在 k8s-master1 上查看集群的 token
$ kubeadm token list
kubeadm token

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">kubeadm token</figcaption>

  1. 在 k8s-node1~k8s-node8 上,${TOKEN}為 k8s-master1 上顯示的 token疯坤,${VIRTUAL_IP}為 keepalived 的虛擬 IP 地址 172.24.12.80
$ kubeadm join --token ${TOKEN} ${VIRTUAL_IP}:8443
  1. 查看 kubelet status,確保 activing
[root@k8s-node1 ~]# systemctl start  kubelet[root@k8s-node1 ~]# journalctl -xeu kubelet

注:如果有不必要的報(bào)錯(cuò)报慕,使用下面 join 方法:

[root@k8s-node1 ~]# kubeadm join --token efeayj.qa8q6c0ojo72crsn 172.24.12.80:8443 --ignore-preflight-errors 'all' --discovery-token-unsafe-skip-ca-verification

部署應(yīng)用驗(yàn)證集群

  1. 在 k8s-node1 ~ k8s-node8 上查看 kubelet 狀態(tài),kubelet 狀態(tài)為 active (running) 表示 kubelet 服務(wù)正常啟動(dòng)
systemctl status keepalived
  1. 在 k8s-master1 上檢查各個(gè)節(jié)點(diǎn)狀態(tài)压怠,發(fā)現(xiàn)所有 k8s-nodes 節(jié)點(diǎn)成功加入
[root@k8s-master1 yaml]# kubectl get nodes -o wide
kubectl get nodes

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">kubectl get nodes</figcaption>

  1. 在 k8s-master1 上測(cè)試部署 nginx 服務(wù)眠冈,nginx 服務(wù)成功部署到 k8s-node1 上
[root@k8s-master1 yaml]# kubectl run nginx --image=nginx --port=80[root@k8s-master1 yaml]# kubectl get pod -o wide -l=run=nginx
run nginx

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">run nginx</figcaption>

  1. 在 k8s-master1 讓 nginx 服務(wù)外部可見(jiàn)
[root@k8s-master1 yaml]# kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort[root@k8s-master1 yaml]# kubectl get svc -l=run=nginx
nginx服務(wù)外部可見(jiàn)

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">nginx服務(wù)外部可見(jiàn)</figcaption>

  1. 訪(fǎng)問(wèn)測(cè)試
[root@k8s-master1 yaml]# curl 172.24.12.35:31012

或者使用瀏覽器訪(fǎng)問(wèn),如下:

curl nginx

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">curl nginx</figcaption>

瀏覽器訪(fǎng)問(wèn)nginx

<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">瀏覽器訪(fǎng)問(wèn)nginx</figcaption>

至此菌瘫,kubernetes 高可用集群成功部署蜗顽!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雨让,隨后出現(xiàn)的幾起案子雇盖,更是在濱河造成了極大的恐慌,老刑警劉巖栖忠,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崔挖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庵寞,警方通過(guò)查閱死者的電腦和手機(jī)狸相,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)皇帮,“玉大人卷哩,你說(shuō)我怎么就攤上這事蛋辈∈羰埃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵冷溶,是天一觀的道長(zhǎng)渐白。 經(jīng)常有香客問(wèn)我,道長(zhǎng)逞频,這世上最難降的妖魔是什么纯衍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮苗胀,結(jié)果婚禮上襟诸,老公的妹妹穿的比我還像新娘。我一直安慰自己基协,他們只是感情好歌亲,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著澜驮,像睡著了一般陷揪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天悍缠,我揣著相機(jī)與錄音卦绣,去河邊找鬼。 笑死飞蚓,一個(gè)胖子當(dāng)著我的面吹牛滤港,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趴拧,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜗搔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了八堡?” 一聲冷哼從身側(cè)響起樟凄,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兄渺,沒(méi)想到半個(gè)月后缝龄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挂谍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年叔壤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片口叙。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炼绘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妄田,到底是詐尸還是另有隱情俺亮,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布疟呐,位于F島的核電站脚曾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏启具。R本人自食惡果不足惜本讥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲁冯。 院中可真熱鬧拷沸,春花似錦、人聲如沸薯演。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)涣仿。三九已至勤庐,卻和暖如春示惊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愉镰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工米罚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丈探。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓录择,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親碗降。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隘竭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容