1. 程式人生 > 實用技巧 >kubernetes - Deployment

kubernetes - Deployment

一:deployment 資源

1.簡介

Deployment 為 Pod 提供宣告式更新

在 Deployment 物件中描述所需的狀態,然後 Deployment 控制器將實 際狀態以受控的速率更改為所需的狀態

您可以定義部署以建立新的副本集,或刪除現有部署並在新部署中採用 其所有資源

一句話:Deployment 主要功能是保證有足夠的 Pod 正常對外提供服務

2.建立 deployment.yaml

# 定義資源型別
kind: Deployment
# 定義API版本號
apiVersion: app1/v1
# 定義基礎資訊
metadata:
  name: test-deployment
# 定義容器資訊
spec:
  # 建立副本數
  replicas: 
2 # 定義Pod的模板 template: metadata: labels: app: test-deployment env: test spec: containers: - name: nginx images: nginx:1.19.2 # 定義選擇器 selector: # 精確匹配 matchLabels: app: test-deployment env: test

3.部署

選項描述
--record 允許將當前命令記錄在正在建立或更新的資源的註釋中
-f

filename 檔名

kubectl apply -f deployment.yaml

檢視部署狀態

排查問題,最主要看Events

kubectl get pods -w
kubectl get deployment.apps

檢視部署詳情(錯誤)

kubectl describe [資源型別] [資源名稱]
kubectl describe deployments.apps nginx-deployment

檢視執行錯誤

kubectl logs [pod名稱]

刪除之後,會再次自動啟動

kubectl delete pod name xxx

4.更新

方式1 - 通過命令列修改

kubectl set image [資源型別(控制器資源)] [資源名稱] [容器名稱]=[新映象]
kubectl set image deployment test-deployment django=redis

方式2 - 修改yaml檔案

vim test.yaml
# 定義資源型別
kind: Deployment
# 定義API版本號
apiVersion: apps/v1
# 定義基礎資訊
metadata:
  name: test-deployment
# 定義容器資訊
spec:
  # 定義副本個數
  replicas: 2
  # 定義Pod的模板
  template:
    metadata:
      labels:
        app: test-deployment
        env: test
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.2
        - name: mysql
          image: mysql:5.7
          imagePullPolicy: IfNotPresent
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: '123456'
  # 定義選擇器
  selector:
    # 精確匹配
    matchLabels:
      app: test-deployment
        env: test

方式3 - 修改資源

kubectl edit [資源型別] [資源名稱]

方式4 - 去面板中修改

方式5 - 打補丁

kubectl patch [資源型別] [資源名稱] -p [配置項]

kubectl patch deployment.apps test-deployment -p '{"spec": {"replicas": 5}}'

5.回滾

當新版本不穩定時,可以對其進行回滾操作,預設情況下,所有 Deployment 的 rollout 歷史都保留在系統中, 可以隨時回滾

檢視構建/部署歷史

kubectl rollout history [資源型別] [資源名稱]

kubectl rollout history deployment test-back

如果當前的版本和歷史版本一致,那麼那個歷史版本就會消失,只顯示當前版本

edit 的缺點:必須得知道上個版本具體是什麼

kubectl rollout history deployment test-back

kubectl rollout undo deployment test-back

① 回滾方式1 - edit

kube edit [資源型別] [資源名稱]
# 然後修改內容

② 回滾方式2 - undo

kubectl rollout undo [資源型別] [資源名稱]

③ 回滾方式3 - 回滾到指定版本

kubectl rollout undo [資源型別] [資源名稱] --to-revision=[指定版本號]

6.擴容 與 縮容

① 方式1 - edit

kube edit [資源型別] [資源名稱]
# 修改副本數 replicas: 數量

② 方式2 - 修改配置清單 yaml

vim deployment.yaml

③ 方式3 - 打補丁 patch

kubectl patch [資源型別] [資源名稱] -p [配置項]

kubectl patch deployment.apps test-deployment -p '{"spec": {"replicas": 10}}'

④ 方式4 - scale

kubectl scale [資源型別] [資源名稱] --replicas=[副本數]

kubectl scale deployment.apps test-deployment --replicas=5

⑤ 方式5 - HPA

docker pull registry.cn-hangzhou.aliyuncs.com/k8sos/metrics-server:v0.4.1

kubectl get pods -n kube-system -l k9s-app=metrics-server

kubectl top pods

7.檢視叢集IP

kubectl get pods -o wide