現現在,Kubernetes已經徹底改變了軟件開發方式。Kubernetes做爲一個管理容器化工做負載及服務的開源平臺,其擁有可移植、可擴展的特性,並促進了聲明式配置和自動化,同時它還證實了本身是管理複雜微服務的主要參與者。而Kubernetes之因此可以在業界被普遍採用,究其緣由是Kubernetes迎合瞭如下需求:node
可是,你是否考慮過如何在使用實際須要的資源的同時得到強大的容器編排平臺?最佳資源利用的關鍵是知道須要擴展什麼應用程序以及什麼時候須要擴展應用程序。所以,在本文中,咱們將討論和學習如何擴展Kubernetes容器,而且咱們將特別關注兩類服務:kubectl和Horizontal Pod Autoscaler(HPA)。後端
在絕大部分狀況下和Kubernetes交互是經過一個名爲kubectl的命令行工具。kubectl主要用於和Kubernetes API進行通訊來建立、更新以及刪除在Kubernetes內的工做負載。在下文中,咱們將提供一些常見的命令,你能夠利用它們開始管理Kubernetes。api
大部分常見的kubectl命令都提供了要執行的特定操做或動做,好比建立、刪除等。這一方法一般涉及解釋描述Kubernetes中的對象(pod、服務、資源等)的文件(YAML或JSON)。這些文件可用於模板以及環境中的持續文件,而且幫助保持Kubernetes對聲明式配置的關注。命令行所指定的操做將會傳遞到API Server,而後根據須要與Kubernetes中的後端服務進行通訊。下方的表格能夠幫助你安裝kubectl:app
請注意:隨着新版本的發佈,適用於Windows的kubectl的最佳版本會有所變化。想要找到目前最合適的二進制文件,請訪問如下網址:微服務
https://storage.googleapis.com/kubernetes-release/release/stable.txt工具
並根據須要調整上述URL。學習
kubectl 句法測試
kubectl句法以下:google
kubectl [command] [TYPE] [NAME] [flags]複製代碼
kubectl操做spa
如下示例能夠幫助你熟悉運行經常使用的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的官方指南。此外,咱們在往期的文章中也有介紹:
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的工做流程包含如下四個步驟,如圖所示:
當你推出HPA時請考慮如下因素:
在本文中,咱們討論了兩種擴展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雲課堂吧!
歡迎添加小助手(wx:rancher2),進官方技術羣,瞭解更多Kubernetes使用攻略