現如今,Kubernetes已經完全改變了軟體開發方式,Kubernetes作為一個管理容器化作業負載及服務的開源平臺,其擁有可移植、可擴展的特性,并促進了宣告式配置和自動化,同時它還證明了自己是管理復雜微服務的主要參與者,而Kubernetes之所以能夠在業界被廣泛采用,究其原因是Kubernetes迎合了以下需求:
-
企業想要在不斷地增長的同時維持低成本
-
DevOps想要一個可以大規模運行應用程式的穩定平臺
-
開發人員希望有一個可靠并且可復制的流程來撰寫、測驗和debug代碼
但是,你是否考慮過如何在使用實際需要的資源的同時獲得強大的容器編排平臺?最佳資源利用的關鍵是知道需要擴展什么應用程式以及何時需要擴展應用程式,因此,在本文中,我們將討論和學習如何擴展Kubernetes容器,并且我們將特別關注兩類服務:kubectl和Horizontal Pod Autoscaler(HPA),
kubectl
在絕大部分情況下和Kubernetes互動是通過一個名為kubectl的命令列工具,kubectl主要用于和Kubernetes API進行通信來創建、更新以及洗掉在Kubernetes內的作業負載,在下文中,我們將提供一些常見的命令,你可以利用它們開始管理Kubernetes,
大部分常見的kubectl命令都提供了要執行的特定操作或動作,比如創建、洗掉等,這一方法通常涉及解釋描述Kubernetes中的物件(pod、服務、資源等)的檔案(YAML或JSON),這些檔案可用于模板以及環境中的持續檔案,并且幫助保持Kubernetes對宣告式配置的關注,命令列所指定的操作將會傳遞到API Server,然后根據需要與Kubernetes中的后端服務進行通信,下方的表格可以幫助你安裝kubectl:

請注意:隨著新版本的發布,適用于Windows的kubectl的最佳版本會有所變化,想要找到目前最合適的二進制檔案,請訪問以下網址:
https://storage.googleapis.com/kubernetes-release/release/stable.txt
并根據需要調整上述URL,
kubectl 句法
kubectl句法如下:
kubectl [command] [TYPE] [NAME] [flags]
-
Command:指你想要執行的動作(創建、洗掉等)
-
Type:指你要針對其執行命令的資源型別(Pod、Service等)
-
Name:資源物件的名稱(區分大小寫),如果你不指定一個名稱,它會獲取所有與你命令匹配的資源資訊,
-
Flags:這部分在句法中不是必要的,但是當需要查找指定資源時,十分有用,例如,-namespace可以讓你指定一個特定的命名空間,以在其中執行操作,
kubectl操作
以下示例可以幫助你熟悉運行常用的kubectl操作:
kubectl apply - Apply or Update a resource from a file or stdin.
# Create a service using the definition in example-service.yaml.
kubectl apply -f example-service.yaml
kubectl get - List one or more resources.
# List all pods in plain-text output format.
kubectl get pods
# List all pods in plain-text output format and include additional information (such as node name).
kubectl describe - Display detailed state of one or more resources, including the uninitialized ones by default.
# Display the details of the node with name <node-name>.
kubectl describe nodes <node-name>
kubectl delete - Delete resources either from a file, stdin, or specifying label selectors, names, resource selectors, or resources.
# Delete a pod using the type and name specified in the pod.yaml file.
kubectl delete -f pod.yaml
# Delete all the pods and services that have the label name=<label-name>.
kubectl delete pods,services -l name=<label-name>
kubectl logs - Print the logs for a container in a pod.
# Return a snapshot of the logs from pod <pod-name>.
kubectl logs <pod-name>
# Start streaming the logs from pod <pod-name>. This is similar to the 'tail -f' Linux command.
kubectl logs -f <pod-name>
以上都是kubectl中常用的操作,如果你想了解更多,可以查閱kubectl的官方指南,此外,我們在往期的文章中也有介紹:
你一定會用到的7條kubectl命令
使用Kubectl管理Kubernetes的全解教程
Horizontal Pod Autoscaler(HPA)
Pod水平自動伸縮(HPA)是Kubernetes的一個重要功能,它可以讓你配置集群以自動伸縮正在運行的服務,HPA實作為一種Kubernetes API資源和controller,資源決定controller的行為,controller會定期調整replication controller或部署中的副本數量,使觀察到的平均CPU利用率與用戶指定的目標相匹配,
同時,HPA實作為控制回路,其周期由controller manager的–horizontal-pod-autoscaler-sync-period標志控制(默認值為30秒),
在每個周期期間,controller manager 會根據每個HPA定義中指定的指標來查詢資源利用率,Controller manager會從資源指標API(針對per-pod資源指標)或自定義指標API(針對所有其他指標)中獲得指標,
-
針對per-pod資源指標(如CPU),controller會從資源指標API中為HPA定位的每個Pod獲取指標,然后,如果設定了目標利用率值,則controller將會把利用率值計算為每個pod中容器的同等資源請求的百分比,如果設定了目標原始值,則直接使用原始指標值,然后,controller將所有目標pod的利用率或原始值(取決于指定的目標型別)取平均值,并產生一個用于伸縮所需副本數量的比率,
-
針對per-pod自定義指標,controller的功能類似于per-pod資源指標,但它適用于原始值,而非利用率值,
-
對于物件指標,將會獲取單個指標(該指標描述了所討論的物件),并將其與目標值進行比較,以產生用于伸縮所需副本數量的比率,
HPA controller將會通過兩種不同的方式獲取指標:direct Heapster access和REST client access,當使用direct Heapster access時,HPA將會通過API server的服務代理子資源直接查詢Heapster,請注意,Heapster需要部署在集群上并在kube-system命名空間中運行,
HPA的作業流程包含以下四個步驟,如圖所示:
-
在設定默認30秒間隔期間,HPA會持續檢查你所配置的指標值
-
如果達到指定閾值,則HPA嘗試增加pod的數量
-
HPA主要更新在部署中或replication controller中的副本數量
-
然后,部署/replication controller將會添加任何額外所需的pod

