k8s中deployment模板

一、清单文件

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    version: "1.1.6"
  labels:
    k8s-app: deployment-nginx
  name: deployment-nginx
  namespace: test
spec:
  minReadySeconds: 30
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 5
  selector:
    matchLabels:
      dyapp: nginx
      dyitem: zcy-test
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        dyapp: nginx
        dyitem: zcy-test
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - preference:
              matchExpressions:
              - key: dylabel_node_memorysize
                operator: Gt
                values:
                - "8"
            weight: 1
      containers:
      - name: nginx
        env:
        - name: MY_ENV
          value: PRO
        image: nginx:1.21.6
        imagePullPolicy: IfNotPresent
        lifecycle:
          postStart:
            exec:
              command:
              - /bin/sh
              - -c
              - echo 'Container was started'
          preStop:
            exec:
              command:
              - /bin/sh
              - -c
              - sleep 10
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /index.html
            port: 80
            scheme: HTTP
          initialDelaySeconds: 60
          periodSeconds: 3
          successThreshold: 1
          timeoutSeconds: 2
        ports:
        - containerPort: 80
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /index.html
            port: 80
            scheme: HTTP
          initialDelaySeconds: 5
          periodSeconds: 3
          successThreshold: 3
          timeoutSeconds: 2
        resources:
          limits:
            cpu: 500m
            ephemeral-storage: 2000Mi
            memory: 512Mi
          requests:
            cpu: 200m
            ephemeral-storage: 1000Mi
            memory: 512Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /tmp
          name: ephemeral
      dnsConfig:
        searches:
        - zcy.svc.cluster.local
        - test.svc.cluster.local
        - svc.cluster.local
        - cluster.local
      dnsPolicy: ClusterFirst
      hostAliases:
      - hostnames:
        - gray.mylocal.cn
        ip: 192.168.6.16
      hostNetwork: false
      imagePullSecrets:
      - name: tcr-dyzcy-test-pull
      initContainers:
      - name: setsysctl
        command:
        - sh
        - -c
        - |
          sysctl -w net.core.somaxconn=65535
          sysctl -w net.ipv4.ip_local_port_range="1024 65535"
          sysctl -w net.ipv4.tcp_tw_reuse=1
          sysctl -w fs.file-max=1048576
        image: busybox
        imagePullPolicy: IfNotPresent
        securityContext:
          privileged: true
      # nodeName: 192.168.3.12
      # nodeSelector:
      #   dyarea: wan
      #   dyenv: prod
      priority: 100
      preemptionPolicy: IfRequired
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: sa-imzcy
      serviceAccountName: sa-imzcy
      shareProcessNamespace: false
      terminationGracePeriodSeconds: 30
      tolerations:
      - effect: NoSchedule
        key: dynoderole
        operator: Equal
        value: gateway
      volumes:
      - name: ephemeral
        emptyDir: {}

二、详解

(1)deployment:

在此级别下,包含如下字段:

apiVersion:指定使用的 Kubernetes API 的版本。

kind:指定该资源的类型。

metadata:指定该资源的元数据,例如 name、namespace 等。

spec:指定该资源的具体配置信息。

(2)deployment.metadata

在此级别下,包含如下字段:

annotations:指定 Deployment 的注释信息。这些注释信息可以提供一些额外的描述、标记或关联其他资源等。它们对于扩展 Kubernetes 功能、监控和自动化过程非常有用。

labels:指定 Deployment 拥有的标签。后续可以根据标签查找匹配的 deployment 资源。

name:指定 Deployment 的名称。

namespace:指定 Deployment 所属的命名空间。

(3)deployment.spec

在此级别下,包含如下字段:

minReadySeconds:新创建的pod在没有任何容器异常的情况下准备就绪的最小秒数,以便被视为可用。默认值为0,即 pod 只要 ready 后马上被视为 available 。pod available 后才会开始终止老 pod 然后创建下一个新的pod。

paused:指示控制器是否暂停对该 Deployment 的操作。默认值为 false ,当设置为 true 时,Deployment 的更新将会暂停,不会进行新的 Replication Controller 的创建或删除。

progressDeadlineSeconds:指定 Deployment 控制器等待控制器进度的时间。如果超过这个时间,deployment 控制器将认为升级已经失败,并暂停升级。

replicas:指定要创建的 Pod 副本数量。

revisionHistoryLimit:指定保留的旧 ReplicaSets 历史记录的数量。旧的 ReplicaSet 将保留以便支持回滚操作。

selector:用来选择属于 Deployment 的 Pods 的标签选择器。只有具有匹配标签的 Pod 才会被该 Deployment 控制器管理。

