您好,登錄后才能下訂單哦!
現如今,Kubernetes已經完全改變了軟件開發方式。Kubernetes作為一個管理容器化工作負載及服務的開源平臺,其擁有可移植、可擴展的特性,并促進了聲明式配置和自動化,同時它還證明了自己是管理復雜微服務的主要參與者。而Kubernetes之所以能夠在業界被廣泛采用,究其原因是Kubernetes迎合了以下需求:
企業想要在不斷地增長的同時維持低成本
DevOps想要一個可以大規模運行應用程序的穩定平臺
但是,你是否考慮過如何在使用實際需要的資源的同時獲得強大的容器編排平臺?最佳資源利用的關鍵是知道需要擴展什么應用程序以及何時需要擴展應用程序。因此,在本文中,我們將討論和學習如何擴展Kubernetes容器,并且我們將特別關注兩類服務:kubectl和Horizontal Pod Autoscaler(HPA)。
在絕大部分情況下和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:資源對象的名稱(區分大小寫),如果你不指定一個名稱,它會獲取所有與你命令匹配的資源信息。
以下示例可以幫助你熟悉運行常用的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的全解教程
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(針對所有其他指標)中獲得指標。
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中的副本數量
在本文中,我們討論了兩種擴展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云課堂吧!
歡迎添加小助手(×××:×××),進官方技術群,了解更多Kubernetes使用攻略
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。