本篇已加入《.NET Core on K8S學習實踐系列文章索引》,可以點擊查看更多容器化技術相關系列文章。
翻譯: Edison Zhou
一、基本介紹
此交互實驗可以讓你不用搭建K8S環境就可以輕松地嘗試管理一個簡單的容器化應用集群,可以學習到以下內容:
- 部署一個容器化應用到一個集群中
- 對部署進行伸縮(Scale)
- 更新容器化應用至一個新版本
- Debug容器化應用
此交互實驗主要基於虛擬終端(Virutal Terminal),可以直接在你的Web瀏覽器中運行Minikube,這是一個可以隨處運行K8S的最小化的本地K8S環境,不需要你安裝任何軟件和做任何配置。
二、實驗內容
- 創建一個集群
- 部署一個應用
- 訪問當前應用
- 伸縮當前應用
- 滾動更新應用
三、具體步驟
創建一個集群
選中“Create a Cluster"=>"Interactive Tutorial - Creating a Cluster",從這里開始

然后會看到提示和終端的界面,這是一個基於Minikube的K8S終端:

通過在終端中執行 minikube start 來創建一個單節點的K8S集群:

通過執行 kubectl cluster-info 可以查看集群信息:

部署一個應用
這里部署一個示例應用,執行以下命令:
kubectl run kubernetes-bootcamp \ --image=docker.io/jocatalin/kubernetes-bootcamp:v1 \ --port=8080
這里kubectl run是老版本的命令,即將被廢除,建議使用kubectl create替代。

通過執行kubectl get pods可以看到,當前的kubernetes-bootcamp-7dc9765bf6-dgmz8就是當前應用的Pod。
訪問當前應用
默認情況下,所有Pod只能在集群內部訪問,想要從外部訪問,就必須映射端口。
kubectl expose deployment/kubernetes-bootcamp \ --type="NodePort" --port 8080
可以看到,映射成功:

執行命令 kubectl get services,可以看到應用被映射到了節點的哪個端口:

可以看出,當前應用所處的服務被映射到了32752端口上,這個端口是隨機分配的。因為采用NodePort方式的話,是會在30000-32767區間隨機取一個端口號。
怎么驗證部署的應用是否可以訪問?
curl your-cluster-ip:32725
效果如下圖所示:

伸縮當前應用
默認情況下,應用只會運行一個副本,可以通過kubectl get deployments來查看:

那么,如果需要增加副本數,可以通過命令kubectl scale來增加,如下圖所示,可以看到現在已經由1個副本增長為了3個副本了:

由於Pod是K8S資源調度的最小單位,因此執行kubectl get pods也可以驗證Pod的數量:

這時,可以通過curl再次訪問應用,便可以看到這些請求都會發往不同的Pod(也不一定完全是每次都會轉發給不同的Pod),因為我們有3個副本會負載均衡:

如果不需要很多的副本來負載均衡,也可以收縮副本數量,比如收縮到2個副本:
kubectl scale deployments/kubernetes-bootcamp --replicas=2

滾動更新應用
當前應用kubernetes-bootcamp所用的image的版本為v1,假設現在有了新版本,可以通過以下命令來將其升級到v2。
kubectl set image deployments/kubernetes-bootcamp \ kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
從下圖可以看到,更新版本之后原先v1的兩個Pod便已經在被停止,進而創建了兩個新的Pod:

過了幾秒之后,再次查看,原先的兩個v1的Pod已經被刪除:

這時可以通過curl進行驗證,可以發現版本號已經升級為了v2:

這時如果發現v2存在某個百年一遇的大Bug(不容易發現那種),想要快速回退到上個版本v1,可以通過以下命令來快速回退:
kubectl rollout undo deployments/kubernetes-bootcamp
可以看到回退之后,v2的兩個Pod就被停止了,進而新創建了兩個v1的Pod:

這時如果再進行curl驗證,可以發現版本變為了v1了:

四、實驗小結
這里通過官網的交互實驗教程快速的體驗了一把K8S的基本功能使用,全程通過kubectl來調用的K8S API,相信會對完全沒接觸K8S的童鞋有幫助。
參考資料
K8S指導手冊:
https://kubernetes.io/docs/tutorials
每天5分鍾玩轉K8S:
https://item.jd.com/12329528.html