Kubernetes YAML 文件全字段詳解


Kubernetes YAML 文件全字段詳解

Deployment yaml

其中主要參數都在podTemplate 中,DaemonSet StatefulSet 中的pod部分一樣。

apiVersion: v1
kind: Deployment
metadata:
  name:  <deploy-name>
  namespace: <ns-name>
  labels:
    <key>: <value>
spec: 
  replicas: 2   
  selector:
    matchLabels: #管理的有該label 的pod 
      <key>: <value>
  revisionHistoryLimit: 5
  progressDeadlineSeconds: 600  #可選參數;deployment 卡住執行出現錯誤時,等待deployment 進行的時間秒數,deployment controller會繼續重試。設置該值必須大於.spec.minReadySeconds。
  minReadySeconds: 0  #可選參數,默認為0(pod 在ready后就被認為可用),pod中容器沒有crash 並被認為可用狀態的最小秒數。
  strategy:   #更新的策略,默認為rollingUpdate , 可選Recreate 在創建新pod之前會殺掉所有已經存在的pod
    rollingUpdate:
      maxUnavailable: 25%   #最大不可用比例,可絕對值,可比例
      maxSurge: 25%     #最大更新pod量,可絕對值,可比例,按上取整
  rollbackTo:  #可選參數,用來配置deploy回退的配置,設置該參數將觸發回退操作,每次回退完成會清楚該值
    revision: 0  #默認為0,用來指定回退到的revision,0意味着回退到歷史中最老的revision
  paused: false  #可選參數 默認非paused,boolean值。用來指定暫停和恢復deploy,paused 和 非paused的唯一區別在於,paused后,所有對PodTemplateSpec的修改都不會觸發新的rollout
  template: #和pod template中一樣
    metadata:
      name: <pod-name>
      labels:
        <key>: <value> #需要和sepc.selector.matchLabels 中的lable 匹配,否則rs 服務管理到該pod
    spec:
      containers:
      - name: 
        image:
        imagePullPolicy: Alway # Alway,IfNotPresent,Never  
        command:
        args:
        workingDir: #指定容器的工作目錄
        resources: #容器運行的資源申請和限制
          requests: #申請
            cpu:
            memory:
          limits: #最大限制
            cpu:
            memory:
        ports: #容器應用運行暴露的port
        - name:
          containerPort:
          protocol:
        env: # 指定容器運行的環境變量
        - name:
          value:
        volumeMounts: # 掛載外部文件到容器
        - name: <volume-name> # volume 的 name
          mountPath: /home # 掛載到容器中的指定路徑
        livenessProbe:  #存活探針
          httpGet: #http檢測形式
            path: </path>  #路徑
            port: <containerPort>  #端口
            httpHeaders:  #需要設置請求頭時的設置
            - name: <key>
              value: <value>
          initialDelaySeconds: 20 #開始探針檢測的等待秒數,根據業務需求具體啟動時間來設置,過長會造成應用長時間無法提供服務,過短會殺死掉沒有啟動完全的應用
          #exec:  探針的exec形式
          #  command:
          #  - cmd 指令
          #  - args 參數
          periodSeconds: 10 # 執行探測的間隔
          timeoutSeconds: 3  # 探測超時的時間
          successThreshold: 1 # 默認為1,失敗狀態后的服務檢測成功1次后就識別為成功
          failureThreshold: 3  # 成功狀態后的服務,檢測3次失敗后為失敗
        readinessProbe: # 就緒探針
          tcpSocket: #tcp 端口探測模式,kubelet 執行檢測工作
            port: <containerPort> #需要探測容器端口
        terminationMessagePath: /dev/terminatino-log
        terminationMessagePolicy: File
        securityContext: {} #容器上下文權限
        lifecycle: # 生命周期
          postStart:
            exec:
              command:
          preStop:
            exec:
              command:
        stdin: true #標准輸入,是否開啟
        stdinOnce: true #stdin 為true 后,可以有打開多個通道連接容器,當stdinOnce為true,只能有一個通道連接,並且關閉通道后,stdin也將關閉,直到容器重啟
        tty: true #是否開啟交互窗口,加stdin 是docker -it 一樣的功能
      hostAliases: # 追加pod 中/etc/hosts 文件內容
      - ip: "10.1.2.3"
        hostnames:
        - "foo.remote"
        - "bar.remote"
      shareProcessNamespace: true  # 幾乎不用參數,pod 中所有容器共享進程空間
      nodeSelector: #指定調度節點標簽,用節點label 匹配
        <key>: <value> 
      dnsPolicy: ClusterFirst  # dns策略
      restartPolicy: Always #Always,Never,Failure 重啟策略,總是、永不、失敗后重啟
      schedulerName: default-scheduler  # 默認調度策略
      securityContext: {} #pod上下文權限
      terminatinoGracePeriodSeconds: 30  # 默認30 ,優雅關閉時間
      
      

