• k8s配置deployment解读


    deployment 使用并管理rs ,算是更高一层的概念,这是现在比较常用的部署app的方式。deployment为pod和rs提供声明式更新(而非命令式)。支持滚动更新(rollingUpdate),支持回滚操作
    直接查看原博客:k8s配置解读
    资源配置主要分五类来定义内容

    一: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】:这主要用于内部管理,用户通常不需要设置或理解此字段。
    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】:这主要用于内部管理,用户通常不需要设置或理解此字段。
    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】:
    secretKeyRef【SecretKeySelector】:
    name【string】
    key【string】
    optional【optional】
    envFrom【EnvFromSource array】
    configMapRef【ConfigMapEnvSource】:选择的ConfigMap
    name【string】:对象名
    optional【boolean】:是否必须要ConfigMap
    prefix【string】:可选标识符,用于在ConfigMap中的每个键前添加。必须是C_IDENTIFIER.
    secretRef【SecretEnvSource】:选择的Secret
    name【string】:对象名
    optional【boolean】:是否必须要Secret
    image【string】:镜像名
    imagePullPolicy【string】:镜像pull策略,Always(总数), Never(总不), IfNotPresent (如果没有就pull)
    lifecycle【Lifecycle】:
    preStop【LifecycleHandler】:
    exec【ExecAction】:
    command【string array】
    httpGet【HTTPGetAction】:
    host【string】:
    httpHeaders【HTTPHeader array】
    name
    value
    path【string】:
    port:1-65535
    scheme【string】:http/https
    tcpSocket【TCPSocketAction】:
    postStart【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的服务的名称
    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中的容器名 ,必须一个唯一的名称
    ports【ContainerPort array】:要从容器中公开的端口列表
    containerPort【integer】: pod IP地址上要公开的端口数。这必须是有效的端口号,0 hostIP【string】: 将外部端口绑定到哪个主机IP。
    hostPort【integer】:要在主机上公开的端口。如果指定,则必须是有效的端口号0 name【string】:如果指定,则必须是IANA_SVC_NAME,并且在pod中是唯一的。pod中的每个命名端口必须具有唯一的名称。服务可以引用的端口的名称。
    protocol【string】:端口的协议。必须是UDP、TCP或SCTP。默认为“TCP”。
    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的名称匹配
    volumeMounts【VolumeMount array】:容器要使用的的文件系统。
    name【string】:这必须与Volume的名称匹配。
    mountPath【string】: 容器中挂载卷的路径。不能包含“:”。
    mountPropagation【string】:确定如何将挂载从主机传播到容器,反之亦然。未设置时,将使用MountPropagationNone。
    readOnly【boolean】:如果为true,则为只读安装,否则为读写安装(false或未指定)。默认为false。
    subPath【string】:从中装入容器卷的卷内的路径,默认为“”(卷的根目录)
    subPathExpr【string】:卷内的扩展路径,容器的卷应从中装入。默认为“”
    workingDir【string】:容器的工作目录。如果未指定,将使用容器运行时的默认值
    volumes【Volume array】:容器挂载卷
    name【string】:卷的名称。必须是DNS_LABEL,并且在pod中是唯一的
    emptyDir 【EmptyDirVolumeSource】:共享pod生命周期的临时目录
    persistentVolumeClaim【PersistentVolumeClaimVolumeSource】:
    claimName【string】:PVC名
    readOnly【boolean】
    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调度到满足此字段指定的关联表达式的节点
    PreferredSchedulingTerm array
    NodeSelector
    podAffinity 【PodAffinity】: 描述pod关联调度规则(例如,将此pod与其他pod放在同一节点、区域等中)  
    preferredDuringSchedulingIgnoredDuringExecution 调度器更愿意将POD调度到满足此字段指定的关联表达式的节点

    WeightedPodAffinityTerm array
    PodAffinityTerm array
    podAntiAffinity【PodAntiAffinity】: 描述pod反亲和力调度规则(例如,避免将此pod与其他pod放在同一节点、区域等)
    preferredDuringSchedulingIgnoredDuringExecution 调度器更愿意将POD调度到满足此字段指定的关联表达式的节点
    WeightedPodAffinityTerm array
    PodAffinityTerm array
    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】
    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主机名将是“.svc.”。如果未指定,pod将根本没有域名。
    terminationGracePeriodSeconds【integer】:pod需要优雅终止的可选持续时间(秒),默认为30秒
    tolerations【Toleration array】:容忍度
    topologySpreadConstraints【TopologySpreadConstraint array】:描述了一组POD应该如何在拓扑域中分布。调度器将以遵守约束的方式调度POD。所有地形预约束均为ANDed。
    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%

    四: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数量

  • 相关阅读:
    HTML <time> 标签
    内聚:从低到高衡量一个模块内部各个元素彼此结合的紧密程度,分别是偶然、 时间、 过程 、通信、 顺序、 功能内聚
    课题学习(四)----四元数解法
    uniapp简单实现搜索--历史记录功能
    用了那么久的Vue,你了解Vue的报错机制吗?
    D. Bandit in a City(DFS + 叶子节点数目)
    暗云III木马技术分析
    机器学习常用算法总结
    Linux文件操作
    CLIP(Contrastive Language-Image Pre-Training)简介
  • 原文地址:https://blog.csdn.net/u013078871/article/details/126824540