Bootstrap

kubernetes发布应用时常用的Deployment.yaml和Service.yaml文件

一、版本要求

  示例文件为1.20的kubernetes版本,如果版本不同,注意修改相应的内容,一般修改“apiVersion”字段即可,具体api版本需求参考: Kubernetes API

二、Deployment.yaml文件

2.1、常用示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: $NAME
  namespace: $NAMESPACE
  labels:
    k8s.eip.work/layer: xxx
    k8s.eip.work/name: xxx
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s.eip.work/layer: xxx
      k8s.eip.work/name: xxx
  template:
    metadata:
      labels:
        k8s.eip.work/layer: xxx
        k8s.eip.work/name: xxx
      annotations:
        deployment.kubernetes.io/deploymentMode: aaa
    spec:
      containers:
        - name: $NAME
          image: '$IMAGES'
          imagePullPolicy: Always
          ports:
            - name: http-http
              protocol: TCP
              containerPort: 80
          resources:
            requests:
              cpu: '0.1'
              memory: 120Mi
            limits:
              cpu: '0.5'
              memory: 500Mi
          livenessProbe:
            initialDelaySeconds: 60
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1	
            failureThreshold: 3
            tcpSocket:
              port: 80
          readinessProbe:
            httpGet:
              scheme: HTTP
              path: /
              port: 80
            initialDelaySeconds: 60
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          startupProbe:				#启动探针
            httpGet:
              scheme: HTTP
              path: /
              port: 80
            initialDelaySeconds: 60
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
      imagePullSecrets:
        - name: $REGISTRY-SECRET-NAME
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%

2.2、字段解释

2.2.1、imagePullPolicy

imagePullPolicy:镜像拉取策略,默认值是“IfNotPresent”

  • IfNotPresent:
    优先使用本地镜像,如果本地存在镜像,则使用本地的镜像
  • Always:
    总是拉取仓库镜像,如果仓库中的镜像与本地不同,那么仓库中的镜像会被拉取并覆盖本地;如果仓库中的镜像与本地一致,那么不会拉取镜像;如果仓库不可用,那么pod运行失败
  • Never:
    只使用本地镜像,如果本地不存在,则pod运行失败

2.2.2、resources

resources:配置容器资源配额,配置容器的CPU和内存资源,当命名空间下的容器没有设置resources时,就使用LimitRange设置的值作为容器的默认值(Limits的值不能小于容器的Requests值,否则创建容器时会报错,从而导致创建失败)

          resources:
            requests:				#设置各容器需要的最小资源
              cpu: '0.1'				#1核=1000m,此处为100m
              memory: 120Mi
            limits:				#限制运行时容器占用的资源
              cpu: '0.5'
              memory: 500Mi

2.2.3、livenessProbe、readinessProbe、startupProbe

  • livenessProbe:
    存活探针:检测容器状态是否为running,如果LivenessProbe探针探测失败,则kubelet会杀死容器,并且容器将根据其重启策略进行处理。如果未配置存活探针,则默认状态为Success
  • readinessProbe:
    就绪探针:检测容器内服务是否启动完成,如果就绪态探测失败,端点控制器将从与Pod匹配的所有服务的端点列表中删除该Pod的IP地址。初始延迟之前的就绪态的状态值默认为Failure。如果容器不提供就绪态探针,则默认状态为Success
  • startupProbe:
    启动探针:容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被禁用,直到此探针成功为止。如果启动探测失败,kubelet将杀死容器,而容器依其重启策略进行重启。如果容器没有提供启动探测,则默认状态为Success
         livenessProbe:				#存活探针
           initialDelaySeconds: 60				#延迟探测时间(秒),在k8s第一次探测前等待秒
           timeoutSeconds: 1				#超时时间
           periodSeconds: 10				#执行探测频率(秒),每隔秒执行一次
           successThreshold: 1				#健康阀值 
           failureThreshold: 3				#不健康阀值 
           tcpSocket:				#协议
             port: 80				#端口

存活、就绪、启动探针配置模板如上代码所示,探测方式有三种:exec、http、tcp(详细配置可参考官方文档:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)

  • exec
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
  • http
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3
  • tcp
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

2.2.4、imagePullSecrets

imagePullSecrets:配置私有仓库信息,“$REGISTRY-SECRET-NAME”表示配置私有仓库登陆账号信息的Secret的name名称

      imagePullSecrets:
        - name: $REGISTRY-SECRET-NAME

2.2.5、strategy

strategy:升级策略,指定用于用新Pods替换旧Pods的策略,可以是“Recreate”或“RollingUpdate”,默认值是“RollingUpdate”(https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/#strategy)

  • Recreate
    在创建新 Pods 之前,所有现有的 Pods 会被杀死
  • RollingUpdate
    采取滚动更新的方式更新Pods。你可以指定maxUnavailable(最大不可用)和maxSurge(最大峰值)来控制滚动更新过程
     1. maxUnavailable:是一个可选字段,用来指定更新过程中不可用的Pod的个数上限。该值可以是绝对数字(例如,5),也可以是所需Pods的百分比(例如,10%)。百分比值会转换成绝对数并去除小数部分。如果maxSurge为0,则此值不能为0。默认值为25%
     2. maxSurge:是一个可选字段,用来指定可以创建的超出期望Pod个数的Pod数量。此值可以是绝对数(例如,5)或所需Pods的百分比(例如,10%)。如果MaxUnavailable为0,则此值不能为0。百分比值会通过向上取整转换为绝对数。此字段的默认值为25%
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%


三、Service.yaml文件

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s.eip.work/layer: xxx
    k8s.eip.work/name: xxx
  name: $NAME
  namespace: $NAMESPACE
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    k8s.eip.work/layer: xxx
    k8s.eip.work/name: xxx
  type: ClusterIP

type:服务类型,有ClusterIP、NodePort、LoadBalancer、ExternalName



-----------日常记录---------------

;