deployment 使用並管理rs ,算是更高一層的概念,這是現在比較常用的部署app的方式。deployment為pod和rs提供聲明式更新(而非命令式)。支持滾動更新(rollingUpdate),支持回滾操作
資源配置主要分五類來定義內容
一:apiVersion【string】 APIVersion定義對象表示的版本,此處為:apps/v1
二:kind【string】 該對象所代表的REST資源類型,此處為:Deployment
三:metadata【ObjectMeta】 對象的元數據
四:spec【DeploymentSpec】 部署所需行為的規范
五:status【DeploymentStatus】 最近部署狀態
三:metadata【ObjectMeta】
- annotations【object】: 注釋內容 ,如:auther: xlk
- name【string】:名稱在命名空間中必須是唯一的
- namespace【string】:選擇一個命名空間
- clusterName【string】:對象所屬群集的名稱。這用於區分不同集群中具有相同名稱和命名空間的資源。該字段目前未設置在任何位置,如果在創建或更新請求中設置,apiserver將忽略該字段
- creationTimestamp【Time】:表示創建此對象時的服務器時間,客戶端不能設置此值,由系統填充。
- deletionGracePeriodSeconds【integer】此對象在從系統中刪除之前正常終止所允許的秒數。僅在同時設置deletionTimestamp時設置。
- deletionTimestamp【integer】Kubelet將通過向pod中的容器發送一個優雅的終止信號,例如請求在30秒內刪除pod
- finalizers 【array】 Finalizer是K8s資源刪除流程中的一種控制機制,它在K8s對象上的存在形式其實是一系列標簽,類似annotations,K8s在接收到一個資源對象刪除請求時,會先在對象上打上一些標記,包括
deletionTimestamp
表示該對象已進入刪除流程,當檢測到對象上有finalizers
標簽(通常在資源對象的metadata
字段中)時,刪除流程會被掛起,直到所有finalizers
標簽被移除時,才繼續進行刪除流程,想刪除該資源需要先“清理干凈”它的依賴關系,即finalizers中定義的資源。
K8s原生Finalizer示例:
1.PVC和PV分別原生自帶kubernetes.io/pvc-protection
和kubernetes.io/pv-protection
的finalizers
標簽,其目的在於保護持久化存儲不被誤刪,避免掛載了存儲的工作負載產生問題。
2.Namespace也是自帶一個kubernetes的finalizers標簽的,只不過,不同於其他資源對象的metadata.finalizers標簽,ns是spec.finalizers,其作用是相同的。
- generateName【string】:可選的前綴名字,當Name字段沒有填寫時,server使用它生成一個唯一的Name。
- generation【integer】:狀態的特定生成的序列號。由系統填充。只讀。
- labels【object】:標簽 key-value 鍵值對
- managedFields【ManagedFieldsEntry array】:這主要用於內部管理,用戶通常不需要設置或理解此字段。
- selfLink【string】:SelfLink是一個代表這個對象本身的URL。該字段由系統自動生成,是一個只讀字段
- uid【string】: UID表示當前對象在任何時間和空間中都是唯一的。該字段在資源創建成功后由系統自動生成,PUT操作不會改變該字段的值。
- resourceVersion【string】:用來表示當前對象的內部版本號,client端根據這個字段來判斷對象是否已經發生變化。該字段由系統生成的,是一個只讀字段。
- generation【integer (int64)】:一個序列號,它表示期望狀態的一次生成(generation)。目前只有replication controllers支持。該字段由系統生成的,是一個只讀字段。
- ownerReferences【OwnerReference array】:這主要用於內部管理,用戶通常不需要設置或理解此字段。
- resourceVersion【string】:引用的API版本。
- blockOwnerDeletion【boolean】:如果為true,並且所有者具有“ForeGroundDelete”,則在刪除此引用之前,無法從鍵值存儲中刪除所有者。默認為false。要設置此字段,用戶需要所有者的“刪除”權限,否則將返回422
- controller【boolean】:如果為true,則此引用指向管理控制器。
- kind【string】:對象類型
- name【string】:對象的名稱
- uid【string】:對象的UID
三:spec【DeploymentSpec】
- replicas【integer】:期望的副本(replica)數量。
- selector【LabelSelector】:選擇器,必須與pod模板的標簽匹配,如果該字段為空,則默認采用pod模板中的labels。Label的鍵和值都必須與該Selector匹配
- matchLabels【object】:key value 鍵值對
- matchExpressions【LabelSelectorRequirement array】:匹配表達式,是標簽選擇的key value 鍵值對列表
- key【string】:
- operator【string】:運算符表示鍵與一組值的關系。有效運算符為In、NotIn、Exists和DoesNotExist。
- values【string array】:
- template【PodTemplateSpec】:描述了將要創建的pod模版
- metadata【ObjectMeta】:標准對象的元數據
- 與上述metadata一樣
- spec【PodSpec】:pod所需行為的規范
- containers【Container array】:容器信息
- args【string array】:
- command【string array】:
- env【EnvVar array】:
- name【string】:
- value【string】:
- valueFrom【EnvVarSource】:
- configMapKeyRef【ConfigMapKeySelector】:
- name【string】
- key【string】
- optional【optional】
- fieldRef【ObjectFieldSelector】:
- apiVersion【string】
- fieldPath【string】
- resourceFieldRef【ResourceFieldSelector】:
- containerName【string】:
- divisor【Quantity】:指定公開資源的輸出格式,默認為“1”
- resource【string】:
- containerName【string】:
- secretKeyRef【SecretKeySelector】:
- name【string】
- key【string】
- optional【optional】
- configMapKeyRef【ConfigMapKeySelector】:
- name【string】:
- envFrom【EnvFromSource array】
- configMapRef【ConfigMapEnvSource】:選擇的ConfigMap
- name【string】:對象名
- optional【boolean】:是否必須要ConfigMap
- prefix【string】:可選標識符,用於在ConfigMap中的每個鍵前添加。必須是C_IDENTIFIER.
- secretRef【SecretEnvSource】:選擇的Secret
- name【string】:對象名
- optional【boolean】:是否必須要Secret
- configMapRef【ConfigMapEnvSource】:選擇的ConfigMap
- image【string】:鏡像名
- imagePullPolicy【string】:鏡像pull策略,Always(總數), Never(總不), IfNotPresent (如果沒有就pull)
- lifecycle【Lifecycle】:
- preStop【LifecycleHandler】:
- exec【ExecAction】:
- command【string array】
- command【string array】
- httpGet【HTTPGetAction】:
- host【string】:
- httpHeaders【HTTPHeader array】
- name
- value
- name
- path【string】:
- port:1-65535
- scheme【string】:http/https
- host【string】:
- tcpSocket【TCPSocketAction】:
- exec【ExecAction】:
- postStart【LifecycleHandler】:
- preStop【LifecycleHandler】:
- livenessProbe【Probe】:定期檢測容器的活性。如果探測失敗,容器將重新啟動
- exec 指定要采取的操作
- command【string array】:容器內執行的命令行,只是簡單地執行,而不是在shell中運行,因此傳統的shell指令(“|”等)將無法工作。要使用shell,需要顯式調用該shell
- failureThreshold【integer】 :成功后被視為失敗的探測器的最小連續故障數。默認為3。最小值為1。
- grpc:GRPC指定涉及GRPC端口的操作。這是一個alpha字段,需要啟用GRPCContainerProbe功能門
- port【integer】:gRPC服務的端口號。數字必須在1到65535之間。
- service【string】:要放入gRPC HealthCheckRequest的服務的名稱
- port【integer】:gRPC服務的端口號。數字必須在1到65535之間。
- httpGet:HTTPGet指定要執行的http請求
- host【string】:要連接的主機名,默認為pod IP
- httpHeaders【string array】:要在請求中設置的自定義頭
- name【string】: 請求頭字段名
- value【string】: 請求頭值
- path【string】:HTTP服務器上的訪問路徑
- port:容器上要訪問的端口的名稱或編號。數字必須在1到65535之間。名稱必須是IANA_SVC_NAME
- scheme【string】:http或者是https
- host【string】:要連接的主機名,默認為pod IP
- initialDelaySeconds【integer】:容器啟動后的秒數,然后啟動活動性探測
- periodSeconds【integer】:執行探測的頻率(秒)。默認為10秒。最小值為1。
- successThreshold【integer】:探測失敗后被視為成功的最小連續成功數。默認值為1,最小值也是1
- tcpSocket:TCPSocket指定涉及TCP端口的操作。
- host【string】:要連接的主機名,默認為pod IP。
- port:容器上要訪問的端口的編號或名稱。數字必須在1到65535之間。名稱必須是IANA_SVC_NAME
- host【string】:要連接的主機名,默認為pod IP。
- terminationGracePeriodSeconds【integer】:持續時間(以秒為單位),探測失敗時pod需要正常終止。0表示立即停止,最小為1,需要啟用ProbeTerminationGracePeriod功能,如果未設置,則使用spec.terminationGracePeriodSeconds。
- timeoutSeconds【integer】:探測器超時后的秒數。默認為1秒。最小值為1
- exec 指定要采取的操作
- name【string】:pod中的容器名 ,必須一個唯一的名稱
ports【ContainerPort array】:要從容器中公開的端口列表
- containerPort【integer】: pod IP地址上要公開的端口數。這必須是有效的端口號,0<x<65536。
- hostIP【string】: 將外部端口綁定到哪個主機IP。
- hostPort【integer】:要在主機上公開的端口。如果指定,則必須是有效的端口號0<x<65536。如果指定了HostNetwork,則必須與ContainerPort匹配。大多數容器不需要這個。
- name【string】:如果指定,則必須是IANA_SVC_NAME,並且在pod中是唯一的。pod中的每個命名端口必須具有唯一的名稱。服務可以引用的端口的名稱。
- protocol【string】:端口的協議。必須是UDP、TCP或SCTP。默認為“TCP”。
- containerPort【integer】: pod IP地址上要公開的端口數。這必須是有效的端口號,0<x<65536。
- readinessProbe【Probe】: 定期檢查容器中服務准備情況。如果探測失敗,容器將從服務端點移除(參數同livenessProbe)
- securityContext【SecurityContext】: 定義了容器運行時應該使用的安全選項
- startupProbe【Probe】:如果指定,則在成功完成之前不會執行其他探測。如果此探測器失敗,Pod將重新啟動
- stdin【boolean】:此容器是否應在容器運行時為stdin分配緩沖區。如果未設置,則從容器中的stdin讀取數據將始終導致EOF。默認值為false。
- stdinOnce【boolean】:如果此標志為false,則從stdin讀取的容器進程將永遠不會收到EOF。默認值為false
- terminationMessagePath【string】:將容器的終止消息寫入的文件裝入容器文件系統的路徑。
- tty【boolean】:容器是否應該為自己分配一個TTY,還需要'stdin'為true。默認值為false。
- volumeDevices【VolumeDevice array】:容器要使用的塊設備列表。[{"devicePath": xx, "name": xx}]
- devicePath【string】:設備將映射到的容器內部的路徑
- name【string】:名稱必須與pod中persistentVolumeClaim的名稱匹配
- devicePath【string】:設備將映射到的容器內部的路徑
- volumeMounts【VolumeMount array】:容器要使用的的文件系統。
- name【string】:這必須與Volume的名稱匹配。
- mountPath【string】: 容器中掛載卷的路徑。不能包含“:”。
- mountPropagation【string】:確定如何將掛載從主機傳播到容器,反之亦然。未設置時,將使用MountPropagationNone。
- readOnly【boolean】:如果為true,則為只讀安裝,否則為讀寫安裝(false或未指定)。默認為false。
- subPath【string】:從中裝入容器卷的卷內的路徑,默認為“”(卷的根目錄)
- subPathExpr【string】:卷內的擴展路徑,容器的卷應從中裝入。默認為“”
- workingDir【string】:容器的工作目錄。如果未指定,將使用容器運行時的默認值
- args【string array】:
- volumes【Volume array】:容器掛載卷
- name【string】:卷的名稱。必須是DNS_LABEL,並且在pod中是唯一的
- emptyDir 【EmptyDirVolumeSource】:共享pod生命周期的臨時目錄
-
persistentVolumeClaim【PersistentVolumeClaimVolumeSource】:
- claimName【string】:PVC名
- readOnly【boolean】
- claimName【string】:PVC名
- awsElasticBlockStore【AWSElasticBlockStoreVolumeSource】:
- azureDisk【AzureDiskVolumeSource】:
- azureFile【AzureFileVolumeSource】:
- cephfs【CephFSVolumeSource】:
- cinder【CinderVolumeSource】:
- configMap【ConfigMapVolumeSource】:
- csi【CSIVolumeSource】:
- downwardAPI【DownwardAPIVolumeSource】:
- ephemeral【EphemeralVolumeSource】:
- fc【FCVolumeSource】:
- flexVolume【FlexVolumeSource】:
- flocker【FlockerVolumeSource】:
- gcePersistentDisk【GCEPersistentDiskVolumeSource】:
- glusterfs【GlusterfsVolumeSource】:
- hostPath【HostPathVolumeSource】:
- iscsi【ISCSIVolumeSource】:
- nfs【NFSVolumeSource】:
- photonPersistentDisk【PhotonPersistentDiskVolumeSource】:
- portworxVolume【PortworxVolumeSource】:
- projected【ProjectedVolumeSource】:
- quobyte【QuobyteVolumeSource】:
- rbd【RBDVolumeSource】:
- scaleIO【ScaleIOVolumeSource】:
- secret【SecretVolumeSource】:
- storageos【StorageOSVolumeSource】:
- vsphereVolume【VsphereVirtualDiskVolumeSource】:
- activeDeadlineSeconds【integer】 :可選持續時間,如啟動在指定秒內未成功,則系統標記為失敗且殺死容器
- affinity【Affinity】 :pod的調度約束
- nodeAffinity【NodeAffinity】: pod的 描述節點關聯調度規則
-
- preferredDuringSchedulingIgnoredDuringExecution 調度器更願意將POD調度到滿足此字段指定的關聯表達式的節點
-
- podAffinity 【PodAffinity】: 描述pod關聯調度規則(例如,將此pod與其他pod放在同一節點、區域等中)
-
-
preferredDuringSchedulingIgnoredDuringExecution 調度器更願意將POD調度到滿足此字段指定的關聯表達式的節點
- WeightedPodAffinityTerm array
- PodAffinityTerm array
-
-
- podAntiAffinity【PodAntiAffinity】: 描述pod反親和力調度規則(例如,避免將此pod與其他pod放在同一節點、區域等)
-
- preferredDuringSchedulingIgnoredDuringExecution 調度器更願意將POD調度到滿足此字段指定的關聯表達式的節點
- WeightedPodAffinityTerm array
- PodAffinityTerm array
- preferredDuringSchedulingIgnoredDuringExecution 調度器更願意將POD調度到滿足此字段指定的關聯表達式的節點
-
- nodeAffinity【NodeAffinity】: pod的 描述節點關聯調度規則
- automountServiceAccountToken【boolean】: 是否應自動裝載服務帳戶令牌
- dnsConfig【PodDNSConfig】: 指定pod的DNS參數。此處指定的參數將根據DNSPolicy合並到生成的DNS配置中。
- nameservers【string array】 :DNS名稱服務器IP地址的列表,重復的名稱服務器將被刪除
- searches【string array】:用於主機名查找的DNS搜索域列表,重復的搜索路徑將被刪除
- options【PodDNSConfigOption array】:DNS解析程序選項的列表
- name【string】
- value【string】
- dnsPolicy【string】: 為pod設置DNS策略。默認為“ClusterFirst”。
- ClusterFirst :表示pod應首先使用群集DNS,除非hostNetwork為true,如果它可用,則返回默認(由kubelet確定)DNS設置
- ClusterFirstWithHostNet:表示pod應該首先使用群集DNS,如果可用,然后使用默認(由kubelet確定)DNS設置
- Default:表示pod應該使用默認(由kubelet確定)DNS設置
- None:表示pod應該使用空的DNS設置
- enableServiceLinks【boolean】:是否應將有關服務的信息注入pod的環境變量中,以匹配Docker鏈接的語法。可選:默認為true。
- ephemeralContainers【EphemeralContainer array】:該pod運行的臨時容器列表,例如執行臨時容器用來調試
- hostAliases【HostAlias array】:如果指定,這些主機和IP將被注入pod的主機文件。這僅對非hostNetwork網絡的pod有效
- hostnames【string array】
- ip【string】
- hostnames【string array】
- hostIPC【boolean】:使用主機的ipc命名空間。可選:默認為false
- hostNetwork【boolean】:使用主機的網絡命名空間。如果設置了此選項,則必須指定要使用的端口。默認為false。
- hostPID【boolean】:使用主機的pid命名空間。可選:默認為false。
- hostname【string】:指定Pod的主機名如果未指定,Pod的主機名將設置為系統定義的值
- imagePullSecrets【LocalObjectReference array】:對同一命名空間中的screct的可選引用列表,用於提取此PodSpec使用的任何鏡像。如果指定,這些screct將被傳遞給各個puller實現,供它們使用。
- name【string】:對象名稱
- name【string】:對象名稱
- initContainers【Container array】:初始化容器在容器啟動之前按順序執行。如果任何init容器出現故障,pod將被視為出現故障,並根據其重啟策略進行處理
- nodeName【string】:將這個pod調度到特定節點
- nodeSelector【object】:選擇器,該選擇器必須與要在該節點上調度的pod的節點標簽相匹配
- os【PodOS】:指定pod中容器的操作系統。如果設置了此選項,某些pod和container字段將受到限制。
- name 當前支持的值是linux和windows
- overhead【object】:表示與為給定運行時類運行pod相關的資源開銷
- preemptionPolicy【string】:用於搶占優先級較低的POD的策略,默認為PreemptLowerPriority
- priority【integer】:優先級值,值越高,優先級越高
- priorityClassName【string】:如果指定,則指示pod的優先級,如果未指定則為0,system-node-critical/system-cluster-critical 屬系統級別最高。
- readinessGates【PodReadinessGate array】:將對所有准備就緒網關進行pod准備就緒評估。當一個pod的所有容器都已准備就緒,且准備就緒網關關中規定的所有條件的狀態均為“真”時,該pod已准備就緒
- conditionType【string】:指pod條件列表中具有匹配類型的條件
- “ContainerReady”`表示pod中的所有容器是否都已就緒
- “Initialized”`表示pod中的所有init容器都已成功啟動
- “PodScheduled”`表示此pod的調度進程的狀態
- “Ready”`表示pod能夠為請求提供服務
- “ContainerReady”`表示pod中的所有容器是否都已就緒
- conditionType【string】:指pod條件列表中具有匹配類型的條件
- restartPolicy【string】:重新啟動pod內所有容器的策略,默認Always,枚舉值:Always、Never、OnFailure
- runtimeClassName【string】:指節點中的RuntimeClass對象
- schedulerName【string】:pod將由指定的調度程序調度。如果未指定,pod將由默認調度程序調度。
- securityContext【PodSecurityContext】:保存pod級別的安全屬性和通用容器設置。可選:默認為空
- serviceAccount【string】: 已廢棄,改用下面serviceAccountName
- serviceAccountName【string】:運行此pod的ServiceAccount的名稱
- setHostnameAsFQDN【boolean】:如果為true,pod的主機名將配置為pod的FQDN,而不是leaf name(默認值)
- shareProcessNamespace【boolean】:在pod中的所有容器之間共享一個進程名稱空間。默認為false,如True,容器將能夠查看同一pod中其他容器的進程並發送信號,並且每個容器中的第一個進程將不會被分配PID 1。不能同時設置HostPID和ShareProcessNamespace
- subdomain【string】:如果指定,完全限定的Pod主機名將是“<hostname><subdomain><Pod namespace>.svc.<cluster domain>”。如果未指定,pod將根本沒有域名。
- terminationGracePeriodSeconds【integer】:pod需要優雅終止的可選持續時間(秒),默認為30秒
- tolerations【Toleration array】:容忍度
- topologySpreadConstraints【TopologySpreadConstraint array】:描述了一組POD應該如何在拓撲域中分布。調度器將以遵守約束的方式調度POD。所有地形預約束均為ANDed。
- containers【Container array】:容器信息
- minReadySeconds【integer】: 新創建的pod在沒有任何容器崩潰的情況下准備就緒的最短秒數,以使其被視為可用。默認值為0(pod准備就緒后將被視為可用)
- paused【boolean】:部署是否暫停。
- progressDeadlineSeconds【integer】部署被視為失敗繼續處理失敗的部署持續時間,默認600秒,部署暫停期間不會算計。
- revisionHistoryLimit【integer】:定義保留允許回滾的歷史發布配置的數量,默認為10
- strategy【DeploymentStrategy】:用新pod替換現有pod的部署策略
- type【策略類型】:Recreate/RollingUpdate(默認)
- Recreate:“重新創建”`在創建新的POD之前殺死所有現有的POD。
- rollingUpdate【map】:滾動更新配置參數。僅當DeploymentStrategyType=RollingUpdate時顯示。
- maxSurge:當設置為30%時,在滾動更新開始時,新的ReplicaSet可以立即放大,以便新舊POD的總數不超過所需POD的130%。默認25%
- maxUnavailable:當設置為30%時,當滾動更新開始時,舊的復制集可以立即縮小到所需POD的70%。默認25%
- availableReplicas【integer】:此部署可用pod總數
- collisionCount【integer】:部署的哈希沖突計數
- conditions【DeploymentCondition array】:前狀態的最新可用觀察結果
- lastTransitionTime【time】:上次情況從一種狀態過渡到另一種狀態時間
- lastUpdateTime【time】:最近一次狀態更新的時間
- message【string】:狀態更新相關的信息
- reason【string】:條件最后更新的原因
- status【string】:變更狀態True, False, Unknown.
- type【string】:狀態類型
- observedGeneration【integer】:部署控制器觀察到的數量
- readyReplicas【integer】:當前處於就緒狀態的pod數量
- replicas【integer】:當前部署處在正在運行狀態的pod數量
- unavailableReplicas【integer】:當前部署處在不可用狀態的pod數量
- updatedReplicas【integer】:與模版中定義的實例數量對比后未終止的pod數量
參考文檔:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podspec-v1-core