k8s配置文件之deployment配置

deployment 使用并管理rs ,算是更高一层的概念,这是现在比较常用的部署app的方式。deployment为pod和rs提供声明式更新(而非命令式)。支持滚动更新(rollingUpdate),支持回滚操作

资源配置主要分五类来定义内容

 

一:apiVersion【string】  APIVersion定义对象表示的版本,此处为:apps/v1

二:kind【string】 该对象所代表的REST资源类型,此处为:Deployment

三:metadata【ObjectMeta】 对象的元数据

四:specDeploymentSpec 部署所需行为的规范

五:statusDeploymentStatus 最近部署状态

 

三:metadata【ObjectMeta

  • annotationsobject注释内容 ,如:auther: xlk
  • namestring】:名称在命名空间中必须是唯一的
  • namespacestring】:选择一个命名空间
  • clusterName【string】:对象所属群集的名称。这用于区分不同集群中具有相同名称和命名空间的资源。该字段目前未设置在任何位置,如果在创建或更新请求中设置,apiserver将忽略该字段
  • creationTimestamp【Time】:表示创建此对象时的服务器时间,客户端不能设置此值,由系统填充。
  • deletionGracePeriodSeconds【integer此对象在从系统中删除之前正常终止所允许的秒数。仅在同时设置deletionTimestamp时设置。
  • deletionTimestamp【integerKubelet将通过向pod中的容器发送一个优雅的终止信号,例如请求在30秒内删除pod
  • finalizers 【array】 Finalizer是K8s资源删除流程中的一种控制机制,它在K8s对象上的存在形式其实是一系列标签,类似annotations,K8s在接收到一个资源对象删除请求时,会先在对象上打上一些标记,包括deletionTimestamp表示该对象已进入删除流程,当检测到对象上有finalizers标签(通常在资源对象的metadata字段中)时,删除流程会被挂起,直到所有finalizers标签被移除时,才继续进行删除流程,想删除该资源需要先“清理干净”它的依赖关系,即finalizers中定义的资源。

   K8s原生Finalizer示例:

    1.PVC和PV分别原生自带kubernetes.io/pvc-protectionkubernetes.io/pv-protectionfinalizers标签,其目的在于保护持久化存储不被误删,避免挂载了存储的工作负载产生问题。

    2.Namespace也是自带一个kubernetes的finalizers标签的,只不过,不同于其他资源对象的metadata.finalizers标签,ns是spec.finalizers,其作用是相同的。

  • generateNamestring】:可选的前缀名字,当Name字段没有填写时,server使用它生成一个唯一的Name。
  • generation【integer:状态的特定生成的序列号。由系统填充。只读。
  • labels【object】:标签 key-value 键值对
  • managedFields【ManagedFieldsEntry array:这主要用于内部管理,用户通常不需要设置或理解此字段
    • apiVersion【string】:此资源的版本
    • fieldsType【string】:同字段格式和版本的鉴别器。目前只有一个可能的值:“FieldsV1”
    • fieldsV1【FieldsV1】:
    • manager【string】:
    • operation【string】:
    • subresource【string】:
    • time【Time】:
  • selfLink【string】:SelfLink是一个代表这个对象本身的URL。该字段由系统自动生成,是一个只读字段
  • uid【string】: UID表示当前对象在任何时间和空间中都是唯一的。该字段在资源创建成功后由系统自动生成,PUT操作不会改变该字段的值。
  • resourceVersion【string】:用来表示当前对象的内部版本号,client端根据这个字段来判断对象是否已经发生变化。该字段由系统生成的,是一个只读字段。
  • generation【integer (int64)】:一个序列号,它表示期望状态的一次生成(generation)。目前只有replication controllers支持。该字段由系统生成的,是一个只读字段。
  • ownerReferences【OwnerReference array】:这主要用于内部管理,用户通常不需要设置或理解此字段
    • resourceVersionstring】:引用的API版本。
    • blockOwnerDeletionboolean】:如果为true,并且所有者具有“ForeGroundDelete”,则在删除此引用之前,无法从键值存储中删除所有者。默认为false。要设置此字段,用户需要所有者的“删除”权限,否则将返回422
    • controllerboolean】:如果为true,则此引用指向管理控制器。
    • kind【string】:对象类型
    • name【string】:对象的名称
    • uid【string】:对象的UID

 

三:spec【DeploymentSpec

  • replicasinteger期望的副本(replica)数量。
  • selectorLabelSelector选择器,必须与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所需行为的规范
      • containersContainer array】:容器信息
        • args【string array】:
        • command【string array】:
        • envEnvVar 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】:
            • secretKeyRef【SecretKeySelector】:
              • name【string
              • key【string
              • optional【optional】
        • envFromEnvFromSource array
            • configMapRef【ConfigMapEnvSource】:选择的ConfigMap
              • name【string】:对象名
              • optional【boolean】:是否必须要ConfigMap
            • prefix【string】:可选标识符,用于在ConfigMap中的每个键前添加。必须是C_IDENTIFIER.
            • secretRef【SecretEnvSource】:选择的Secret
              • name【string】:对象名
              • optional【boolean】:是否必须要Secret
        • imagestring】:镜像名
        • imagePullPolicy【string】:镜像pull策略,Always(总数), Never(总不), IfNotPresent (如果没有就pull)
        • lifecycleLifecycle】:
        • livenessProbeProbe】:定期检测容器的活性。如果探测失败,容器将重新启动
          • 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的服务的名称
          • 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
          • initialDelaySeconds【integer】:容器启动后的秒数,然后启动活动性探测
          • periodSeconds【integer】:执行探测的频率(秒)。默认为10秒。最小值为1。
          • successThreshold【integer】:探测失败后被视为成功的最小连续成功数。默认值为1,最小值也是1
          • tcpSocket:TCPSocket指定涉及TCP端口的操作。
            • host【string】:要连接的主机名,默认为pod IP。
            • port:容器上要访问的端口的编号或名称。数字必须在1到65535之间。名称必须是IANA_SVC_NAME
          • terminationGracePeriodSeconds【integer】:持续时间(以秒为单位),探测失败时pod需要正常终止。0表示立即停止,最小为1,需要启用ProbeTerminationGracePeriod功能,如果未设置,则使用spec.terminationGracePeriodSeconds。
          • timeoutSeconds【integer】:探测器超时后的秒数。默认为1秒。最小值为1
        • name【string】:pod中的容器名 ,必须一个唯一的名称
        • portsContainerPort 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”。
        • readinessProbeProbe: 定期检查容器中服务准备情况。如果探测失败,容器将从服务端点移除(参数同livenessProbe)
        • securityContextSecurityContext: 定义了容器运行时应该使用的安全选项
        • startupProbeProbe:如果指定,则在成功完成之前不会执行其他探测。如果此探测器失败,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的名称匹配
        • volumeMountsVolumeMount array】:容器要使用的的文件系统。
          • name【string】:这必须与Volume的名称匹配。
          • mountPath【string】: 容器中挂载卷的路径。不能包含“:”。
          • mountPropagation【string】:确定如何将挂载从主机传播到容器,反之亦然。未设置时,将使用MountPropagationNone。
          • readOnly【boolean】:如果为true,则为只读安装,否则为读写安装(false或未指定)。默认为false。
          • subPath【string】:从中装入容器卷的卷内的路径,默认为“”(卷的根目录)
          • subPathExpr【string】:卷内的扩展路径,容器的卷应从中装入。默认为“”
        • workingDir【string】:容器的工作目录。如果未指定,将使用容器运行时的默认值
      • volumesVolume array】:容器挂载卷
      • activeDeadlineSecondsinteger】 :可选持续时间,如启动在指定秒内未成功,则系统标记为失败且杀死容器
      • affinity【Affinity】 :pod的调度约束
        • nodeAffinity【NodeAffinity】: pod的  描述节点关联调度规则
        • podAffinity 【PodAffinity】: 描述pod关联调度规则(例如,将此pod与其他pod放在同一节点、区域等中)  
        • podAntiAffinity【PodAntiAffinity】: 描述pod反亲和力调度规则(例如,避免将此pod与其他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运行的临时容器列表,例如执行临时容器用来调试 
      • hostAliasesHostAlias array:如果指定,这些主机和IP将被注入pod的主机文件。这仅对非hostNetwork网络的pod有效
        • hostnames【string array
        • ip【string】
      • hostIPC【boolean】:使用主机的ipc命名空间。可选:默认为false
      • hostNetwork【boolean】:使用主机的网络命名空间。如果设置了此选项,则必须指定要使用的端口。默认为false。
      • hostPID【boolean】:使用主机的pid命名空间。可选:默认为false。
      • hostname【string】:指定Pod的主机名如果未指定,Pod的主机名将设置为系统定义的值
      • imagePullSecrets【LocalObjectReference array】:对同一命名空间中的screct的可选引用列表,用于提取此PodSpec使用的任何镜像。如果指定,这些screct将被传递给各个puller实现,供它们使用。
        • 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能够为请求提供服务
      • 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。
  • minReadySeconds【integer: 新创建的pod在没有任何容器崩溃的情况下准备就绪的最短秒数,以使其被视为可用。默认值为0(pod准备就绪后将被视为可用)
  • paused【boolean:部署是否暂停。
  • progressDeadlineSecondsinteger部署被视为失败继续处理失败的部署持续时间,默认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%

    

四:status【DeploymentStatus
  •  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

posted @ 2022-04-04 12:17  大切切  阅读(5896)  评论(0编辑  收藏  举报