k8s配置文件之deployment配置
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