k8s yaml文件简单分析

apiVersion: apps/v1 # 指定api版本标签
kind: Deployment # 定义资源的类型/角色】,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata: # 定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  generation: 1 #
  labels: # 定义资源标签(Pod的标签)
    app: webapicloud-server-xxx
  name: webapicloud-server-xxx
spec: # 定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  minReadySeconds: 60 # 滚动升级时60s后认为该pod就绪,默认0s,如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了,在某些极端情况下可能会造成服务不正常运行
  progressDeadlineSeconds: 600 # 部署升级的最大时间,如果没完成将变成超时状态
  replicas: 1 # 定义副本数量
  revisionHistoryLimit: 10 # 定义保留几个历史版本记录
  selector: # 定义标签选择器
    matchLabels: # 定义匹配标签
      app: webapicloud-server-xxx # 匹配上面的标签,需与上面的标签定义的app保持一致
  strategy:
    rollingUpdate: # 滚动升级配置
      maxSurge: 25%  # 滚动升级时会先启动25%个pod
      maxUnavailable: 0 # 滚动升级时允许的最大Unavailable的pod个数
    type: RollingUpdate
  template: #【定义业务模板】,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:
        actuator: "true"
        app: webapicloud-server-xxx # 模板名称
    spec:
      containers: # 定义容器,一个name定义一个容器(要containers下第一级的,也就是和env同级才是,这里有三个容器:webapicloud-server-xxx、filebeat、bigdata-filebeat
      - env:
        - name: LANG
          value: C.UTF-8
        - name: logRootPath
          valueFrom: # 配置来源
            configMapKeyRef: # 类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
              key: log_path
              name: launch-options
        - name: spring.profiles.active
          valueFrom:
            configMapKeyRef:
              key: spring_profiles_active
              name: launch-options
        - name: JAEGER_COLLECTOR
          valueFrom:
            secretKeyRef: # 类型为secret的存储卷,挂载预定好的密钥到容器内部
              key: jaeger_collector_addr
              name: iot-cloud-secret
        - name: eurekaUrl
          valueFrom:
            secretKeyRef:
              key: eureka_url
              name: iot-cloud-secret
        - name: configCenterProfile
          valueFrom:
            configMapKeyRef:
              key: config_center_profile
              name: launch-options
        - name: configCenterUsername
          valueFrom:
            secretKeyRef:
              key: config_center_username
              name: iot-cloud-secret
        - name: configCenterPassword
          valueFrom:
            secretKeyRef:
              key: config_center_password
              name: iot-cloud-secret
        - name: SERVER_PORT  # 对外暴露的端口
          value: "xxx"
        image: registry-vpc.cn-shenzhen.aliyuncs.com/china-iot/webapicloud-server-xxx:latest # 容器使用的镜像地址
        imagePullPolicy: IfNotPresent # [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,没有则下载镜像,Nerver表示仅使用本地镜像
        lifecycle: # 生命周期管理
          preStop: # 容器关闭之前运行的任务,这下面是去注销服务
            exec:
              command:
              - /bin/sh
              - -c
              - 'curl -X "POST" "http://localhost:9081/actuator/service-registry/instance-status"
                -H "Content-Type: application/json" -d "OUT_OF_SERVICE" && sleep 40'
        livenessProbe: # pod内容器健康检查的设置
          failureThreshold: 3 # 最多失败几次
          httpGet: # 通过httpget检查健康,返回200-399之间,则认为容器正常(这里是调用服务集成的健康检查接口
            path: /actuator/health
            port: 9081
            scheme: HTTP
          initialDelaySeconds: 90 # 容器启动完成后首次探测的时间,单位为秒
          periodSeconds: 10 # 对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
          successThreshold: 1 # 表示探针的成功的阈值,在达到该次数时,表示成功
          timeoutSeconds: 3 # 对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
        name: webapicloud-server-xxx # 容器名称
        ports: # 需要暴露的端口库号列表
        - containerPort: 9081
          name: monitor-port
          protocol: TCP
        - containerPort: 8080
          name: service-port
          protocol: TCP
        readinessProbe: # 就绪探针  根据应用特性执行command或调用httpGet去判断这个pod是否启动成功
          failureThreshold: 3 # 失败最大次数
          httpGet: # 这里是使用服务集成的健康检查充当就绪探针
            path: /actuator/health
            port: 9081
            scheme: HTTP
          initialDelaySeconds: 90
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        resources: # 资源限制和请求的设置
          limits: # 资源限制的设置
            cpu: "1" # Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
            memory: 2Gi # 内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
          requests: # 容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
            cpu: "1" # CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
            memory: 2Gi # 内存使用量 
        terminationMessagePath: /dev/termination-log # 容器的异常终止消息的路径,默认在 /dev/termination-log 下
        terminationMessagePolicy: File # 默认情况容器退出时,退出信息会从文件中读取
        volumeMounts: # 挂载到容器内部的存储卷配置
        - mountPath: /data/logs # 存储卷在容器内mount的绝对路径,应少于512字符
          name: logs # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      - args: # args 执行下面配置作为命令执行
        - -c
        - /opt/filebeat/filebeat.yml
        - -e
        env: # 这里是定义一个新容器 filebeat,并配置环境变量
        - name: pod_ip
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.podIP
        - name: pod_name
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        - name: service_name
          value: webapicloud-server-xxx # 日志注册名
        image: elastic/filebeat:7.10.1 # 使用es镜像
        imagePullPolicy: IfNotPresent
        name: filebeat # 容器名
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 200m
            memory: 200Mi
        securityContext:
          runAsUser: 0
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts: # 将会去下面两个目录做日志收集
        - mountPath: /opt/filebeat/
          name: config # 配置一个共享卷,将会在最下方有个相同name的配置对应
        - mountPath: /data/logs # 我们服务实际日志存储路径
          name: logs
      - args:
        - -c
        - /opt/filebeat/filebeat.yml
        - -e
        env: # 配置新容器 bigdata-filebeat
        - name: pod_ip
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.podIP
        - name: pod_name
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        - name: service_name
          value: webapicloud-server-xxx
        image: elastic/filebeat:7.10.1
        imagePullPolicy: IfNotPresent
        name: bigdata-filebeat
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 200m
            memory: 200Mi
        securityContext:
          runAsUser: 0
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /opt/filebeat/
          name: iotcore-bg-filebeat
        - mountPath: /data/logs
          name: logs
      dnsPolicy: ClusterFirst # Default Pod继承所在宿主机的设置,也就是直接将宿主机的/etc/resolv.conf内容挂载到容器中、 ClusterFirst 默认配置,优先在集群所在域查询,如果没有才会转发到上游DNS
      nodeSelector: # 设置nodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定 rancher上在resouces里
        node-pool: iot3
      restartPolicy: Always # [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 60 # k8s将会给应用发送SIGTERM信号,可以用来正确、优雅地关闭应用,默认为30秒
      tolerations:
      - effect: NoSchedule
        key: node-pool
        operator: Equal
        value: iot3
      volumes:
      - emptyDir: {}
        name: logs
      - configMap: # 会在rancher里filebeat容器的Storage界面显示
          defaultMode: 420
          items:
          - key: filebeat.yml
            path: filebeat.yml
          name: iot3-filebeat # 挂载configMap里的配置 给elk提供日志的配置
        name: config # 对应filebeat容器里的配置
      - configMap:
          defaultMode: 420
          items:
          - key: filebeat.yml
            path: filebeat.yml
          name: iotcore-bigdata-filebeat-configmap # configMap里给大数据提供日志的配置
        name: iotcore-bg-filebeat # 对应bigdata-filebeat容器里的配置

你可能感兴趣的:(kubernetes,java,spring)