strategy:指定用新 Pod 替换旧 Pod 时的策略,默认值为 RollingUpdate(滚动更新),当设置为 Recreate 时将先停掉所有老的 pod 再创建新 pod 。

template:定义 Pod 模板。它和 Pod 的语法规则完全相同。只是这里它是嵌套的,因此不需要指定 apiVersion 或 kind。

(4)deployment.spec.template

在此级别下,包含如下字段:

metadata:指定 pod 的元数据信息。由于这里是作为模板定义受控制器管理的pod,所以无需设置 name 和 namespace,只需要设置 annotations 和 lables 即可。

spec:指定该资源的具体配置信息。

(5)deployment.spec.template.spec

在此级别下,包含如下字段:

activeDeadlineSeconds:设置 Pod 的活动截止时间。它指定了一个整数值(以秒为单位),表示自Pod启动之时起,Pod可以持续运行的最长时间。一旦超过这个时间,Kubernetes将尝试终止该 Pod。默认值为0,表示不限制运行时间。

affinity:亲和性字段用于定义 Pod 与其他 Pod 或节点之间的关系和偏好。它可以帮助将相关的 Pod 放置在一起或将 Pod 分散到不同的节点上,以满足特定的调度需求和策略。

containers:定义 Pod 中包含的一个或多个容器。每个容器都有自己的镜像、环境变量、命令、参数和其他配置。

dnsConfig:用于定义 Pod 的 DNS 配置。

dnsPolicy:用于指定 Pod 的 DNS 策略。Default:表示使用默认的 DNS 策略。Pod 将使用集群中的 DNS 配置,通常是由 kubelet 进程维护的 DNS 服务器。ClusterFirst:表示优先使用集群内部的 DNS 解析。Pod 首先会使用集群中的 DNS 服务器来解析域名。如果无法解析,则会尝试使用外部的 DNS 服务器来解析。ClusterFirstWithHostNet:与 ClusterFirst 类似,但对于使用 HostNetwork 的 Pod,会直接使用主机网络的 DNS 配置而非集群内部的 DNS 配置。

hostAliases:用于在 Pod 中设置主机别名(相当于直接修改 hosts 文件)。

hostNetwork:指定 Pod 是否应该使用主机网络。默认情况下,每个 Pod 都会拥有自己的网络命名空间,Pod 内的容器只能通过 Pod 网络访问其他容器和外部服务。但是,当 hostNetwork 被设置为 true 时,Pod 将使用主机网络,即容器将直接绑定到主机上的网络接口。

imagePullSecrets:指定 Pod 中需要拉取私有容器镜像时所需的凭据。

initContainers:用于定义需要在主容器启动之前执行的初始化容器。定义多个初始化容器时将在主容器启动之前按顺序依次执行,每个初始化容器都必须成功完成才能继续主容器的启动过程。

nodeName:用于指定 Pod 运行的节点(node)。当你需要将特定的 Pod 调度到集群中的某个特定节点上时,可以使用 nodeName 字段来指定该节点的名称。

nodeSelector:用于通过标签选择器(label selector)来指定 Pod 所需的节点(node)。使用 nodeSelector 字段可以将特定的 Pod 调度到具有特定标签的节点上。

priority:优先级值。调度器(scheduler)使用优先级来确定哪些 Pod 优先被调度。具有更高优先级的 Pod 在资源紧张或节点资源不足时,将更有可能被调度到可用的节点上,以确保其优先运行。各种系统组件使用此字段查找 Pod 的优先级。启用 Priority Admission Controller 后,禁止用户设置此字段。准入控制器从 PriorityClassName 中填充此字段。数值越高,优先级越高。

preemptionPolicy:用于指定 Pod 的抢占策略。抢占是指在资源不足时,调度器可以暂停(预先抢占)低优先级的 Pod,以便为具有更高优先级的 Pod 留出足够的资源。preemptionPolicy 字段有两个可能的取值:PreemptLowerPriority:表示当资源不足时,具有较低优先级的 Pod 可以被抢占,以便为具有更高优先级的 Pod 分配资源。Never:表示 Pod 不会被抢占,即使资源不足。

restartPolicy:用于指定 Pod 中容器的重启策略。在 Kubernetes 中,一个 Pod 可能包含多个容器,restartPolicy 指定了当其中一个容器意外终止时,该容器应如何被重启。Always:表示当容器终止时,无论是由于错误、失败还是其他原因,Kubernetes 都会自动重启该容器。OnFailure:表示当容器以非零状态(即失败状态)终止时,Kubernetes 会自动重启该容器。如果容器正常退出(状态码为0),则不会触发重启。Never:表示当容器终止时,Kubernetes 不会自动重启该容器。

