Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、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聯繫我。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
2018-07-01 Sunday
comments powered by Disqus