K8S部署Pod的deployment.yml配置示例

k8s使用Deployment(基于deployment.yml配置文件)创建Pod实例

        Deployment作为Pod的控制器,管理部署Pod实例。早期版本使用RC(Replication Controller)对Pod副本数量进行管理,在新的版本中官方推荐使用Deployment来代替RC,Deployment相对RC有这些好处

  • Deployment拥有更加灵活强大的升级、回滚功能,并且支持滚动更新
  • 使用Deployment升级Pod只需要定义Pod的最终状态,k8s会为你执行必要的操作(RC要自己定义如何操作)

1、centos-deployment.yml配置文件创建centos系统Pod实例

# 部署类型为 Deployment;
kind: Deployment
apiVersion: apps/v1

metadata:
  name: centos-test
  # 名称空间;
  namespace: default
  labels:
    k8s-app: centos-test
spec:
  # 运行容器数量;
  replicas: 1
  selector:
    matchLabels:
      k8s-app: centos-test
  template: 
    metadata:
      name: centos-test
      labels:
        k8s-app: centos-test
    spec:
      containers:
      # 运行容器名称;
      - name: centos-test
        # 镜像地址,注意必须使用天宫 CCR 镜像仓库地址;
        image: 'harbor.dcos.guangz.unic.local/common/centos-7.6:tools'
        command: ["/bin/bash", "-ce", "tail -f /dev/null"]
        # 镜像拉取策略:Always、IfNotPresent、Never;
        imagePullPolicy: Always
        resources:
          requests: 
            memory: "512Mi" 
            cpu: "200m" 
          limits: 
            memory: "512Mi" 
            cpu: "200m"
    # 容器重启策略:Always、OnFailure、Never
    restartPolicy: Always

2、app-deployment.yml配置文件创建app应用的Pod实例

# @description: Deployment配置模板,针对无状态的服务(如Java Web应用,Nginx等),
#  推荐使用Deployment方式部署;
# @author:aa
kind: Deployment
apiVersion: apps/v1
 
# Deployment元信息
metadata:
  name: app-web # 替换为您自己的deployment名称,名称不能使用下划线;
  namespace: default 
  labels:
    k8s-app: app-web # deployment标签,k-v格式,可以设置多个;
 
# Deployment管理的Pod信息
spec:
  replicas: 1 # 部署的应用服务数量;
  revisionHistoryLimit: 5 # rs历史版本保留数量;
  selector:
    matchLabels:
      k8s-app: app-web # Pod选择器,该Deployment管理哪些Pod;
  template:                    
    metadata:
      name: app-web # Pod名称,名称不能使用下划线;
      labels:
        k8s-app: app-web # pod标签,k-v格式,可以设置多个,上层Deployment、StatefulSet根据该值选择相应的Pod;
    spec:
      containers:
        - name: app-web # 容器名称,名称不能使用下划线;
          image: 'harbor.dcos.guangz.unic.local/gd-gis/app-web:1.1' # 容器镜像信息;
          imagePullPolicy: Always # 镜像拉取策略;
          # 容器资源设置;
          resources:
            # k8s调度Pod时使用requests设置的资源需求计算;
            requests:        
              memory: "64Mi" # 容器可使用的内存资源,单位byte,支持的单位:Ei、Pi、Ti、Gi、Mi、Ki;     
              cpu: "250m" # 容器使用的CPU资源,单位个,250m代表该容器需要250/1000=0.25个CPU;
            # 设置Cgroups时使用limits值计算,推荐requests和limits保持一致;
            limits:        
              memory: "128Mi"        
              cpu: "500m"
          # 容器健康检查(可选配置,借助spring boot actuator实现,P.S.K8S默认健康检查机制为检查容器是否处于running状态,可能不能反应出应用真实的运行状态);
          livenessProbe:
            httpGet:
              path: "/actuator/health"
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 60 # 容器启动120秒之后开始第一次健康检查,配置合理的时间,确保服务成功启动;
            periodSeconds: 20 # 每个20秒执行一次健康检查
            timeoutSeconds: 3 # 超时时间,3秒
            successThreshold: 1 # 成功一次,代表容器健康;
            failureThreshold: 5 # 连续失败五次,代表容器运行异常,会导致Pod自动重启;
      restartPolicy: Always # Pod重启策略;

 3、nginx-deployment.yml配置文件创建nginx的Pod实例

kind: Deployment
apiVersion: apps/v1

# Deployment元信息
metadata:
  name: nginx # 替换为您自己的deployment名称,名称不能使用下划线;
  namespace: default 
  labels:
    k8s-app: nginx # deployment标签,k-v格式,可以设置多个;
  
# Deployment管理的Pod信息
spec:
  replicas: 1  # 部署的应用服务数量;
  revisionHistoryLimit: 5 # rs历史版本保留数量;
  selector:
    matchLabels:
      #app: nginx
      k8s-app: nginx # Pod选择器,该Deployment管理哪些Pod;
  strategy:
    type: RollingUpdate
  template:
    metadata:
      name: nginx # Pod名称,名称不能使用下划线;
      labels:
        #app: nginx
        k8s-app: nginx # pod标签,k-v格式,可以设置多个,上层Deployment、StatefulSet根据该值选择相应的Pod;
    spec:
      containers:
        - image: 'harbor.dcos.guangz.unic.local/gd-gis/nginx:1.18.0' # 容器镜像信息;
          imagePullPolicy: Always # 镜像拉取策略;
          name: nginx # 容器名称,名称不能使用下划线;
      imagePullSecrets:
        - name: default-secret

 


版权声明:本文为davidhhs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。