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.2
    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. - name: SW_JDBC_TRACE_SQL_PARAMETERS
    76. value: 'true'
    77. - name: SW_PLUGIN_JDBC_SQL_PARAMETERS_MAX_LENGTH
    78. value: '512'
    79. # skywalking oap 后端
    80. - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
    81. value: ${SW_BACKEND}
    82. # nacos 注册中心配置中心
    83. - name: NACOS_HOST
    84. value: ${NACOS_HOST}
    85. - name: NACOS_NAMESPACE
    86. value: ${NACOS_NAMESPACE}
    87. - name: NACOS_GROUP
    88. value: ${NACOS_GROUP}
    89. - name: POD_ID
    90. valueFrom:
    91. fieldRef:
    92. fieldPath: metadata.name
    93. - name: POD_IP
    94. valueFrom:
    95. fieldRef:
    96. fieldPath: status.podIP
    97. livenessProbe:
    98. httpGet:
    99. path: $HEALTH_PATH
    100. port: $CONTAINER_PORT
    101. initialDelaySeconds: 60
    102. successThreshold: 1
    103. timeoutSeconds: 10
    104. failureThreshold: 10
    105. periodSeconds: 10
    106. readinessProbe:
    107. httpGet:
    108. path: $HEALTH_PATH
    109. port: $CONTAINER_PORT
    110. initialDelaySeconds: 30
    111. timeoutSeconds: 10
    112. failureThreshold: 30
    113. periodSeconds: 5
    114. ports:
    115. - containerPort: $CONTAINER_PORT
    116. protocol: TCP
    117. volumeMounts:
    118. - name: ur-share
    119. mountPath: /share
    120. - name: gc
    121. mountPath: /home/gc/
    122. - name: dump
    123. mountPath: /home/dump/
    124. - name: scripts
    125. mountPath: /home/run.sh
    126. subPath: run.sh
    127. - name: scripts
    128. mountPath: /home/preStop.sh
    129. subPath: preStop.sh
    130. - name: vol-log
    131. mountPath: /var/log
    132. policy:
    133. logs:
    134. rotate: Hourly
    135. annotations:
    136. 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])))"}}'
    137. pathPattern: /info.log
    138. resources:
    139. limits:
    140. cpu: 1
    141. memory: 2Gi
    142. requests:
    143. cpu: 1
    144. memory: 2Gi
    145. terminationMessagePath: /dev/termination-log
    146. terminationMessagePolicy: File
    147. volumes:
    148. # ur共享文件夹
    149. - name: ur-share
    150. emptyDir: {}
    151. - name: vol-log
    152. emptyDir: {}
    153. - name: gc
    154. persistentVolumeClaim:
    155. claimName: $APP_NAME
    156. - name: dump
    157. persistentVolumeClaim:
    158. claimName: scp-dump
    159. - name: scripts
    160. configMap:
    161. defaultMode: 0777
    162. name: $APP_NAME
    163. dnsPolicy: ClusterFirst
    164. imagePullSecrets:
    165. - name: $HARBOR_CREDENTIAL_ID
    166. restartPolicy: Always
    167. terminationGracePeriodSeconds: 40
    168. ---
    169. apiVersion: v1
    170. kind: ConfigMap
    171. metadata:
    172. name: $APP_NAME
    173. namespace: $NAMESPACE
    174. data:
    175. run.sh: |
    176. #!/bin/bash
    177. echo -javaagent:/share/agent/skywalking/skywalking-agent.jar \
    178. -XX:+UseContainerSupport \
    179. -XX:MaxRAMPercentage=75.0 \
    180. -XX:MinRAMPercentage=75.0 \
    181. -XX:InitialRAMPercentage=75.0 \
    182. -XX:MetaspaceSize=256m \
    183. -XX:MaxMetaspaceSize=256m \
    184. -XX:+UseConcMarkSweepGC \
    185. -XX:+UseCMSCompactAtFullCollection \
    186. -XX:+CMSClassUnloadingEnabled \
    187. -XX:CMSInitiatingOccupancyFraction=80 \
    188. -XX:+UseCMSInitiatingOccupancyOnly \
    189. -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses \
    190. -Dsun.rmi.dgc.server.gcInterval=2592000000 \
    191. -Dsun.rmi.dgc.client.gcInterval=2592000000 \
    192. -XX:+UseParNewGC \
    193. -XX:ParallelGCThreads=4 \
    194. -XX:SurvivorRatio=8 \
    195. -XX:+PrintGCDetails \
    196. -XX:+PrintGCDateStamps \
    197. -XX:+PrintTenuringDistribution \
    198. -XX:+PrintHeapAtGC \
    199. -XX:+PrintReferenceGC \
    200. -XX:+PrintGCApplicationStoppedTime \
    201. -XX:+UseGCLogFileRotation \
    202. -XX:NumberOfGCLogFiles=10 \
    203. -XX:GCLogFileSize=1000m \
    204. -Xloggc:/home/gc/gc-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").log \
    205. -XX:+HeapDumpOnOutOfMemoryError \
    206. -XX:HeapDumpPath=/home/dump/dump-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").hprof > /home/gc/java_tool_opts.sh
    207. export JAVA_TOOL_OPTIONS=$(cat /home/gc/java_tool_opts.sh)
    208. 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
    209. preStop.sh: |
    210. #!/bin/bash
    211. 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
    212. sleep 40s
    213. ---
    214. kind: PersistentVolumeClaim
    215. apiVersion: v1
    216. metadata:
    217. name: $APP_NAME
    218. namespace: $NAMESPACE
    219. spec:
    220. accessModes:
    221. - ReadWriteMany
    222. volumeMode: Filesystem
    223. resources:
    224. requests:
    225. storage: 2Gi
    226. storageClassName: sfsturbo-ur-scp
    227. ---
    228. apiVersion: autoscaling/v1
    229. kind: HorizontalPodAutoscaler
    230. metadata:
    231. annotations:
    232. extendedhpa.metrics: '[{"type":"Resource","name":"cpu","targetType":"Utilization","targetRange":{"low":"55","high":"65"}}]'
    233. extendedhpa.option: '{"downscaleWindow":"60m","upscaleWindow":"0m"}'
    234. name: $APP_NAME
    235. namespace: $NAMESPACE
    236. spec:
    237. minReplicas: 2
    238. maxReplicas: 6
    239. scaleTargetRef:
    240. apiVersion: apps/v1
    241. kind: Deployment
    242. name: $APP_NAME
    243. targetCPUUtilizationPercentage: 60

    image.png
    image.png

    image.png