K8S: (二)play with k8s 多節點在線部署

  • 2019 年 10 月 31 日
  • 筆記

一、實驗環境

瀏覽器訪問 https://labs.play-with-k8s.com/ 並登陸(可用dockerhub帳號直接登錄)

image.png

點擊 +ADD NEW INSTANCE新增第一個實例

image.png

二、部署第一個節點

初始化節點,執行

kubeadm init --apiserver-advertise-address $(hostname -i)

kubeadm init和kubeadm join兩個命令用於快速構建k8s集群, 執行init 後會自動生成join命令

image.png
image.png

執行完畢後,記錄下kubeadm join命令,後面會在其他節點上執行

kubeadm join 192.168.0.17:6443 --token qglebb.ptn3dqq7n4ebo0zx --discovery-token-ca-cert-hash sha256:23ca463c1fe5db9969af70691c69b79da87665c3ac27f3aa7258995b1d4506be

三、部署其他四個節點

點擊 +ADD NEW INSTANCE,繼續新增四個實例

image.png

在這些實例中分別執行:

kubeadm join 192.168.0.17:6443 --token qglebb.ptn3dqq7n4ebo0zx --discovery-token-ca-cert-hash sha256:23ca463c1fe5db9969af70691c69b79da87665c3ac27f3aa7258995b1d4506be

執行成功的節點的左側圖標會發生變化:

image.png

在master節點上執行:

kubectl get nodes

可以看到5個節點已經初步部署完成

image.png

此時節點的狀態為NotReady,繼續在master上部署網路代理:

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

查看節點狀態已經為Ready:

kubectl get nodes
image.png

四、部署nginx服務

在mater上執行:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml
image.png

每個nginx會自動被部署到node節點中,默認是隨機選擇3個節點。查看pod狀態

kubectl get pods -o wide

pod為Running狀態表示部署成功,正常運行中

image.png

查看服務狀態:

kubectl get svc

可以看到"my-nginx-svc"服務已經啟動,內部80埠被映射到了外部30937埠

image.png
ss -anlp|grep 30937

30937埠的確被監聽,通過kube-proxy網路管理實現

image.png

五、開放埠,本機訪問

將pod上的80埠暴漏給master節點

kubectl expose deploy/my-nginx --port 80
image.png

查看服務地址:

kubectl get svc my-nginx -o go-template --template '{{ .spec.clusterIP }}'

直接對10.100.214.243進行curl訪問

curl 10.100.214.243
image.png

可以看到nginx的默認歡迎介面,至此在k8s上部署nginx完成

六、可能遇到的問題

  1. 執行kubectl get pods -o wide發現pod長時間不為Running狀態 查看pods部署時的日誌,排查相應的錯誤即可kubectl describe pods
  2. 命令執行錯誤,想快速恢復某個節點狀態 除master節點外,選中其他節點,點擊DELETE刪除節點
image.png

刪除後點擊+ADD NEW INSTANCE新增節點後執行前面記錄的kubeadm join命令:

kubeadm join 192.168.0.17:6443 --token qglebb.ptn3dqq7n4ebo0zx --discovery-token-ca-cert-hash sha256:23ca463c1fe5db9969af70691c69b79da87665c3ac27f3aa7258995b1d4506be

當前部署3個nginx實例,實際上我們有5個節點,當slave節點失敗了之後,直接忽略刪除也可以