开发测试环境

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. app: kubesphere
    6. component: $APP_NAME
    7. tier: backend
    8. # 服务名称
    9. name: $APP_NAME
    10. # 项目名称
    11. namespace: $NAMESPACE
    12. spec:
    13. progressDeadlineSeconds: 600
    14. replicas: 1
    15. selector:
    16. matchLabels:
    17. app: kubesphere
    18. component: $APP_NAME
    19. tier: backend
    20. template:
    21. metadata:
    22. labels:
    23. app: kubesphere
    24. component: $APP_NAME
    25. tier: backend
    26. spec:
    27. initContainers:
    28. # 初始化容器
    29. - name: ur-paas-init-c
    30. image: $HARBOR_HOST/paas/init-container:1.0.0
    31. imagePullPolicy: IfNotPresent
    32. command: ["cp", "-r", "/agent/", "/share/"]
    33. volumeMounts:
    34. - name: ur-share
    35. mountPath: /share
    36. resources:
    37. requests:
    38. cpu: 200m
    39. memory: 200Mi
    40. limits:
    41. cpu: 200m
    42. memory: 200Mi
    43. containers:
    44. - name: $APP_NAME-c
    45. image: $HARBOR_HOST/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER
    46. command: ["sh","/home/run.sh"]
    47. imagePullPolicy: Always
    48. lifecycle:
    49. preStop:
    50. exec:
    51. command: ["sh", "-c", "sleep 10"]
    52. env:
    53. - name: JAVA_OPTS
    54. value: $JAVA_OPTS
    55. - name: CACHE_IGNORE
    56. value: js|html
    57. - name: CACHE_PUBLIC_EXPIRATION
    58. value: 3d
    59. # 时区
    60. - name: TZ
    61. value: Asia/Shanghai
    62. # 引入skywalking agent
    63. - name: SW_AGENT_NAME
    64. value: ${APP_NAME}_${NAMESPACE}
    65. # skywalking oap 后端
    66. - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
    67. value: ${SW_BACKEND}
    68. # nacos 注册中心配置中心
    69. - name: NACOS_HOST
    70. value: ${NACOS_HOST}
    71. - name: NACOS_NAMESPACE
    72. value: ${NACOS_NAMESPACE}
    73. - name: NACOS_GROUP
    74. value: ${NACOS_GROUP}
    75. - name: POD_ID
    76. valueFrom:
    77. fieldRef:
    78. fieldPath: metadata.name
    79. livenessProbe:
    80. httpGet:
    81. path: $HEALTH_PATH
    82. port: $CONTAINER_PORT
    83. initialDelaySeconds: 300
    84. successThreshold: 1
    85. timeoutSeconds: 10
    86. failureThreshold: 10
    87. periodSeconds: 10
    88. readinessProbe:
    89. httpGet:
    90. path: $HEALTH_PATH
    91. port: $CONTAINER_PORT
    92. initialDelaySeconds: 150
    93. timeoutSeconds: 10
    94. failureThreshold: 30
    95. periodSeconds: 5
    96. ports:
    97. - containerPort: $CONTAINER_PORT
    98. protocol: TCP
    99. volumeMounts:
    100. - name: ur-share
    101. mountPath: /share
    102. - name: jvm
    103. mountPath: /home/jvm/
    104. - name: run
    105. mountPath: /home/run.sh
    106. subPath: run.sh
    107. resources:
    108. limits:
    109. cpu: 1
    110. memory: 2Gi
    111. requests:
    112. cpu: 1
    113. memory: 2Gi
    114. terminationMessagePath: /dev/termination-log
    115. terminationMessagePolicy: File
    116. volumes:
    117. # ur共享文件夹
    118. - name: ur-share
    119. emptyDir: {}
    120. - name: jvm
    121. emptyDir: {}
    122. - name: run
    123. configMap:
    124. defaultMode: 0777
    125. name: $APP_NAME
    126. dnsPolicy: ClusterFirst
    127. imagePullSecrets:
    128. - name: $HARBOR_CREDENTIAL_ID
    129. restartPolicy: Always
    130. terminationGracePeriodSeconds: 30
    131. ---
    132. apiVersion: v1
    133. kind: ConfigMap
    134. metadata:
    135. name: $APP_NAME
    136. namespace: $NAMESPACE
    137. data:
    138. run.sh: |
    139. #!/bin/bash
    140. echo -javaagent:/share/agent/skywalking/skywalking-agent.jar \
    141. -XX:+UseContainerSupport \
    142. -XX:MaxRAMPercentage=75.0 \
    143. -XX:MinRAMPercentage=75.0 \
    144. -XX:InitialRAMPercentage=75.0 \
    145. -XX:MetaspaceSize=256m \
    146. -XX:MaxMetaspaceSize=256m \
    147. -XX:+UseConcMarkSweepGC \
    148. -XX:+UseCMSCompactAtFullCollection \
    149. -XX:+CMSClassUnloadingEnabled \
    150. -XX:CMSInitiatingOccupancyFraction=80 \
    151. -XX:+UseCMSInitiatingOccupancyOnly \
    152. -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses \
    153. -Dsun.rmi.dgc.server.gcInterval=2592000000 \
    154. -Dsun.rmi.dgc.client.gcInterval=2592000000 \
    155. -XX:+UseParNewGC \
    156. -XX:ParallelGCThreads=4 \
    157. -XX:SurvivorRatio=8 \
    158. -XX:+PrintGCDetails \
    159. -XX:+PrintGCDateStamps \
    160. -XX:+PrintTenuringDistribution \
    161. -XX:+PrintHeapAtGC \
    162. -XX:+PrintReferenceGC \
    163. -XX:+PrintGCApplicationStoppedTime \
    164. -XX:+UseGCLogFileRotation \
    165. -XX:NumberOfGCLogFiles=10 \
    166. -XX:GCLogFileSize=1000m \
    167. -Xloggc:/home/jvm/gc-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").log \
    168. -XX:+HeapDumpOnOutOfMemoryError \
    169. -XX:HeapDumpPath=/home/jvm/dump-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").hprof > /home/jvm/java_tool_opts.sh
    170. export JAVA_TOOL_OPTIONS=$(cat /home/jvm/java_tool_opts.sh)
    171. java -jar ${${p}JAVA_OPTS} -javaagent:/share/agent/jacoco/jacocoagent.jar=includes=com.ur.ufm.*,output=tcpserver,append=false,address=0.0.0.0,port=1234 -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom *.jar

    预发生产环境

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. app: kubesphere
    6. component: $APP_NAME
    7. tier: backend
    8. # 服务名称
    9. name: $APP_NAME
    10. # 项目名称
    11. namespace: $NAMESPACE
    12. spec:
    13. progressDeadlineSeconds: 600
    14. replicas: 2
    15. selector:
    16. matchLabels:
    17. app: kubesphere
    18. component: $APP_NAME
    19. tier: backend
    20. template:
    21. metadata:
    22. labels:
    23. app: kubesphere
    24. component: $APP_NAME
    25. tier: backend
    26. spec:
    27. affinity:
    28. podAntiAffinity:
    29. requiredDuringSchedulingIgnoredDuringExecution:
    30. - labelSelector:
    31. matchExpressions:
    32. - key: component
    33. operator: In
    34. values:
    35. - $APP_NAME
    36. topologyKey: "kubernetes.io/hostname"
    37. initContainers:
    38. # 初始化容器
    39. - name: ur-paas-init
    40. image: $HARBOR_HOST/paas/init-container:1.0.0
    41. imagePullPolicy: IfNotPresent
    42. command: ["cp", "-r", "/agent/", "/share/"]
    43. volumeMounts:
    44. - name: ur-share
    45. mountPath: /share
    46. resources:
    47. requests:
    48. cpu: 200m
    49. memory: 200Mi
    50. limits:
    51. cpu: 200m
    52. memory: 200Mi
    53. containers:
    54. - name: $APP_NAME
    55. image: $HARBOR_HOST/$HARBOR_NAMESPACE/$APP_NAME:$BRANCH_NAME-$BUILD_NUMBER
    56. command: ["sh","/home/run.sh"]
    57. imagePullPolicy: Always
    58. lifecycle:
    59. preStop:
    60. exec:
    61. command: ["sh","/home/preStop.sh"]
    62. env:
    63. - name: JAVA_OPTS
    64. value: $JAVA_OPTS
    65. - name: CACHE_IGNORE
    66. value: js|html
    67. - name: CACHE_PUBLIC_EXPIRATION
    68. value: 3d
    69. # 时区
    70. - name: TZ
    71. value: Asia/Shanghai
    72. # 引入skywalking agent
    73. - name: SW_AGENT_NAME
    74. value: ${APP_NAME}
    75. # skywalking oap 后端
    76. - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
    77. value: ${SW_BACKEND}
    78. # nacos 注册中心配置中心
    79. - name: NACOS_HOST
    80. value: ${NACOS_HOST}
    81. - name: NACOS_NAMESPACE
    82. value: ${NACOS_NAMESPACE}
    83. - name: NACOS_GROUP
    84. value: ${NACOS_GROUP}
    85. - name: POD_ID
    86. valueFrom:
    87. fieldRef:
    88. fieldPath: metadata.name
    89. - name: POD_IP
    90. valueFrom:
    91. fieldRef:
    92. fieldPath: status.podIP
    93. livenessProbe:
    94. httpGet:
    95. path: $HEALTH_PATH
    96. port: $CONTAINER_PORT
    97. initialDelaySeconds: 60
    98. successThreshold: 1
    99. timeoutSeconds: 10
    100. failureThreshold: 10
    101. periodSeconds: 10
    102. readinessProbe:
    103. httpGet:
    104. path: $HEALTH_PATH
    105. port: $CONTAINER_PORT
    106. initialDelaySeconds: 30
    107. timeoutSeconds: 10
    108. failureThreshold: 30
    109. periodSeconds: 5
    110. ports:
    111. - containerPort: $CONTAINER_PORT
    112. protocol: TCP
    113. volumeMounts:
    114. - name: ur-share
    115. mountPath: /share
    116. - name: gc
    117. mountPath: /home/gc/
    118. - name: dump
    119. mountPath: /home/dump/
    120. - name: scripts
    121. mountPath: /home/run.sh
    122. subPath: run.sh
    123. - name: scripts
    124. mountPath: /home/preStop.sh
    125. subPath: preStop.sh
    126. - name: vol-log
    127. mountPath: /var/log
    128. policy:
    129. logs:
    130. rotate: Hourly
    131. annotations:
    132. format: '{"multi":{"mode":"regular","value":"([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))"}}'
    133. pathPattern: /info.log
    134. resources:
    135. limits:
    136. cpu: 2
    137. memory: 4Gi
    138. requests:
    139. cpu: 2
    140. memory: 4Gi
    141. terminationMessagePath: /dev/termination-log
    142. terminationMessagePolicy: File
    143. volumes:
    144. # ur共享文件夹
    145. - name: ur-share
    146. emptyDir: {}
    147. - name: vol-log
    148. emptyDir: {}
    149. - name: gc
    150. persistentVolumeClaim:
    151. claimName: $APP_NAME
    152. - name: dump
    153. persistentVolumeClaim:
    154. claimName: ufm-dump
    155. - name: scripts
    156. configMap:
    157. defaultMode: 0777
    158. name: $APP_NAME
    159. dnsPolicy: ClusterFirst
    160. imagePullSecrets:
    161. - name: $HARBOR_CREDENTIAL_ID
    162. restartPolicy: Always
    163. terminationGracePeriodSeconds: 40
    164. ---
    165. apiVersion: v1
    166. kind: ConfigMap
    167. metadata:
    168. name: $APP_NAME
    169. namespace: $NAMESPACE
    170. data:
    171. run.sh: |
    172. #!/bin/bash
    173. echo -javaagent:/share/agent/skywalking/skywalking-agent.jar \
    174. -XX:+UseContainerSupport \
    175. -XX:MaxRAMPercentage=75.0 \
    176. -XX:MinRAMPercentage=75.0 \
    177. -XX:InitialRAMPercentage=75.0 \
    178. -XX:MetaspaceSize=256m \
    179. -XX:MaxMetaspaceSize=256m \
    180. -XX:+UseConcMarkSweepGC \
    181. -XX:+UseCMSCompactAtFullCollection \
    182. -XX:+CMSClassUnloadingEnabled \
    183. -XX:CMSInitiatingOccupancyFraction=80 \
    184. -XX:+UseCMSInitiatingOccupancyOnly \
    185. -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses \
    186. -Dsun.rmi.dgc.server.gcInterval=2592000000 \
    187. -Dsun.rmi.dgc.client.gcInterval=2592000000 \
    188. -XX:+UseParNewGC \
    189. -XX:ParallelGCThreads=4 \
    190. -XX:SurvivorRatio=8 \
    191. -XX:+PrintGCDetails \
    192. -XX:+PrintGCDateStamps \
    193. -XX:+PrintTenuringDistribution \
    194. -XX:+PrintHeapAtGC \
    195. -XX:+PrintReferenceGC \
    196. -XX:+PrintGCApplicationStoppedTime \
    197. -XX:+UseGCLogFileRotation \
    198. -XX:NumberOfGCLogFiles=10 \
    199. -XX:GCLogFileSize=1000m \
    200. -Xloggc:/home/gc/gc-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").log \
    201. -XX:+HeapDumpOnOutOfMemoryError \
    202. -XX:HeapDumpPath=/home/dump/dump-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").hprof > /home/gc/java_tool_opts.sh
    203. export JAVA_TOOL_OPTIONS=$(cat /home/gc/java_tool_opts.sh)
    204. java -jar ${${p}JAVA_OPTS} -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom *.jar
    205. preStop.sh: |
    206. #!/bin/bash
    207. curl -XPUT http://${NACOS_HOST}/nacos/v1/ns/instance?serviceName=${APP_NAME}\&groupName=${NACOS_GROUP}\&namespaceId=${NACOS_NAMESPACE}\&ip=$${p}POD_IP\&port=${CONTAINER_PORT}\&enable=false
    208. sleep 40s
    209. ---
    210. kind: PersistentVolumeClaim
    211. apiVersion: v1
    212. metadata:
    213. name: $APP_NAME
    214. namespace: $NAMESPACE
    215. spec:
    216. accessModes:
    217. - ReadWriteMany
    218. volumeMode: Filesystem
    219. resources:
    220. requests:
    221. storage: 2Gi
    222. storageClassName: sfsturbo-ur-ufm
    223. ---
    224. apiVersion: autoscaling/v1
    225. kind: HorizontalPodAutoscaler
    226. metadata:
    227. annotations:
    228. extendedhpa.metrics: '[{"type":"Resource","name":"cpu","targetType":"Utilization","targetRange":{"low":"55","high":"65"}}]'
    229. extendedhpa.option: '{"downscaleWindow":"60m","upscaleWindow":"0m"}'
    230. name: $APP_NAME
    231. namespace: $NAMESPACE
    232. spec:
    233. minReplicas: 2
    234. maxReplicas: 6
    235. scaleTargetRef:
    236. apiVersion: apps/v1
    237. kind: Deployment
    238. name: $APP_NAME
    239. targetCPUUtilizationPercentage: 60