今天將會介紹筆者本教學會使用到的Kubernate與dotnet Core工具
1.Minikube
2.Visual Studio Code
3.dotnet core
Minikube 是一個輕量的 Kubernetes 方案,透過在本機上建立 VM 與佈署簡易叢集容器。Minikube 可以運行在 Linux、Max OS 與 Windows 作業系統上。Minikube CLI 提供基本的叢集操作練習環境,包含啟動(start)、停止(stop)、狀態(status)與刪除(delete)。
由於筆者是使用 MacOS,所以接下來的安裝步驟,都會以Mac平台為,安裝步驟如下:
在BIOS選擇"Intel Virtualization Technology"(每一台電腦皆不同),並選擇 "Enabled"。
VirtualBox 是開源的VM,支援 Windows, MacOS, Linux 等平台。可以從官網直接下載並安裝。
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
$ kubectl version
Client Verison:version.Info
....
在安裝好Virtualbox以及 kubectl 之後,可根據 minikube 的 Github上不同的系統直接下載套件,以 MacOS 來說可以直接透過 brew 安裝套件。
$ brew cask install minikube
安裝完之後可重啟終端機,並且在終端機輸入以下指令
$ minikube start
接下來minikube會下載必要的檔案以及建立VM,大概約等10分鐘
啟動 minikube 之後,我們可以透過 kubectl run 在 minikube 上運行Google 提供的 hello-minikube docker image:
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
deployment "hello-minikube" created
執行kubectl expose指令,讓本機端可以連到hello-minikube這個服務
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
我們現在已經啟動了一個Pod,但是在與它連線之前我們必須等待Pod啟動完成,可以用以下指令看狀態
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-9712345789-vctvh 1/1 ContainerCreating 0 23s
約等1分鐘,可以看到已經可以連線了
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-9712345789-vctvh 1/1 Running 0 16s
可以透過Curl將目前的hello-minikube service 的內容印出來
$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=192.168.99.1
command=GET
real path=/
...
測試完後,可以刪除剛剛建立的Service
$ kubectl delete service hello-minikube
service "hello-minikube" deleted
以及刪除剛剛建立的deployment
$ kubectl delete deployment hello-minikube
deployment "hello-minikube" deleted
一般來說 Minikube 僅提供單節點功能,即透過虛擬機建立僅有一個具備 Maste/Node 節點的 Kubernetes 叢集,但為了方便快速部署與測試多節點功能,研究了一下如何將 Minikube從單節點改到多節點。
$ minikube --profile k8s-m start
$ kubectl -n kube-system get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE
coredns-78fcdf6894-cgwlj 1/1 Running 0 53s 10.244.0.3 k8s-m
coredns-78fcdf6894-rwvt7 1/1 Running 0 53s 10.244.0.2 k8s-m
...
完成後,確認 k8s-m 節點處於 Ready 狀態:
$ kubectl get no
NAME STATUS ROLES AGE VERSION
k8s-m Ready master 2m v1.12.0
確認 Master 完成後,這邊接著透過 Minikube 開啟新的節點來加入:
啟動一台新節點,注意記得加入 --node
$ minikube --profile k8s-n start --node
接著取得 Master token 與 IP
$ minikube --profile k8s-m ssh "ip -4 a"
$ minikube --profile k8s-m ssh "sudo kubeadm token list"
進入 k8s-n 然後執行接下來指令
$ minikube --profile k8s-n ssh
這邊為 k8s-n VM 內
$ sudo su -
$ TOKEN=7rzqkm.1goumlnntalpxvw0
$ kubeadm join --token ${TOKEN} ${MASTER_IP}:8443 \
--discovery-token-unsafe-skip-ca-verification \
--ignore-preflight-errors=Swap \
--ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests
完成後,透過 kubectl 檢查 Node 是否有加入叢集:
$ kubectl get no
NAME STATUS ROLES AGE VERSION
k8s-m Ready master 6m v1.12.0
k8s-n Ready <none> 40s v1.12.0
$ kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-NRwFiYgjTNUbwpFEbQMkZM0N-whAqSHmgmV43VC-S78 1m system:bootstrap:lb06u0 Approved,Issued
叢集基本上這樣就建立好了
微軟有推出 Kubernetes 專用的 VSCode 擴充套件,有很多好用的功能,目前支援 kubectl, docker, git 等多種 #k8s 命令列工具的操作介面。
安裝相關 Plugin
之後的教學有部分將以dotnet core的Application做為架設在Kubernates的應用,這邊安裝最新的dotnet core 2.1