在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Kubectl scale 命令最佳實踐

    云和安全管理服務(wù)專家新鈦云服 祝祥翻譯

    kubectl scale 是幫助我們管理 Kubernetes 部署的眾多工具之一。在本文中我們將了解如何使用此工具以及最佳使用實踐。

    概述

    kubectl scale命令通過調(diào)整正在運行的容器的數(shù)量來立即縮放應(yīng)用程序。這是增加部署副本數(shù)量的最快、最簡單的方法,可用于應(yīng)對服務(wù)高峰以及日常維護變更。

    在本文中,我們將了解如何使用kubectl scale來擴展一個簡單的Kubernetes Deployment,同時,我們還將更深入的了解該命令相關(guān)的各種參數(shù)。最終形成kubectl scale的最佳實踐,以及一些用于調(diào)整 Kubernetes 副`本數(shù)的替代方法。

    kubectl scale用例

    kubectl scale用于更改Kubernetes deployment, replica set, replication controller和 statefulset 等對象的副本數(shù)碼。當我們增加副本數(shù)時,Kubernetes將啟動新的Pod來擴我們的服務(wù)。降低副本數(shù)將導致 Kubernetes 優(yōu)雅地終止一些 pod,從而釋放集群資源

    我們可以運行kubectl scale來手動調(diào)整應(yīng)用程序的副本數(shù),以響應(yīng)不斷變化的服務(wù)容量需求。增加的流量負載可以通過增加副本數(shù)來處理,提供更多的應(yīng)用程序?qū)嵗齺矸?wù)用戶流量。當業(yè)務(wù)突發(fā)降低的時候,可以減少副本的數(shù)量。這有助于通過避免使用不需要的資源來降低成本。

    使用 kubectl

    kubectl scale最基本的用法是這樣的:

    $ kubectl scale –replicas=3 deployment/demo-deployment

    執(zhí)行此命令將調(diào)整名為demo-deployment 的部署,使其擁有三個正在運行的副本。我們可以通過替換其名稱而不是部署來定位不同類型的資源:

    # ReplicaSet$ kubectl scale –replicas=3 rs/demo-replicaset# ReplicationController$ kubectl scale –replicas=3 rc/demo-replicationcontroller# StatefulSet$ kubectl scale –replicas=3 sts/demo-statefulset

    基礎(chǔ)縮放

    現(xiàn)在我們將看一個使用kubectl scale擴展部署的完整示例。這是一個定義簡單部署的 YAML 文件:

    apiVersion: apps/v1kind: Deploymentmetadata:name: demo-deploymentspec:replicas: 1selector: matchLabels: app: demo-apptemplate: metadata: labels: app: demo-app spec: containers: – name: nginx image: nginx:latest

    將此 YAML 保存到工作目錄中的demo-deployment.yaml 。接下來,使用kubectl將部署添加到我們的集群:

    $ kubectl apply -f demo-deployment.yamldeployment.apps/demo-deployment created

    現(xiàn)在運行kubectl get pods命令來查看已為部署創(chuàng)建的 pod:

    $ kubectl get podsNAME READY STATUS RESTARTS AGEdemo-deployment-86897ddbb-jl6r6 1/1 Running 0 33s

    只有一個 pod 正在運行。這是意料之中的,因為部署的清單在其spec.replicas字段中聲明了一個副本。

    單個副本不足以用于生產(chǎn)應(yīng)用程序。如果托管 pod 的節(jié)點出于任何原因離線,我們可能會遇到停機時間。使用kubectl scale增加副本數(shù)以提供更多空間:

    $ kubectl scale –replicas=5 deployment/demo-deploymentdeployment.apps/demo-deployment scaled

    重復(fù)kubectl get pods命令以確認部署已成功擴容:

    $ kubectl get podsNAME READY STATUS RESTARTS AGEdemo-deployment-86897ddbb-66lzc 1/1 Running 0 46sdemo-deployment-86897ddbb-66s9d 1/1 Running 0 46sdemo-deployment-86897ddbb-jl6r6 1/1 Running 0 3m33sdemo-deployment-86897ddbb-sgcjb 1/1 Running 0 46sdemo-deployment-86897ddbb-tgvnw 1/1 Running 0 46s

    現(xiàn)在有五個 Pod 正在運行。從AGE列可以看到scale命令保留了原來的 pod 并新增了 4 個。

    經(jīng)過進一步思考,我們可能會決定此應(yīng)用程序不需要五個副本。它只運行一個靜態(tài) NGINX Web 服務(wù)器,因此每個用戶請求的資源消耗應(yīng)該很低。再次使用scale命令來降低副本數(shù)并避免浪費集群容量:

    $ kubectl scale –replicas=3 deployment/demo-deploymentdeployment.apps/demo-deployment created

    重復(fù)kubectl get pods命令:

    $ kubectl get podsNAME READY STATUS RESTARTS AGEdemo-deployment-86897ddbb-66lzc 1/1 Terminating 0 3m21sdemo-deployment-86897ddbb-66s9d 1/1 Terminating 0 3m21sdemo-deployment-86897ddbb-jl6r6 1/1 Running 0 6m8sdemo-deployment-86897ddbb-sgcjb 1/1 Running 0 3m21sdemo-deployment-86897ddbb-tgvnw 1/1 Running 0 3m21s

    Kubernetes 已將兩個正在運行的 pod 標記為終止。這會將正在運行的副本計數(shù)減少到請求的三個 pod。選擇要驅(qū)逐的 pod 會被發(fā)送一個SIGTERM(https://www.containiq.com/post/sigterm-signal-15-linux-graceful-termination-exit-code-143) 信號并允許優(yōu)雅地終止(https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-terminating-with-grace)。停止后,它們將從 pod 列表中刪除。

    條件縮放

    有時我們可能想要擴展資源,但前提是已經(jīng)有特定數(shù)量的副本在運行。這可以避免意外覆蓋以前的副本,例如集群中其他用戶所做的更改。

    在命令中包含–current-replicas標志可以達到效果:

    $ kubectl scale –current-replicas=3 –replicas=5 deployment/demo-deploymentdeployment.apps/demo-deployment scaled

    此示例將演示deployment擴展到五個副本,但前提是當前有三個副本正在運行。–current -replicas值始終完全匹配;我們不能將條件表示為“小于”或“大于”特定計數(shù)。

    擴展多個資源

    當我們提供多個名稱作為參數(shù)時, kubectl scale命令可以一次縮放多個資源。每個資源都將縮放到由–replicas標志設(shè)置的相同副本計數(shù)。

    $ kubectl scale –replicas=5 deployment/app deployment/databasedeployment.apps/app scaleddeployment.apps/database scaled

    此命令將應(yīng)用程序和數(shù)據(jù)庫deployment擴展到每個五個副本。

    我們可以通過提供–all標志來擴展特定類型的每個資源,例如此示例以擴展默認命名空間中的所有部署:

    $ kubectl scale –all –replicas=5 –namespace=default deploymentdeployment.apps/app scaleddeployment.apps/database scaled

    這會選擇當前活動命名空間內(nèi)的每個匹配資源??s放的對象顯示在命令的輸出中。

    我們可以對使用–selector標志縮放的對象進行精細控制。這我們可以使用標準選擇語法根據(jù)對象的標簽(https://www.containiq.com/post/using-kubernetes-labels-selectors-annotations) 過濾對象。這是一個使用app-name=demo-app標簽擴展所有部署的示例:

    $ kubectl scale –replicas=5 –selector=app-name=demo-app deploymentdeployment.apps/app scaleddeployment.apps/database scaled

    更改超時

    –timeout標志設(shè)置 Kubectl 在放棄縮放操作之前將等待的時間。默認情況下,沒有等待期。該標志接受可讀的時間值,例如5m或1h:

    $ kubectl scale –replicas=5 –timeout=1m deployment/demo-deployment

    如果無法立即完成縮放更改,這可以讓我們避免長時間的終端掛起。盡管kubectl scale是一個命令式命令,但在將新 pod 調(diào)度到節(jié)點時,對縮放的更改有時可能需要幾分鐘才能完成。

    最佳實踐

    使用kubectl scale通常是擴展工作負載的最快、最可靠的方法。但是,為了安全操作,需要記住一些最佳實踐。如下所示:

    • 避免過于頻繁地縮放:對副本計數(shù)的更改應(yīng)響應(yīng)特定事件,例如導致請求運行緩慢或丟包的擁塞。最好分析當前的服務(wù)性能,估算一下當前需要滿足性能的資源需求,同時也預(yù)估一下未來的增長容量。避免過于頻繁地擴展應(yīng)用程序,因為在創(chuàng)建和終止POD時,每個操作都可能導致延遲。
    • 副本縮小到零將會導致服務(wù)停止。您可以運行kubectl scale–replicas=0,這將刪除選定對象中的所有容器。通過使用該命令,調(diào)整replicas的參數(shù),從而實現(xiàn)向上的擴容。
    • 確保我們選擇了正確的對象。沒有確認提示,因此請務(wù)必注意正在選擇的對象。按名稱手動選擇對象是最安全的方法,可以防止您意外地擴展應(yīng)用程序的其他部分,從而導致停機或資源浪費。
    • 使用 –current-replicas來避免意外。使用–current replications標志可以確保僅當當前計數(shù)符合您的期望時,縮放才會更改,從而提高安全性。否則,您可能會無意中覆蓋其他用戶或Kubernetes autoscaler應(yīng)用的縮放更改。

    kubectl Scale的替代方式

    運行kubectl scale是一項必不可少的操作,它對集群有著直接的影響。您正在指示Kubernetes盡快提供特定數(shù)量的副本。如果使用命令式的kubectl create命令創(chuàng)建對象,這是合乎邏輯的,但是如果最初使用聲明性的YAML文件運行kubectl apply,則這是不合適的,如上所示。運行scale命令后,集群中的副本數(shù)量將不同于YAML的spec.replications字段中定義的副本數(shù)量。更好的做法是修改YAML文件,然后將其重新應(yīng)用于集群。

    首先將spec.replicas字段更改為我們所需的新副本數(shù):

    apiVersion: apps/v1kind: Deploymentmetadata:name: demo-deploymentspec:replicas: 5selector: matchLabels: app: demo-apptemplate: metadata: labels: app: demo-app spec: containers: – name: nginx image: nginx:latest

    現(xiàn)在對修改后的文件重復(fù)kubectl apply命令:

    $ kubectl apply -f demo-deployment.yaml

    kubectl 將自動區(qū)分更改并采取措施將集群的狀態(tài)演變?yōu)槲募新暶鞯臓顟B(tài)。這將導致 Pod 被自動創(chuàng)建或終止,因此運行實例的數(shù)量再次與spec.replicas字段匹配。

    kubectl scale的另一個替代方案是 Kubernetes 對自動縮放的支持。配置此機制允許 Kubernetes 根據(jù) CPU 使用率和網(wǎng)絡(luò)活動等指標在配置的最小值和最大值之間自動調(diào)整副本計數(shù)。

    最后的總結(jié)

    kubectl scale命令是擴展 Kubernetes deployments, replica sets, replication controllers以及stateful sets的通用方式。它在每次調(diào)用時以一個或多個對象為目標,并對其進行縮放,以便運行指定數(shù)量的 pod。

    我們可以選擇設(shè)置條件,因此只有在存在特定數(shù)量的現(xiàn)有副本時才會更改比例,從而避免在錯誤方向上意外調(diào)整大小。

    同時我們也希望能夠遵循一些本文所提到的最佳時實踐,從而平穩(wěn),可靠的實現(xiàn)資源的擴縮容。

    *原文:https://www.containiq.com/post/kubectl-scale

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年7月13日 21:16
    下一篇 2022年7月13日 21:16

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息