开发测试环境
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: kubesphere
component: $APP_NAME
tier: backend
# 服务名称
name: $APP_NAME
# 项目名称
namespace: $NAMESPACE
spec:
progressDeadlineSeconds: 600
replicas: 1
selector:
matchLabels:
app: kubesphere
component: $APP_NAME
tier: backend
template:
metadata:
labels:
app: kubesphere
component: $APP_NAME
tier: backend
spec:
initContainers:
# 初始化容器
- name: ur-paas-init-c
image: $HARBOR_HOST/paas/init-container:1.0.0
imagePullPolicy: IfNotPresent
command: ["cp", "-r", "/agent/", "/share/"]
volumeMounts:
- name: ur-share
mountPath: /share
resources:
requests:
cpu: 200m
memory: 200Mi
limits:
cpu: 200m
memory: 200Mi
containers:
- name: $APP_NAME-c
image: $HARBOR_HOST/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER
command: ["sh","/home/run.sh"]
imagePullPolicy: Always
lifecycle:
preStop:
exec:
command: ["sh", "-c", "sleep 10"]
env:
- name: JAVA_OPTS
value: $JAVA_OPTS
- name: CACHE_IGNORE
value: js|html
- name: CACHE_PUBLIC_EXPIRATION
value: 3d
# 时区
- name: TZ
value: Asia/Shanghai
# 引入skywalking agent
- name: SW_AGENT_NAME
value: ${APP_NAME}_${NAMESPACE}
# skywalking oap 后端
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: ${SW_BACKEND}
# nacos 注册中心配置中心
- name: NACOS_HOST
value: ${NACOS_HOST}
- name: NACOS_NAMESPACE
value: ${NACOS_NAMESPACE}
- name: NACOS_GROUP
value: ${NACOS_GROUP}
- name: POD_ID
valueFrom:
fieldRef:
fieldPath: metadata.name
livenessProbe:
httpGet:
path: $HEALTH_PATH
port: $CONTAINER_PORT
initialDelaySeconds: 300
successThreshold: 1
timeoutSeconds: 10
failureThreshold: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: $HEALTH_PATH
port: $CONTAINER_PORT
initialDelaySeconds: 150
timeoutSeconds: 10
failureThreshold: 30
periodSeconds: 5
ports:
- containerPort: $CONTAINER_PORT
protocol: TCP
volumeMounts:
- name: ur-share
mountPath: /share
- name: jvm
mountPath: /home/jvm/
- name: run
mountPath: /home/run.sh
subPath: run.sh
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 1
memory: 2Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumes:
# ur共享文件夹
- name: ur-share
emptyDir: {}
- name: jvm
emptyDir: {}
- name: run
configMap:
defaultMode: 0777
name: $APP_NAME
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: $HARBOR_CREDENTIAL_ID
restartPolicy: Always
terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: ConfigMap
metadata:
name: $APP_NAME
namespace: $NAMESPACE
data:
run.sh: |
#!/bin/bash
echo -javaagent:/share/agent/skywalking/skywalking-agent.jar \
-XX:+UseContainerSupport \
-XX:MaxRAMPercentage=75.0 \
-XX:MinRAMPercentage=75.0 \
-XX:InitialRAMPercentage=75.0 \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=256m \
-XX:+UseConcMarkSweepGC \
-XX:+UseCMSCompactAtFullCollection \
-XX:+CMSClassUnloadingEnabled \
-XX:CMSInitiatingOccupancyFraction=80 \
-XX:+UseCMSInitiatingOccupancyOnly \
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses \
-Dsun.rmi.dgc.server.gcInterval=2592000000 \
-Dsun.rmi.dgc.client.gcInterval=2592000000 \
-XX:+UseParNewGC \
-XX:ParallelGCThreads=4 \
-XX:SurvivorRatio=8 \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-XX:+PrintTenuringDistribution \
-XX:+PrintHeapAtGC \
-XX:+PrintReferenceGC \
-XX:+PrintGCApplicationStoppedTime \
-XX:+UseGCLogFileRotation \
-XX:NumberOfGCLogFiles=10 \
-XX:GCLogFileSize=1000m \
-Xloggc:/home/jvm/gc-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").log \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/home/jvm/dump-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").hprof > /home/jvm/java_tool_opts.sh
export JAVA_TOOL_OPTIONS=$(cat /home/jvm/java_tool_opts.sh)
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
预发生产环境
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: kubesphere
component: $APP_NAME
tier: backend
# 服务名称
name: $APP_NAME
# 项目名称
namespace: $NAMESPACE
spec:
progressDeadlineSeconds: 600
replicas: 2
selector:
matchLabels:
app: kubesphere
component: $APP_NAME
tier: backend
template:
metadata:
labels:
app: kubesphere
component: $APP_NAME
tier: backend
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: component
operator: In
values:
- $APP_NAME
topologyKey: "kubernetes.io/hostname"
initContainers:
# 初始化容器
- name: ur-paas-init
image: $HARBOR_HOST/paas/init-container:1.0.0
imagePullPolicy: IfNotPresent
command: ["cp", "-r", "/agent/", "/share/"]
volumeMounts:
- name: ur-share
mountPath: /share
resources:
requests:
cpu: 200m
memory: 200Mi
limits:
cpu: 200m
memory: 200Mi
containers:
- name: $APP_NAME
image: $HARBOR_HOST/$HARBOR_NAMESPACE/$APP_NAME:$BRANCH_NAME-$BUILD_NUMBER
command: ["sh","/home/run.sh"]
imagePullPolicy: Always
lifecycle:
preStop:
exec:
command: ["sh","/home/preStop.sh"]
env:
- name: JAVA_OPTS
value: $JAVA_OPTS
- name: CACHE_IGNORE
value: js|html
- name: CACHE_PUBLIC_EXPIRATION
value: 3d
# 时区
- name: TZ
value: Asia/Shanghai
# 引入skywalking agent
- name: SW_AGENT_NAME
value: ${APP_NAME}
# skywalking oap 后端
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: ${SW_BACKEND}
# nacos 注册中心配置中心
- name: NACOS_HOST
value: ${NACOS_HOST}
- name: NACOS_NAMESPACE
value: ${NACOS_NAMESPACE}
- name: NACOS_GROUP
value: ${NACOS_GROUP}
- name: POD_ID
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
livenessProbe:
httpGet:
path: $HEALTH_PATH
port: $CONTAINER_PORT
initialDelaySeconds: 60
successThreshold: 1
timeoutSeconds: 10
failureThreshold: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: $HEALTH_PATH
port: $CONTAINER_PORT
initialDelaySeconds: 30
timeoutSeconds: 10
failureThreshold: 30
periodSeconds: 5
ports:
- containerPort: $CONTAINER_PORT
protocol: TCP
volumeMounts:
- name: ur-share
mountPath: /share
- name: gc
mountPath: /home/gc/
- name: dump
mountPath: /home/dump/
- name: scripts
mountPath: /home/run.sh
subPath: run.sh
- name: scripts
mountPath: /home/preStop.sh
subPath: preStop.sh
- name: vol-log
mountPath: /var/log
policy:
logs:
rotate: Hourly
annotations:
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])))"}}'
pathPattern: /info.log
resources:
limits:
cpu: 2
memory: 4Gi
requests:
cpu: 2
memory: 4Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumes:
# ur共享文件夹
- name: ur-share
emptyDir: {}
- name: vol-log
emptyDir: {}
- name: gc
persistentVolumeClaim:
claimName: $APP_NAME
- name: dump
persistentVolumeClaim:
claimName: ufm-dump
- name: scripts
configMap:
defaultMode: 0777
name: $APP_NAME
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: $HARBOR_CREDENTIAL_ID
restartPolicy: Always
terminationGracePeriodSeconds: 40
---
apiVersion: v1
kind: ConfigMap
metadata:
name: $APP_NAME
namespace: $NAMESPACE
data:
run.sh: |
#!/bin/bash
echo -javaagent:/share/agent/skywalking/skywalking-agent.jar \
-XX:+UseContainerSupport \
-XX:MaxRAMPercentage=75.0 \
-XX:MinRAMPercentage=75.0 \
-XX:InitialRAMPercentage=75.0 \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=256m \
-XX:+UseConcMarkSweepGC \
-XX:+UseCMSCompactAtFullCollection \
-XX:+CMSClassUnloadingEnabled \
-XX:CMSInitiatingOccupancyFraction=80 \
-XX:+UseCMSInitiatingOccupancyOnly \
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses \
-Dsun.rmi.dgc.server.gcInterval=2592000000 \
-Dsun.rmi.dgc.client.gcInterval=2592000000 \
-XX:+UseParNewGC \
-XX:ParallelGCThreads=4 \
-XX:SurvivorRatio=8 \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-XX:+PrintTenuringDistribution \
-XX:+PrintHeapAtGC \
-XX:+PrintReferenceGC \
-XX:+PrintGCApplicationStoppedTime \
-XX:+UseGCLogFileRotation \
-XX:NumberOfGCLogFiles=10 \
-XX:GCLogFileSize=1000m \
-Xloggc:/home/gc/gc-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").log \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/home/dump/dump-$${p}POD_ID-$(date +"%Y-%m-%d-%H-%M-%S").hprof > /home/gc/java_tool_opts.sh
export JAVA_TOOL_OPTIONS=$(cat /home/gc/java_tool_opts.sh)
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
preStop.sh: |
#!/bin/bash
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
sleep 40s
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: $APP_NAME
namespace: $NAMESPACE
spec:
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 2Gi
storageClassName: sfsturbo-ur-ufm
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
annotations:
extendedhpa.metrics: '[{"type":"Resource","name":"cpu","targetType":"Utilization","targetRange":{"low":"55","high":"65"}}]'
extendedhpa.option: '{"downscaleWindow":"60m","upscaleWindow":"0m"}'
name: $APP_NAME
namespace: $NAMESPACE
spec:
minReplicas: 2
maxReplicas: 6
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: $APP_NAME
targetCPUUtilizationPercentage: 60