Kubernetes 筆記 02 demo 初體驗

原文: Kubernetes 筆記 02 demo 初體驗

本文首發於個人公衆號 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 個步驟: 工具

image

  1. 建立一個 K8S 集羣
  2. 部署 APP
  3. 探索 APP
  4. 訪問 APP
  5. APP 彈性伸縮
  6. 更新 APP

在開始每一個步驟以前,先來了解個東西——minikube。顧名思義,這是一個迷你版的 K8S,一個輕量級的 K8S 實現,對於日常的學習體驗,使用它能夠達到和使用 K8S 同樣的效果。它的部署方式足夠簡單,All-In-One,一個集羣只有一個節點,K8S 全部組件都部署在這個節點上。學習

用戶也可使用 Web UI 和 minikube CLI 的方式來管理 K8S 集羣,好比:啓動,中止,刪除,獲取狀態等。官方的 demo 就是使用 minikube CLI 來完成的。google

話很少說,下面咱們就開始體驗下 K8S 之旅吧。雲計算

第一步:建立一個 K8S 集羣

image

在交互界面輸入 minikube start 就建立了一個 K8S 集羣,這個集羣建立在一臺 VM 上,K8S 全部組件都跑在這臺 VM 上。命令行

接下來咱們就可使用 K8S 命令行工具 kubectl 來操做這個集羣了。

kubectl version 查看 K8S 的版本號:

image

看到兩個 version,client version 指 kubectl 的 version,server version 就是 K8S 的 version。

kubectl get nodes 獲取集羣節點數:

image

能夠看到這個 demo 只有一個節點,就是前面建立的 VM。status 是 ready,說明該節點準備好部署 APP 了。

第二步:部署一個 APP

執行命令: 

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

就完成了一個 APP 的部署。

image

其中,--image 指定 APP 的 Docker 鏡像,--port 設置 APP 對外服務的端口,kubectl run 會下載鏡像,而後建立 deployment,根據 deployment 建立 APP。deployment 就像是 APP 的說明書,它指導怎麼建立 和維護 APP。APP 建立完運行在 Docker 容器中,使用 kubectl get deployments 能夠查看 deployment 的信息。

第三步:探索 APP

上一步建立完 deployment,會接着建立 Pod 來運行 APP 容器,K8S 使用 Pod 來管理容器資源,一個 Pod 能夠包含一個或多個容器,在這個例子,一個 Pod 就只有一個 APP 容器。使用 kubectl get pods 查看當前 Pod 信息。

image

更詳細信息使用 kubectl describe pods 查看。

kubectl 工具對於排錯頗有幫助,下面幾個是較爲經常使用的命令:

  • kubectl get - 列出資源
  • kubectl describe - 顯示資源的詳細信息
  • kubectl logs - 輸出 Pod 中容器的日誌
  • kubectl exec - 在 Pod 容器中執行命令

第四步:訪問 APP

默認狀況下,全部 Pod 都只能在集羣內部訪問,上面看到每一個 Pod 有 IP 和端口,Pod 之間能夠直接訪問。外部想要訪問 Pod, 須要將端口暴露出去,執行以下命令:

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

將容器的端口(8080)映射到節點的端口。

執行 kubectl get services 查看映射到的節點的端口。

image

能夠看到容器的 8080 端口已經映射到節點的 31915 端口。外部能夠經過 NodeIP:Port 的方式就能夠訪問到 Pod 內的容器,以下:

image

service 是 K8S 中對 Pod 的進一步抽象,是外部訪問 Pod 的入口。若是把 K8S 集羣想象成一個組織,那麼 service 就是這個組織的接口人,爲何須要 service,這個留做後面的內容再講,在這裏你能夠把它暫時理解成端口映射。 

第五步:APP 的彈性伸縮

爲了知足高可用,Pod 能夠自動擴容和縮容。默認狀況下,Pod 只會運行一個副本,這是由 deployment 定義的,能夠經過 kubectl get deployments 查看副本數,經過 kubectl scale deployments/app --replicas=num 增長或減小副本數。 

好比,增長副本數到 4 個: 

image

看到 Pod 數也增長到了 4 個。

減小副本數爲 2 個: 

image

看到兩個副本顯示 Terminating,表示正在停止,過段時間再看就只有兩個了。

對於多副本的狀況,訪問 APP 會實現負載均衡,以下:

image

看到每次請求訪問都落在不一樣的 Pod 上,這個功能是由 service 來完成的。

第六步:更新 APP

當前 APP 使用的鏡像版本是 v1,須要升級到 v2,執行以下命令:

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

image

看到升級過程是先停止以前的 4 個副本,再重開 4 個副本。

若是回退到 v1 版本,只用執行以下命令便可:

kubectl rollout undo deployments/kubernetes-bootcamp

image

至此,咱們已經經過官方這個 demo 體驗了一把 K8S 的功能和使用方法,下面我會陸陸續續把本身學習 K8S 的筆記整理出來,分享給你,但願對你有幫助。若有可能,請隨手轉發分享一下,讓更多的人也參與進來。

最後,仍是繼續送書,容器網絡專家倪朋飛寫的《K8S 指南》電子書,若有須要後臺回覆「K8S」(以前回復過就不用回覆了)。如需加羣學習回覆「加羣」。

更多幹貨歡迎你們關注公衆號 CloudDeveloper(一個集雲計算大小事的公衆號) 查看:

image.png

相關文章
相關標籤/搜索