schedulerName:用于指定 Kubernetes 中用于调度 Pod 的调度器的名称。通过设置这个字段,你可以将特定的 Pod 分配给自定义的调度器,而不是集群默认的调度器。

securityContext:用于设置容器的安全上下文,以控制容器的安全属性和行为。通过 securityContext 字段,你可以指定容器运行时的一些安全配置,如用户 ID、访问权限等。

serviceAccount:用于为 Pod 指定所使用的 Service Account。Service Account 是 Kubernetes 中的一种身份验证方式,它用于授予 Pod 访问 Kubernetes API 和其他资源的权限。

serviceAccountName:用于为 Pod 指定所使用的 Service Account。

shareProcessNamespace:指定是否与其他容器共享进程命名空间。当将 shareProcessNamespace 设置为 true 时,Pod 中的所有容器将共享相同的进程命名空间,这意味着它们可以看到彼此的进程并进行相互通信。

terminationGracePeriodSeconds:指定在终止容器之前等待的时间(以秒为单位)。它定义了容器在接收到终止信号后的优雅终止期限。

tolerations:定义哪些污点可以被容忍。Pod 只有在它的 tolerations 包含了在节点上设置的污点后,才能在该节点上调度和运行。

volumes:定义为容器提供存储卷的配置。

(6)deployment.spec.template.spec.containers

在此级别下,包含如下字段:

args:指定容器的命令行参数。容器启动时会执行指定的命令,并将 args 中的参数传递给该命令。

command:指定容器的入口点命令。将覆盖镜像中定义的默认命令,从而指定容器启动时要执行的特定命令。

env:指定容器的环境变量。

image:指定使用的镜像及版本。

imagePullPolicy:指定 Kubernetes 在创建或更新 Pod 时如何拉取镜像。Always:始终拉取最新版本的镜像。IfNotPresent:仅在本地不存在该镜像时才拉取。Never:仅使用本地已存在的镜像,不会尝试从远程仓库中拉取。

lifecycle:指定容器的生命周期钩子。postStart:在容器创建后立即执行的操作。preStop:在容器终止之前执行的操作,例如在容器终止前执行一些清理工作。

livenessProbe:指定容器的存活健康检查机制。

name:指定容器的名称。

ports:定义 Pod 中容器的端口映射的字段。

readinessProbe:指定容器的就绪健康检查机制。

resources:定义 Pod 或容器的资源需求和限制的字段。通过 resources 字段,我们可以指定 Pod 或容器在集群中运行时需要的计算资源,如 CPU 和内存,并可以对其进行限制,以确保资源的合理分配和管理。

startupProbe:用于检测容器启动过程中是否成功。它与 livenessProbe 和 readinessProbe 类似,但是它的目的是在容器启动期间进行健康检查,而不是在容器运行时。

terminationMessagePath:指定容器终止时终止消息的存储路径。当容器终止时,Kubernetes 将会将终止消息写入到指定路径的文件中。默认情况下,终止消息会被写入到容器的 /dev/termination-log 文件中。

terminationMessagePolicy:指定容器终止消息的策略。File:表示终止消息将被写入到文件中,并由 terminationMessagePath 字段指定的路径。FallbackToLogsOnError:表示终止消息将被写入到容器的日志中。如果写入终止消息到文件失败,Kubernetes 将会回退到将终止消息写入到日志中。

volumeMounts:用于将存储卷(Volumes)与容器内的特定路径进行挂载。它定义了容器中的路径和存储卷之间的映射关系。

相关推荐
vvw&7 分钟前
Docker Build 命令详解:在 Ubuntu 上构建 Docker 镜像教程
linux·运维·服务器·ubuntu·docker·容器·开源
是芽芽哩!2 小时前
【Kubernetes 指南】基础入门——Kubernetes 基本概念(二)
云原生·容器·kubernetes
m0_663234012 小时前
云原生是什么
云原生
X__cheng3 小时前
【C++】list模拟实现
c++·容器
怡雪~3 小时前
k8s使用ceph
ceph·容器·kubernetes
运维小文4 小时前
K8S中的服务质量QOS
云原生·容器·kubernetes
华为云开发者联盟5 小时前
Karmada v1.12 版本发布!单集群应用迁移可维护性增强
云原生·kubernetes·开源·容器编排·karmada
Hadoop_Liang5 小时前
Kubernetes Secret的创建与使用
云原生·容器·kubernetes
-指短琴长-5 小时前
Docker之技术架构【八大架构演进之路】
docker·容器·架构
元气满满的热码式5 小时前
K8S集群部署实战(超详细)
云原生·容器·kubernetes