當你推出HPA時請考慮以下因素:
-
默認的HPA檢查間隔是30秒,這個默認值可以通過controller manager的— horizontal-pod-autoscaler-sync-period標志進行配置,
-
默認的HPA相關指標容差為10%,
-
在上一次擴展事件之后,HPA將會等待3分鐘,以使指標穩定下來,這一等待事件同樣可以通過— horizontal-pod-autoscaler-upscale-delay標志進行配置,
-
從上一次縮小事件開始,HPA將會等待5分鐘,以避免autoscaler抖動,同樣可以通過— horizontal-pod-autoscaler-downscale-delay標志進行配置,
-
與replication controller相比,HPA最適合與部署物件或Pod指標配合使用,不適用于使用直接操作的replication controller的滾動更新,當你進行部署時,需要根據部署物件來管理底層副本集的大小,
-
當HPA與自定義指標(如Pod指標或物件指標)一起使用時,你需要決定何時進行伸縮,由于Kubernetes支持多種指標,因此你可以同時使用多種指標來決定伸縮的時間,請注意,Kubernetes會依照次序來考慮每個指標,更多示例請查閱:
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale
結 論
在本文中,我們討論了兩種擴展Kubernetes應用程式的主要工具,兩者都是所有Kubernetes服務的關鍵組件,我們看到了如何安裝并且使用不同的功能,如應用、獲取、洗掉、描述以及kubectl的日志等,同時,我們回顧并了解有關Horizontal Pod Autoscaler的資訊,例如它是如何作業的以及它對任意Kubernetes服務的重要性,在擴展微服務應用程式時,kubectl和HPA都是Kubernetes的重要功能,
在上個月發布的Rancher 2.3中,已經集成了HPA功能,可以在Rancher中通過UI使用,目前,Rancher 2.3也已經stable,如果想要更全面地了解Rancher 2.3關注我們下周三晚上的Rancher K8S云課堂吧!

歡迎添加微信助手(rancher2),進官方技術群,了解更多Kubernetes使用攻略
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57274.html
標籤:其他