securityContext Pod 權限

控制面 字段名稱
已授權容器的運行 privileged
為容器添加默認的一組能力 defaultAddCapabilities
為容器去掉某些能力 requiredDropCapabilities
容器能夠請求添加某些能力 allowedCapabilities
控制卷類型的使用 volumes
主機網絡的使用 hostNetwork
主機端口的使用 hostPorts
主機 PID namespace 的使用 hostPID
主機 IPC namespace 的使用 hostIPC
主機路徑的使用 allowedHostPaths
容器的 SELinux 上下文 seLinux
用戶 ID runAsUser
配置允許的補充組 supplementalGroups
分配擁有 Pod 數據卷的 FSGroup fsGroup
必須使用一個只讀的 root 文件系統 readOnlyRootFilesystem

Pod 安全策略 由設置和策略組成,它們能夠控制 Pod 訪問的安全特征。這些設置分為如下三類:

  • 基於布爾值控制 :這種類型的字段默認為最嚴格限制的值。
  • 基於被允許的值集合控制 :這種類型的字段會與這組值進行對比,以確認值被允許。
  • 基於策略控制 :設置項通過一種策略提供的機制來生成該值,這種機制能夠確保指定的值落在被允許的這組值中。

RunAsUser

  • MustRunAs - 必須配置一個 range。使用該范圍內的第一個值作為默認值。驗證是否不在配置的該范圍內。
  • MustRunAsNonRoot - 要求提交的 Pod 具有非零 runAsUser 值,或在鏡像中定義了 USER 環境變量。不提供默認值。
  • RunAsAny - 沒有提供默認值。允許指定任何 runAsUser

SELinux

  • MustRunAs - 如果沒有使用預分配的值,必須配置 seLinuxOptions。默認使用 seLinuxOptions。驗證 seLinuxOptions
  • RunAsAny - 沒有提供默認值。允許任意指定的 seLinuxOptions ID。

SupplementalGroups

  • MustRunAs - 至少需要指定一個范圍。默認使用第一個范圍的最小值。驗證所有范圍的值。
  • RunAsAny - 沒有提供默認值。允許任意指定的 supplementalGroups ID。

FSGroup

  • MustRunAs - 至少需要指定一個范圍。默認使用第一個范圍的最小值。驗證在第一個范圍內的第一個 ID。
  • RunAsAny - 沒有提供默認值。允許任意指定的 fsGroup ID。

控制卷

通過設置 PSP 卷字段,能夠控制具體卷類型的使用。當創建一個卷的時候,與該字段相關的已定義卷可以允許設置如下值:

  1. azureFile
  2. azureDisk
  3. flocker
  4. flexVolume
  5. hostPath
  6. emptyDir
  7. gcePersistentDisk
  8. awsElasticBlockStore
  9. gitRepo
  10. secret
  11. nfs
  12. iscsi
  13. glusterfs
  14. persistentVolumeClaim
  15. rbd
  16. cinder
  17. cephFS
  18. downwardAPI
  19. fc
  20. configMap
  21. vsphereVolume
  22. quobyte
  23. projected
  24. portworxVolume
  25. scaleIO
  26. storageos
  27. * (allow all volumes)

對新的 PSP,推薦允許的卷的最小集合包括:configMap、downwardAPI、emptyDir、persistentVolumeClaim、secret 和 projected。

主機網絡

  • HostPorts , 默認為 emptyHostPortRange 列表通過 min(包含) and max(包含) 來定義,指定了被允許的主機端口。

允許的主機路徑

  • AllowedHostPaths 是一個被允許的主機路徑前綴的白名單。空值表示所有的主機路徑都可以使用。

許可

包含 PodSecurityPolicy許可控制,允許控制集群資源的創建和修改,基於這些資源在集群范圍內被許可的能力。

許可使用如下的方式為 Pod 創建最終的安全上下文: 1. 檢索所有可用的 PSP。 1. 生成在請求中沒有指定的安全上下文設置的字段值。 1. 基於可用的策略,驗證最終的設置。

如果某個策略能夠匹配上,該 Pod 就被接受。如果請求與 PSP 不匹配,則 Pod 被拒絕。

Pod 必須基於 PSP 驗證每個字段。

services yaml

后續補充...

endpoints yaml

后續補充...

ingress yaml

后續補充...

RBAC yaml

后續補充...

HPA yaml

后續補充...

ConfigMap, Secret yaml

后續補充...

PV、PVC、StorageClass yaml

后續補充...


免責聲明!

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



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