K8s之Deployment YAML詳解


Deployment 簡述

Deployment 為 Pod 和 ReplicaSet 提供了一個聲明式定義 (declarative) 方法,用來替代以前的 ReplicationController 更方便的管理應用。

作為最常用的 Kubernetes 對象,Deployment 經常會用來創建 ReplicaSet 和 Pod,我們往往不會直接在集群中使用 ReplicaSet 部署一個新的微服務,一方面是因為 ReplicaSet 的功能其實不夠強大,一些常見的更新、擴容和縮容運維操作都不支持,Deployment 的引入就是為了支持這些復雜的操作。

Deployment 一個典型的用例

一個典型的用例如下:

  • 使用 Deployment 來創建 ReplicaSet。ReplicaSet 在后台創建 pod。檢查啟動狀態,看它是成功還是失敗。

  • 然后,通過更新 Deployment 的 PodTemplateSpec 字段來聲明 Pod 的新狀態。這會創建一個新的
    ReplicaSet,Deployment 會按照控制的速率將 pod 從舊的 ReplicaSet 移動到新的 ReplicaSet
    中。

  • 如果當前狀態不穩定,回滾到之前的 Deployment revision。每次回滾都會更新 Deployment 的 revision。

  • 擴容 Deployment 以滿足更高的負載。

  • 暫停 Deployment 來應用 PodTemplateSpec 的多個修復,然后恢復上線。

  • 根據 Deployment 的狀態判斷上線是否 hang 住了。

  • 清除舊的不必要的 ReplicaSet。

創建 Deployment

Deployment yaml文件包含四個部分:

  • apiVersion: 表示版本
  • kind: 表示資源
  • metadata: 表示元信息
  • spec: 資源規范字段

Deployment yaml 詳解:

apiVersion: apps/v1  # 指定api版本,此值必須在kubectl api-versions中  
kind: Deployment  # 指定創建資源的角色/類型   
metadata:  # 資源的元數據/屬性 
  name: demo  # 資源的名字,在同一個namespace中必須唯一
  namespace: default # 部署在哪個namespace中
  labels:  # 設定資源的標簽
    app: demo
    version: stable
spec: # 資源規范字段
  replicas: 1 # 聲明副本數目
  revisionHistoryLimit: 3 # 保留歷史版本
  selector: # 選擇器
    matchLabels: # 匹配標簽
      app: demo
      version: stable
  strategy: # 策略
    rollingUpdate: # 滾動更新
      maxSurge: 30% # 最大額外可以存在的副本數,可以為百分比,也可以為整數
      maxUnavailable: 30% # 示在更新過程中能夠進入不可用狀態的 Pod 的最大值,可以為百分比,也可以為整數
    type: RollingUpdate # 滾動更新策略
  template: # 模版
    metadata: # 資源的元數據/屬性 
      annotations: # 自定義注解列表
        sidecar.istio.io/inject: "false" # 自定義注解名字
      labels: # 設定資源的標簽
        app: demo
        version: stable
    spec: # 資源規范字段
      containers:
      - name: demo # 容器的名字   
        image: demo:v1 # 容器使用的鏡像地址   
        imagePullPolicy: IfNotPresent # 每次Pod啟動拉取鏡像策略,三個選擇 Always、Never、IfNotPresent
                                      # Always,每次都檢查;Never,每次都不檢查(不管本地是否有);IfNotPresent,如果本地有就不檢查,如果沒有就拉取 
        resources: # 資源管理
          limits: # 最大使用
            cpu: 300m # CPU,1核心 = 1000m
            memory: 500Mi # 內存,1G = 1024Mi
          requests:  # 容器運行時,最低資源需求,也就是說最少需要多少資源容器才能正常運行
            cpu: 100m
            memory: 100Mi
        livenessProbe: # pod 內部健康檢查的設置
          httpGet: # 通過httpget檢查健康,返回200-399之間,則認為容器正常
            path: /healthCheck # URI地址
            port: 8080 # 端口
            scheme: HTTP # 協議
            # host: 127.0.0.1 # 主機地址
          initialDelaySeconds: 30 # 表明第一次檢測在容器啟動后多長時間后開始
          timeoutSeconds: 5 # 檢測的超時時間
          periodSeconds: 30 # 檢查間隔時間
          successThreshold: 1 # 成功門檻
          failureThreshold: 5 # 失敗門檻,連接失敗5次,pod殺掉,重啟一個新的pod
        readinessProbe: # Pod 准備服務健康檢查設置
          httpGet:
            path: /healthCheck
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 5
        #也可以用這種方法   
        #exec: 執行命令的方法進行監測,如果其退出碼不為0,則認為容器正常   
        #  command:   
        #    - cat   
        #    - /tmp/health   
        #也可以用這種方法   
        #tcpSocket: # 通過tcpSocket檢查健康  
        #  port: number 
        ports:
          - name: http # 名稱
            containerPort: 8080 # 容器開發對外的端口 
            protocol: TCP # 協議
      imagePullSecrets: # 鏡像倉庫拉取密鑰
        - name: harbor-certification
      affinity: # 親和性調試
        nodeAffinity: # 節點親和力
          requiredDuringSchedulingIgnoredDuringExecution: # pod 必須部署到滿足條件的節點上
            nodeSelectorTerms: # 節點滿足任何一個條件就可以
            - matchExpressions: # 有多個選項,則只有同時滿足這些邏輯選項的節點才能運行 pod
              - key: beta.kubernetes.io/arch
                operator: In
                values:
                - amd64

 

原文:https://blog.csdn.net/DY1316434466/article/details/105440172


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM