我们可以使用ConfigMap来实现Apollo环境的指定,具体使用方法详见如下示例yaml:

## 创建ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: apollo-server-configmap
  namespace: your-namespace
data:
  server.properties: |
    ##本地环境地址
    #env=Local
    ##开发环境地址
    env=DEV
    apollo.meta=http://xx.xx.xx.xx:8080
    ##测试环境地址
    #env=FAT
    #apollo.meta=http://xx.xx.xx.xx:8081
    ##生产环境地址
    #env=PRO
    #apollo.meta=http://xx.xx.xx.xx:8082
## 创建Deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: your-app
  name: your-app
  ## 修改此值,改成自己项目的namespace
  namespace: your-namespace
spec:
  ## 单位:秒
  progressDeadlineSeconds: 600
  ## 修改此值,部署副本数量
  replicas: 1
  ## 修改此值或者关闭配置,我们做的回滚操作并不是没有代价的,代价就是旧版本的 ReplicaSet 会被保留,但是不会继续提供服务了。当我们执行回滚操作的时候,就直接使用旧版本的 ReplicaSet。这个配置就是控制保留多少个版本的 ReplicaSet
  #revisionHistoryLimit: 1
  selector:
    matchLabels:
      app: your-app
    ## 定义升级策略,可选值,RollingUpdate(滚动升级,默认),Recreate(先将旧 Pod 下线,再启动新 Pod)
  strategy:
    rollingUpdate:
      ## 在升级过程中,最多可以创建多少个 Pod。也就是说每次滚动的步长。该值不能为0。
      maxSurge: 50%
      ## 在升级过程中,最多不可用的 pod 的数量。该值不能为0。
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: your-app
    spec:
      # 配置pod亲和性,只能允许在自己服务器
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: project.node
                    operator: In
                    values:
                      - your-project-node-one
                      - your-project-node-two
       # 配置pod的反亲和性
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - topologyKey: kubernetes.io/hostname
              labelSelector:
                matchExpressions:
                  - key: app
                    operator: In
                    values:
                      - your-app
      ## 创建数据卷
      volumes:
        - name: apollo-server-configmap
          configMap:
            ## 修改此值,ConfigMap 的key值,此值配置路径是:配置-配置字典
            name: apollo-server-config
            ## 默认情况下用于创建文件的模式位。取值范围在0到0777之间。默认值为0644
            defaultMode: 420
      imagePullSecrets:
        ## 修改此处,docker镜像仓库地址和用户名密码配置,此值配置路径是:配置-保密字典
        - name: registry-secret
      containers:
        - env:
            ## dubbo配置,注册到ZK的ip
            - name: DUBBO_IP_TO_REGISTRY
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: status.hostIP
            ## 调度中心自动注册ip
            - name: XXLJOB_IP_TO_REGISTRY
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: status.hostIP
          ## 配置镜像以及版本
          image: $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$IMAGE_VERSION
          ## 死循环命令,开启后,则pod必定启动成功,,此时可进入到pod内手动执行java -jar命令启动服务,可用于排查问题
          ## command: ["/bin/bash", "-ce", "tail -f /dev/null"]
          ## 镜像的拉取策略,可选值,Always(默认,每次pod启动都去远程pull镜像),IfNotPresent(如果本地没有,就去远程 pull 镜像),Never(只去本地获取镜像)
          imagePullPolicy: Always
          name: your-app
          ##容器的终止日志文件
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            ## 此值与spec.template.spec.volumes[0].name的值相同
            - name: apollo-server-configmap
              readOnly: true
              ## 设置配置中心环境文件挂载路径
              mountPath: /opt/settings
      ## dns 策略
      # Default:和宿主机的DNS完全一致
      # ClusterFirst:把集群的DNS写入到Pod的DNS配置,但是如果设置了HostNetwork=true,就会强制设置为Default
      # ClusterFirstWithHostNet: 把集群的DNS写入到Pod的DNS配置,不管是否设置HostNetwork
      # None: 忽略所有的DNS配置,一般来说,设置了None之后会自己手动再设置dnsConfig
      dnsPolicy: ClusterFirst
      ## pod 重启策略
      # always: 容器失效时,自动重启容器
      # OnFailure: 容器终止运行,且退出码不为0时候重启
      # Never: 不重启
      restartPolicy: Always
      ## 优雅重启配置,新pod启动等待此值后再kill老的pod,单位:秒
      terminationGracePeriodSeconds: 30
## 创建service
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: service-your-app
  name: service-your-app
  ## 修改此值,改成自己项目的namespace
  namespace: your-namespace
spec:
  ports:
    ## 修改此值,端口,xxl-job的端口
    - name: xxl-your-app
      port: 30000
      targetPort: 30000
      nodePort: 30000
  selector:
    app: your-app
  ## 负载策略,可选值,None(随机),ClientIP(ip hash)
  ## 注意:选ClientIP时,应当增加此配置spec.sessionAffinityConfig.clientIP.timeoutSeconds(默认值为 10800 秒,即 3 小时)
  sessionAffinity: None
  ## 代理策略:默认Cluster。Cluster表示:流量可以转发到其他节点上的Pod。Local表示:流量只发给本机的Pod
  ## 设置Local才能获取到客户端的真实ip,但是会出现负载不均衡现象,使用:Local模式 + Pod反亲和,一般是足够的
  # externalTrafficPolicy: Local
  ## 修改此值,service类型,可选值,ClusterIP,NodePort
  type: NodePort
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