Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、Data Science

[tool]用acs-engine在azure透過VMSS建立出kubernetes (k8s) 自動延展的cluster - 下篇

2018-07-01 Sunday
[tool]用acs-engine在azure透過VMSS建立出kubernetes (k8s) 自動延展的cluster - 上篇.jpg
圖片來源:https://pixabay.com/en/key-tag-security-label-symbol-2114047/

在上一篇(用acs-engine在azure透過VMSS建立出kubernetes (k8s) 自動延展的cluster - 上篇)介紹了如何使用acs-engine這個工具產生出了可以在azure上面部署的ARM template,并且成功部署上了Azure。

在這篇將會延續上篇建立出來的vm,并且透過工具對建立出來的k8s cluster做操作,并且看看azure和k8s怎麽的深度結合。

以下用到的指令整合在一起可以從我的github看到:mhat-acs-enginge-azure-k8s/src/02 access-k8s/access-k8s-cluster.ps1

準備工作

在這篇將會使用到k8s的command line工具kubectl

不同的作業系統有不同的安裝方式,詳細可以參考官網:https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl>

以Windows來説,建議可以透過chocolate來安裝,比較省事:

choco install kubernetes-cli

安裝好了之後,記得重開powershell,然後直接輸入kubectl,會看到kubectl的help畫面。

對k8s cluster做操作

接下來就要對建立出來的cluster做操作,有兩種方式可以對k8s的cluster做操作:

  1. ssh進入master做操作
  2. 在local設定k8s config遠端操作

ssh進入master做操作

第一種操作方式是ssh進入到master那臺機器,首先要有master的網址,這個可以從azure portal看到dns的名稱。

只需要找到master這個vm,裡面的DNS Name即可:

chrome_2018-07-01_10-59-25.png
找到dns名稱

之後就可以透過ssh的指令進入:

ssh azureuser@{dnsName}
記得把{dnsName}調整成爲剛剛查到的dns名稱

題外話,dns name其實就是之前的dns prefix設定加上看是在那個region的vm組成。
powershell_2018-07-01_11-03-06.png
ssh進去可以看到是ubuntu的機器

進入了之後,就可以用kubectl來做操作,所以舉例來説:

kubectl get nodes


可以看到vmss裡面的node節點,目前是2臺node,1臺master
剛建立以我的應該是3臺node和1臺master,但是我忘記截圖了,這張是review的時候後來補上的,因此和下面從localhost的node數字不同,但是實際上兩個會一樣。

在local設定k8s config遠端操作

上面的操作方式是遠端進去,但是還有一種是在local操作但是指令是發到遠端,我個人比較喜歡這種模式。

要做到遠端操作需要取得k8s的config設定檔案,可以在local透過以下指令取得:

scp azureuser@{dnsName}:.kube/config .
$env:KUBECONFIG = "./config"
kubectl get nodes

記得要調整{dnsName}以符合你的master dns名稱。

執行完了之後,會看到和上面ssh進入master之後get nodes一樣的内容。

powershell_2018-07-01_11-05-49.png
執行完的結果

架設簡單nginx服務

有了cluster建立出來并且還可以操作之後,接下來來測試部署一個簡單的nginx服務。

首先,可以下這個指令:

kubectl run nginx --image nginx
kubectl expose deployment nginx --port=80

這個啓動nginx的一個pod,然後把80 port開放出來。

kubectl get pods
powershell_2018-07-01_11-08-07.png
可以看到起了一個pod

接下來要調整k8s的service讓我們外網也能夠連綫的到。

執行以下指令來調整service:

kubectl edit svc/nginx

ClusterIP改成LoadBalancer

notepad_2018-07-01_11-08-58.png
修改成爲LoadBalancer

可以呼叫:

kubectl get services
看到目前service的内部及外部ip

等到建立出來可以去portal看,會發現多了一組對外ip,這個也是剛剛service裡面的那個外部ip的對應。因此可以看到,k8s和azure有做了深度整合。
chrome_2018-07-01_11-11-54.png
可以看到多了一組外部ip并且一組load balancer

最後使用那個外部ip,在外網也可以看到nginx的服務。

chrome_2018-07-01_11-11-18.png
nginx外部ip連綫成功

透過vmss自動對node做scaling

到目前爲止我們看了如何建立出pod并且能夠把service和azure的loadbalancer接上了,還有一個深度整合的地方,那就是自動做scaling。

由於建立的node是使用vmss,因此可以使用vmss的auto scaling做到依照例如cpu超過多少等指標來自動scaling。

也可以手動調整instance數,舉例來説,如果我把我的instance改成了2:

chrome_2018-07-01_11-15-45.png
設定instance改成2

稍等一下再用kubectl get nodes,會看到node變成了2臺。

powershell_2018-07-01_11-25-18.png
node變成了2臺機器

當然手動做的了,自動也做的了,這個部分和一般的vmss auto scaling沒有什麽兩樣

結語

透過了上篇(用acs-engine在azure透過VMSS建立出kubernetes (k8s) 自動延展的cluster - 下篇)以及這一篇的介紹,希望對於如何在azure上面建立k8s可以自動擴展node的cluster有了更清楚的瞭解,并且透過這篇可以看到k8s和azure的深度整合。

k8s會暫時不往下寫了,如果有興趣的朋友,或者想知道更多可以隨時透過部落格或者其他social media聯繫我。

2018-07-01 Sunday
comments powered by Disqus