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容器里的配置
k8s yaml文件简单分析
最新推荐文章于 2024-05-22 19:00:00 发布