本文首發於個人公衆號 CloudDeveloper,歡迎你們關注,和我一塊兒來學習雲計算。html
從前面的文章咱們知道,Kubernetes 脫胎於 Google 的 Borg,Borg 在 Kubernetes 誕生之初已經在 Google 內部身經百戰 10 餘年,且不說它的歷史源遠流長,就憑它是出自 Google 那幫天才工程師之手,就知道它的學習難度不低。node
對於這種有必定學習門檻的技術,最好的入門方式是先玩起來,若是剛開始就沉迷在那些理論中,很容易從入門到放棄。網絡
可喜的是,Google 已經考慮到了這一點,官方文檔提供了一個很小的 demo,麻雀雖小,五臟俱全,這個 demo 基本涵蓋了 K8S 的基本概念,經過它,能夠輕鬆構建一個 K8S 集羣,玩轉 K8S,咱們如今就去玩一玩。(PS:下面提到的概念,咱們後面會詳細討論,不理解能夠暫時跳過)app
打開:
https://kubernetes.io/docs/tutorials/kubernetes-basics 負載均衡
映入眼簾的是圖文並茂的 6 個步驟: 工具
在開始每一個步驟以前,先來了解個東西——minikube
。顧名思義,這是一個迷你版的 K8S,一個輕量級的 K8S 實現,對於日常的學習體驗,使用它能夠達到和使用 K8S 同樣的效果。它的部署方式足夠簡單,All-In-One,一個集羣只有一個節點,K8S 全部組件都部署在這個節點上。學習
用戶也可使用 Web UI 和 minikube CLI 的方式來管理 K8S 集羣,好比:啓動,中止,刪除,獲取狀態等。官方的 demo 就是使用 minikube CLI 來完成的。google
話很少說,下面咱們就開始體驗下 K8S 之旅吧。雲計算
在交互界面輸入 minikube start
就建立了一個 K8S 集羣,這個集羣建立在一臺 VM 上,K8S 全部組件都跑在這臺 VM 上。命令行
接下來咱們就可使用 K8S 命令行工具 kubectl
來操做這個集羣了。
kubectl version
查看 K8S 的版本號:
看到兩個 version,client version
指 kubectl 的 version,server version
就是 K8S 的 version。
kubectl get nodes
獲取集羣節點數:
能夠看到這個 demo 只有一個節點,就是前面建立的 VM。status
是 ready
,說明該節點準備好部署 APP 了。
執行命令:
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
就完成了一個 APP 的部署。
其中,--image
指定 APP 的 Docker 鏡像,--port
設置 APP 對外服務的端口,kubectl run
會下載鏡像,而後建立 deployment
,根據 deployment 建立 APP。deployment 就像是 APP 的說明書,它指導怎麼建立 和維護 APP。APP 建立完運行在 Docker 容器中,使用 kubectl get deployments
能夠查看 deployment 的信息。
上一步建立完 deployment,會接着建立 Pod 來運行 APP 容器,K8S 使用 Pod 來管理容器資源,一個 Pod 能夠包含一個或多個容器,在這個例子,一個 Pod 就只有一個 APP 容器。使用 kubectl get pods
查看當前 Pod 信息。
更詳細信息使用 kubectl describe pods
查看。
kubectl 工具對於排錯頗有幫助,下面幾個是較爲經常使用的命令:
默認狀況下,全部 Pod 都只能在集羣內部訪問,上面看到每一個 Pod 有 IP 和端口,Pod 之間能夠直接訪問。外部想要訪問 Pod, 須要將端口暴露出去,執行以下命令:
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
將容器的端口(8080)映射到節點的端口。
執行 kubectl get services
查看映射到的節點的端口。
能夠看到容器的 8080 端口已經映射到節點的 31915 端口。外部能夠經過 NodeIP:Port
的方式就能夠訪問到 Pod 內的容器,以下:
service
是 K8S 中對 Pod 的進一步抽象,是外部訪問 Pod 的入口。若是把 K8S 集羣想象成一個組織,那麼 service 就是這個組織的接口人,爲何須要 service,這個留做後面的內容再講,在這裏你能夠把它暫時理解成端口映射。
爲了知足高可用,Pod 能夠自動擴容和縮容。默認狀況下,Pod 只會運行一個副本,這是由 deployment 定義的,能夠經過 kubectl get deployments
查看副本數,經過 kubectl scale deployments/app --replicas=num
增長或減小副本數。
好比,增長副本數到 4 個:
看到 Pod 數也增長到了 4 個。
減小副本數爲 2 個:
看到兩個副本顯示 Terminating,表示正在停止,過段時間再看就只有兩個了。
對於多副本的狀況,訪問 APP 會實現負載均衡,以下:
看到每次請求訪問都落在不一樣的 Pod 上,這個功能是由 service 來完成的。
當前 APP 使用的鏡像版本是 v1,須要升級到 v2,執行以下命令:
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
看到升級過程是先停止以前的 4 個副本,再重開 4 個副本。
若是回退到 v1 版本,只用執行以下命令便可:
kubectl rollout undo deployments/kubernetes-bootcamp
至此,咱們已經經過官方這個 demo 體驗了一把 K8S 的功能和使用方法,下面我會陸陸續續把本身學習 K8S 的筆記整理出來,分享給你,但願對你有幫助。若有可能,請隨手轉發分享一下,讓更多的人也參與進來。
最後,仍是繼續送書,容器網絡專家倪朋飛寫的《K8S 指南》電子書,若有須要後臺回覆「K8S」(以前回復過就不用回覆了)。如需加羣學習回覆「加羣」。
更多幹貨歡迎你們關注公衆號 CloudDeveloper(一個集雲計算大小事的公衆號) 查看: