雖然還不算學習完Docker,不過有點喜歡K8s就先來學習他一下。
Kubernetes俗稱K8s是一套開源的平台能夠自動部屬以及管理多個容器(containerized)的工作量和服務,來談談他具有的幾種特性。
可以expose container以及透過負載平衡、分配網路流量使其運行順暢。
可以自動掛載自行決定的儲存空間,不論是在local或是cloud。
自動部屬的好處應該不用說了吧,可以自動幫你部屬container,或是刪除舊的container再將資源配置給予新的container。
待補 想不到更好的解釋
自動重啟失敗的容器或是替換容器
可以在不用重建container的狀況下部屬或更新機敏資料或是環境設定,因此不需要將機敏資料設置在一開始的建置檔案
雖然Docker Desktop就有提供Kubernetes的功能了,但是小弟搞了一個多小時也沒搞好就放棄了,想到以後還是會在linux使用還是先來學Minikube吧。
要使用Kubernetes首先先安裝minikube
以及kubectl
,Minikube是一套用來本地端開發使用得工具,能夠建立單節點Kubernetes集群,雖然單節點而已但是拿來個人學習使用已經夠用了。kubectl則是一套命令行工具用來控制Kubernetes集群。
建立Kubernetes
安裝完之後就能開始我們的第一個Kubernetes了。
首先使用minikube來開始。
minikube start --driver=docker
--driver 代表要執行的driver,這邊是使用Docker,如果不填的話則是代表在主機而非虛擬機執行,除非是專業人士不然一般不建議... driver flag介紹
創建實例
建立完cluster接下來就換kubectl登場了!使用kubectl創建一個名為echoserver的範例image的簡單實例
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
執行完的輸出
deployment.apps/hello-minikube created
公開image
對了!這時候還沒結束唷要訪問我們建立的image還需要將其公開才行
使用expose將image公開
kubectl expose deployment hello-minikube --type=NodePort --port=8080
執行完的輸出
service/hello-minikube exposed
確認狀態
要確認服務是不是有確實公開了可以使用get pod確認唷
kubectl get pod
當輸出的ready為1/1且狀態為running就代表成功執行了。
NAME READY STATUS RESTARTS AGE
hello-minikube-5d9b964bfb-9hfkf 1/1 Running 0 59s
取得公開網址
但是我們要如何訪問我們建立且公開的image呢?
那就要來取得網址拉,透過--url
flag取得網址
minikube service hello-minikube --url
執行完的輸出
? Starting tunnel for service hello-minikube.
|-----------|----------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|----------------|-------------|------------------------|
| default | hello-minikube | | http://127.0.0.1:51903 |
|-----------|----------------|-------------|------------------------|
http://127.0.0.1:51903
❗ Because you are using a Docker driver on windows, the terminal needs to be open to run it.
訪問輸出上的網址就可以看到我們部屬的實例了,內容大致如下
Hostname: hello-minikube-5d9b964bfb-9hfkf
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=172.17.0.3
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://127.0.0.1:8080/
Request Headers:
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding=gzip, deflate, br
accept-language=en-US,en;q=0.9,zh-TW;q=0.8,zh;q=0.7
connection=keep-alive
host=127.0.0.1:51903
sec-fetch-dest=document
sec-fetch-mode=navigate
sec-fetch-site=none
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36
Request Body:
-no body in request-
刪除Kubernetes cluster
如果要刪除實例的話也很簡單只要刪除即可(?
首先先刪除服務(Service)
kubectl delete services hello-minikube
輸出如下
service "hello-minikube" deleted
再來要刪除部屬(Deployment)
kubectl delete deployment hello-minikube
輸出如下
deployment.extensions "hello-minikube" deleted
最後再使用minikube把剛剛建立的Kubernetes cluster停止並刪除即可
停止
minikube stop
輸出如下
Stopping "minikube"...
"minikube" stopped.
刪除
minikube delete
輸出如下
Deleting "minikube" ...
The "minikube" cluster has been deleted.
參考文獻:
Kubernetes官方文件