

apiVersion: apps/v1
kind: Deployment
metadata:
  name: projectname-deployment
spec:
  replicas: 1
  ###更新:容器准备完成之后,延迟60s,配合strategy.maxUnavailable: 0时,可以忽略###
  #minReadySeconds: 60
  
  ###600s之后如果还没有发布成功,就打上标签,不做任何操作,必须大于minReadySeconds###
  #progressDeadlineSeconds: 600
  strategy:
    ###升级方式,默认的方式###
    type: RollingUpdate 
    ###严格控制,每次升级一个pod,不可用状态为0个pod###
    rollingUpdate:
      ###滚动升级时会先启动1个pod###
      maxSurge: 1
      ###滚动升级时允许的最大不可用的pod个数###      
      maxUnavailable: 0
  
  
  
  selector:
    matchLabels:
      app: projectname
  template:
    metadata:
      annotations:
        ###修改值,用于deployment自动更新###
        cn.aibianli.k8s.version: updateversion
        ###禁用istio自动注入sidecar###        
        #sidecar.istio.io/inject: "false"
         
      labels:
        app: projectname
        version: v1
    spec:
      containers:
      - name: projectname
        image: 10.98.239.102:5000/projectname:randomversion
          ###设置tomcat可以使用的cpu和内存###
        resources:
          limits:
            cpu: "1"
            memory: 2Gi
          requests:
            cpu: "0.5"
            memory: 1Gi
        ###设置tomcat的端口###    
        ports:
        - containerPort: 8080
        ###
        imagePullPolicy: IfNotPresent
        env:
        - name: JAVA_OPTS
          ###JDK8 以上的版本不要设置 -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap 这两个参数###
          value: "-Xms1000m -Xmx2000m -Dfile.encoding=utf-8 -Dsun.jnu.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
        ###设置时区###
        - name: TZ
          value: Asia/Shanghai          
          
          
        
        
        
        ######健康状态检查 开始######
        
        ###kubernetes认为该pod是存活的,不存活则需要重启###
        livenessProbe: 
         
          httpGet: ###HTTP状态码在200和399之间,则认为容器运转正常###
            path: projectliveurl 
            port: 8080
            scheme: HTTP
          ###
          initialDelaySeconds: 60 ###容器启动后第一次执行探测是需要等待多少秒###
          timeoutSeconds: 5 ###探测超时时间.默认1秒，最小1秒###
          successThreshold: 1 ###探测失败后,最少连续探测成功多少次才被认定为成功.默认是1.对于liveness必须是1.最小值是1.###
          failureThreshold: 5 ###探测成功后,最少连续探测失败多少次才被认定为失败.默认是3.最小值是1.###
          periodSeconds: 10  ###执行探测的频率.默认是10秒,最小1秒.###  
          #也可以用这种方法  
          #exec: 执行命令的方法进行监测，如果其退出码不为0，则认为容器正常  
          #  command:  
          #    - cat  
          #    - /tmp/health  
          #也可以用这种方法  
          #tcpSocket: //通过tcpSocket检查健康   
          #  port: number  

          
        ###kubernetes认为该pod是启动成功的####
        readinessProbe: 
          httpGet:
            path: projectliveurl 
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 50  ###容器启动后第一次执行探测是需要等待多少秒###
          timeoutSeconds: 5 ###探测超时时间.默认1秒，最小1秒###
          successThreshold: 1 ###探测失败后,最少连续探测成功多少次才被认定为成功.默认是1.对于liveness必须是1.最小值是1.###
          failureThreshold: 5 ###探测成功后,最少连续探测失败多少次才被认定为失败.默认是3.最小值是1.###
          periodSeconds: 10  ###执行探测的频率.默认是10秒,最小1秒.###  
        ######健康状态检查 结束######
          
          
        volumeMounts:
        ###挂载点###
        - mountPath: /usr/local/tomcat/logs
          ###对应下面卷 cephfs-pvc-pod 的名称###
          name: tomcat-pvc
          ###指定子目录,会在cephfs里创建子文件夹####
          subPath: data/dev/tomcat/projectname/logs
        ####应用上传的upload文件夹###
        - mountPath: /usr/local/tomcat/webapps/projectname/upload
          name: tomcat-pvc
          ###指定子目录,会在cephfs里创建子文件夹####
          subPath: data/dev/tomcat/projectname/upload
        ###使用configMap挂载server.xml,只挂载一个文件,需要使用subPath###
        #- mountPath: /usr/local/tomcat/conf/server.xml
        #  name: serverxml-cm
          ###和下面的volumes.tomcat-configmap的path要对应要对应###
        #  subPath: serverxmlsubpath
        - mountPath: /usr/local/tomcat/conf
          name: tomcat-pvc
          ###和下面的volumes.tomcat-configmap的path要对应要对应###
          subPath: basesoft/tomcat-k8s/conf
             
      volumes:
      ###卷名称,对应上面的挂载名称###
      - name: tomcat-pvc
        persistentVolumeClaim:
          ###对应cephfs-pvc.yaml的metadata.name###
          claimName: k8s-pvc
      #- name: serverxml-cm
      #  configMap:
          ###关联configMap###
          #name: tomcat-configmap
          #items:
          #- key: server.xml
            #path: serverxmlsubpath

---

###创建 projectname 服务####
apiVersion: v1
kind: Service
metadata:
  name: projectname
  labels:
    app: projectname
spec:
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: projectport ###node的端口,用于开发人员直接访问###
    ##protocol: http   ###"SCTP", "TCP", "UDP"###
    name: http
  ###使用NodePort方式,不使用固定虚拟IP###
  #clusterIP: 10.98.239.104 
  selector:
    app: projectname
  ###节点类型是NodePort###
  type: NodePort
