业务服务通用Helm安装包配置说明

137 阅读6分钟

服务安装

 [RELEASE_NAME] .

有关命令文档,请参见helm install

服务卸载

helm uninstall [RELEASE_NAME]

有关命令文档,请参见helm uninstall

配置

下表列出图表的可配置参数和默认值

全局参数

ParameterDescriptionDefaultYaml
fullnameOverride服务名称gdc.metadata.name , .spec.template.metadata.name
镜像秘钥
imagePullSecrets镜像仓库秘钥数组[name: "digitalcity-aliyun-docker"].spec.template.spec.imagePullSecrets
标签
selectorLabelAppEnabled启用默认选择器标签(app)true.spec.selector.matchLabels , .spec.template.metadata.labels
extraSelectorLabels附加标签选择器{}.spec.selector.matchLabels , .spec.template.metadata.labels
podLabels服务标签{}.spec.template.metadata.labels
注释
podAnnotations服务注释{}.spec.template.metadata.annotations
重启策略
restartPolicy重启策略Always.spec.template.spec.restartPolicy

控制器(工作负载)参数

ParameterDescriptionDefaultYaml
Deployment无状态应用部署
server.deployment.enabled启用Deployment无状态应用部署false
server.deployment.strategy升级策略{}.spec.strategy
replicaCount服务副本数量1.spec.replicas
Statefulset有状态应用部署
server.statefulset.enabled启用Statefulset有状态应用部署false
server.statefulset.podManagementPolicyPod管理策略Parallel.spec.podManagementPolicy
replicaCount服务副本数量1.spec.replicas
Daemonset守护进程应用部署
server.daemonset.enabled启用Daemonset守护进程应用部署false
Job任务进程应用部署
server.job.enabled启用Job任务进程应用部署false
server.job.backoffLimit6.spec.backoffLimit
server.job.completions1.spec.completions
server.job.parallelism1.spec.parallelism
server.job.activeDeadlineSeconds50.spec.activeDeadlineSeconds

主容器参数

ParameterDescriptionDefaultYaml
containers[].name
镜像
containers[].image.repository
containers[].image.tag
containers[].image.pullPolicyserver.container.image.pullPolicy.spec.template.spec.containers[].imagePullPolicy
环境变量
containers[].env环境变量配置列表[].spec.template.spec.containers[].env
命令/参数
containers[].command容器启动执行的命令[].spec.template.spec.containers[].command
containers[].args[].spec.template.spec.containers[].args
端口
containers[].ports容器需要暴露的端口号列表[].spec.template.spec.containers[].ports
资源配额
containers[].resources.limits.cpuCPU限制server.container.resources.limits.cpu.spec.template.spec.containers[].resources.limits.cpu
containers[].resources.limits.memory内存限制server.container.resources.limits.memory.spec.template.spec.containers[].resources.limits.memory
containers[].resources.requests.cpuCPU预留server.container.resources.requests.cpu.spec.template.spec.containers[].resources.requests.cpu
containers[].resources.requests.memory内存预留server.container.resources.requests.memory.spec.template.spec.containers[].resources.requests.memory
健康检查
containers[].probeEnabled启用健康检查false
containers[].tcpSocketProbeEnabled启用TCP端口检查false
containers[].probePort探针探测的容器端口tcpSocket.port , httpGet.port
containers[].probePath访问 HTTP 服务的路径httpGet.path
containers[].probeScheme用于设置连接服务的方式(HTTP / HTTPS)server.container.probeSchemehttpGet.scheme
containers[].readinessProbeInitialDelay容器启动后要等待多少秒后才启动就绪探针server.container.readinessProbeInitialDelayreadinessProbe.initialDelaySeconds
containers[].readinessProbePeriodSeconds执行探测的时间间隔(单位是秒)server.container.readinessProbePeriodSeconds
containers[].readinessProbeTimeout探测超时时间server.container.readinessProbeTimeout
containers[].readinessProbeFailureThreshold最少连续探测失败多少次才被认定为失败(失败次数限制)server.container.readinessProbeFailureThreshold
containers[].readinessProbeSuccessThreshold最少连续探测成功多少次才被认定为成功server.container.readinessProbeSuccessThreshold
containers[].livenessProbeInitialDelay容器启动后要等待多少秒后才启动存活探针server.container.livenessProbeInitialDelay
containers[].livenessProbePeriodSeconds执行探测的时间间隔(单位是秒)server.container.livenessProbePeriodSeconds
containers[].livenessProbeTimeout探测超时时间server.container.livenessProbeTimeout
containers[].livenessProbeFailureThreshold最少连续探测失败多少次才被认定为失败server.container.livenessProbeFailureThreshold
containers[].livenessProbeSuccessThreshold最少连续探测成功多少次才被认定为成功server.container.livenessProbeSuccessThreshold
containers[].startupProbe.enabled启动检查server.container.startupProbe.enabled
containers[].startupProbe.periodSecondsserver.container.startupProbe.periodSeconds
containers[].startupProbe.failureThresholdserver.container.startupProbe.failureThreshold
containers[].startupProbe.timeoutSecondsserver.container.startupProbe.timeoutSeconds
emptyDir临时卷挂载
containers[].extraEmptyDirMounts[].name.spec.template.spec.containers[].volumeMounts[].name , .spec.template.spec.volumes[].name
containers[].extraEmptyDirMounts[].mountPath容器内部要挂载出去的目录.spec.template.spec.containers[].volumeMounts[].mountPath
主机映射卷挂载
containers[].extraHostPathMounts[].name.spec.template.spec.containers[].volumeMounts[].name , .spec.template.spec.volumes[].name
containers[].extraHostPathMounts[].mountPath容器内部要挂载出去的目录.spec.template.spec.containers[].volumeMounts[].mountPath
containers[].extraHostPathMounts[].subPath.spec.template.spec.containers[].volumeMounts[].subPath
containers[].extraHostPathMounts[].readOnlyfalse.spec.template.spec.containers[].volumeMounts[].readOnly
containers[].extraHostPathMounts[].hostPath宿主上目录位置.spec.template.spec.volumes[].hostPath.path
containers[].extraHostPathMounts[].hostType.spec.template.spec.volumes[].hostPath.type
配置映射卷
containers[].extraConfigmapMounts[].name.spec.template.spec.containers[].volumeMounts[].name , .spec.template.spec.volumes[].name
containers[].extraConfigmapMounts[].mountPath容器内部要挂载出去的目录.spec.template.spec.containers[].volumeMounts[].mountPath
containers[].extraConfigmapMounts[].subPath.spec.template.spec.containers[].volumeMounts[].subPath
containers[].extraConfigmapMounts[].readOnlyfalse.spec.template.spec.containers[].volumeMounts[].readOnly
containers[].extraConfigmapMounts[].configMap.name.spec.template.spec.volumes[].configMap.name
containers[].extraConfigmapMounts[].configMap.optional.spec.template.spec.volumes[].configMap.optional
containers[].extraConfigmapMounts[].configMap.defaultMode.spec.template.spec.volumes[].configMap.defaultMode
containers[].extraConfigmapMounts[].configMap.items.spec.template.spec.volumes[].configMap.items[]
containers[].extraConfigmapMounts[].configMap.create创建Config配置映射false
containers[].extraConfigmapMounts[].configMap.dataConfig配置映射键值对{}
Secret卷挂载
PVC卷挂载
containers[].extraPersistentVolumeClaimMounts[].name.spec.template.spec.containers[].volumeMounts[].name , .spec.template.spec.volumes[].name
containers[].extraPersistentVolumeClaimMounts[].mountPath容器内部要挂载出去的目录.spec.template.spec.containers[].volumeMounts[].mountPath
containers[].extraPersistentVolumeClaimMounts[].subPath.spec.template.spec.containers[].volumeMounts[].subPath
containers[].extraPersistentVolumeClaimMounts[].readOnlyfalse.spec.template.spec.containers[].volumeMounts[].readOnly
containers[].extraPersistentVolumeClaimMounts[].claim.name.spec.template.spec.volumes[].persistentVolumeClaim.claimName
containers[].extraPersistentVolumeClaimMounts[].claim.create启用创建PVCfalse
containers[].extraPersistentVolumeClaimMounts[].claim.storageClass存储类型名称
containers[].extraPersistentVolumeClaimMounts[].claim.size
containers[].extraPersistentVolumeClaimMounts[].claim.annotations{}
containers[].extraPersistentVolumeClaimMounts[].claim.accessModes[ReadWriteMany]

Liveness和Readness两种探测机制的相同点和不同点 相同点是根据探测pod内某个应用或文件,来检查pod的健康状况,不同点是liveness如果探测失败会重启pod,而readliness则在连续n次探测失败之后,会将pod设置为不可用的状态,并不会重启pod。 就绪探测,用于判断容器是否启动完成;存活探测,用于判断容器是否存活(running状态) startupProbe:检查成功才由存活检查接手,用于保护慢启动容器

辅助容器(Sidecar)参数(参看主容器参数)

ParameterDescriptionDefaultYaml
initContainers[].name

容器常用参数

ParameterDescriptionDefaultYaml
镜像
server.container.image.pullPolicyImage pull policyAlways
Resources
server.container.resources.limits.cpuCPU限制1000m
server.container.resources.limits.memory内存限制2Gi
server.container.resources.requests.cpuCPU预留500m
server.container.resources.requests.memory内存预留1Gi
健康检查
server.container.probeSchemeHTTP
server.container.readinessProbeInitialDelay120
server.container.readinessProbePeriodSeconds30
server.container.readinessProbeTimeout2
server.container.readinessProbeFailureThreshold5
server.container.readinessProbeSuccessThreshold1
server.container.livenessProbeInitialDelay120
server.container.livenessProbePeriodSeconds30
server.container.livenessProbeTimeout2
server.container.livenessProbeFailureThreshold5
server.container.livenessProbeSuccessThreshold1
server.container.startupProbe.enabledfalse
server.container.startupProbe.periodSeconds5
server.container.startupProbe.failureThreshold30
server.container.startupProbe.timeoutSeconds30

服务发现参数(kind: Service)

ParameterDescriptionDefaultYaml
service.enabled启用false
service.typeClusterIP
service.ports[].namehttp
service.ports[].port80
service.ports[].protocolTCP
service.ports[].targetPort8080

负载均衡参数(kind: Ingress)

ParameterDescriptionDefaultYaml
ingress.enabled启用false
ingress.annotations注释{}
ingress.hosts[].host
ingress.hosts[].paths[].path
ingress.hosts[].paths[].pathTypeImplementationSpecific(路径类型)
ingress.hosts[].paths[].servicePort如果不指定容器端口,则读取service同索引下的容器端口
ingress.hosts[].paths[].serviceName如果不指定,则读取fullnameOverride

脚本示例

Deployment无状态应用部署

# catalog-server-service 一个pod服务、一个service服务发现、一个ingress负载均衡
helm install catalog-server-service  \
--set fullnameOverride=catalog-server-service \
--set extraSelectorLabels.tier=backend \
--set server.deployment.enabled=true \
--set extraSelectorLabels.tier=backend \
--set containers[0].name=catalog-server-service \
--set containers[0].image.repository=digitalcity-registry.cn-beijing.cr.aliyuncs.com/gdc/catalog-server-service \
--set containers[0].image.tag="CIM_dev_v2.4.1" \
--set containers[0].ports[0].name=80tcp2 \
--set containers[0].ports[0].containerPort=80 \
--set containers[0].ports[0].protocol=TCP \
--set containers[0].resources.limits.cpu=2000m \
--set containers[0].resources.limits.memory=2000Mi \
--set containers[0].resources.requests.cpu=500m \
--set containers[0].resources.requests.memory=1000Mi \
--set containers[0].extraHostPathMounts[0].name=operate-logs \
--set containers[0].extraHostPathMounts[0].mountPath=/user-operate-logs \
--set containers[0].extraHostPathMounts[0].hostPath=/logs/gdc/ \
--set containers[0].extraHostPathMounts[0].hostType=DirectoryOrCreate \
--set containers[0].extraPersistentVolumeClaimMounts[0].name=object-services \
--set containers[0].extraPersistentVolumeClaimMounts[0].claim.name=object-services \
--set containers[0].extraPersistentVolumeClaimMounts[0].mountPath=/data/object_services \
--set containers[0].probeEnabled=true \
--set containers[0].tcpSocketProbeEnabled=true \
--set containers[0].probePort=8080 \
--set containers[0].env[0].name=ENV_ACTIVE \
--set containers[0].env[0].valueFrom.configMapKeyRef.key=ENV_ACTIVE \
--set containers[0].env[0].valueFrom.configMapKeyRef.name=gdc-common \
--set containers[0].env[1].name=ENV \
--set containers[0].env[1].valueFrom.configMapKeyRef.key=ENV \
--set containers[0].env[1].valueFrom.configMapKeyRef.name=gdc-common \
--set containers[0].env[2].name=ENV_META \
--set containers[0].env[2].valueFrom.configMapKeyRef.key=ENV_META \
--set containers[0].env[2].valueFrom.configMapKeyRef.name=gdc-common \
--set containers[0].env[3].name=TZ \
--set containers[0].env[3].valueFrom.configMapKeyRef.key=TZ \
--set containers[0].env[3].valueFrom.configMapKeyRef.name=gdc-common \
--set service.enabled=true \
--set service.ports[0].name=ingressport \
--set service.ports[0].port=80 \
--set service.ports[0].protocol=TCP \
--set service.ports[0].targetPort=8080 \
--set ingress.enabled=true \
--set ingress.hosts[0].host=cim-gdc-release.glodon.com \
--set ingress.hosts[0].paths[0].path=/datahub \
--set ingress.hosts[0].paths[0].servicePort=ingressport \
--set ingress.hosts[0].paths[0].pathType=ImplementationSpecific \
-n gdc .

Daemonset守护进程集应用部署(每个主机一个 Pod)

# log-manual
helm install log-manual  \
--set server.daemonset.enabled=true \
--set fullnameOverride=log-manual \
--set containers[0].name=log-manual \
--set containers[0].image.repository=.../gdc/logstash \
--set containers[0].image.tag="7.16.2" \
--set containers[0].command[0]=logstash \
--set containers[0].ports[0].name=ingressport \
--set containers[0].ports[0].containerPort=5044 \
--set containers[0].ports[0].protocol=TCP \
--set containers[0].resources.limits.cpu=1000m \
--set containers[0].resources.limits.memory=1000Mi \
--set containers[0].resources.requests.cpu=200m \
--set containers[0].resources.requests.memory=800Mi \
--set containers[0].extraHostPathMounts[0].name=hostlogs \
--set containers[0].extraHostPathMounts[0].mountPath=/logs/gdc/ \
--set containers[0].extraHostPathMounts[0].hostPath=/logs/gdc \
--set containers[0].extraConfigmapMounts[0].name=log-manual-pipeline \
--set containers[0].extraConfigmapMounts[0].mountPath=/usr/share/logstash/pipeline/ \
--set containers[0].extraConfigmapMounts[0].configMap.name=logstash-conf \
--set containers[0].extraConfigmapMounts[0].configMap.defaultMode=420 \
--set containers[0].extraConfigmapMounts[0].configMap.items[0].key=logstash.conf \
--set containers[0].extraConfigmapMounts[0].configMap.items[0].path=logstash.conf \
--set containers[0].extraConfigmapMounts[0].configMap.create=true \
--set containers[0].extraConfigmapMounts[0].configMap.notToYaml=true \
--set containers[0].extraConfigmapMounts[0].configMap.data.logstash\\\.conf="input {
    file {
        path => ['/logs/gdc/*']        
    }
}
 
filter {
     
}
output {
   stdout {}
   kafka {
    bootstrap_servers => '10.9.24.108:9092\\,10.9.24.109:9092\\,10.9.24.141:9092'    #生产者
    topic_id => 'gdc-sys-log-logstash-topic'    #设置写入kafka的topic
    codec => json
  }
}" \
--set containers[0].extraConfigmapMounts[0].configMap.data.logstash\\\.yml="http.host: '0.0.0.0'
path.config: /usr/share/logstash/pipeline" \
--set service.enabled=true \
--set service.ports[0].name=ingressport \
--set service.ports[0].port=5044 \
--set service.ports[0].protocol=TCP \
--set service.ports[0].targetPort=5044 \
-n gdc .

Job单个任务应用部署

# 
helm install gdc-apollo-init-job \
--set fullnameOverride=gdc-apollo-init-job \
--set server.job.enabled=true \
--set server.job.backoffLimit=2 \
--set server.job.completions=1 \
--set server.job.parallelism=1 \
--set server.job.activeDeadlineSeconds=50 \
--set imagePullSecrets[0].name=digitalcity-aliyun-docker \
--set containers[0].name=gdc-apollo-init-job \
--set containers[0].image.repository=.../gdc/apollo-tools \
--set containers[0].image.tag="CIM_v2.4.1" \
--set containers[0].securityContext.allowPrivilegeEscalation=false \
--set containers[0].securityContext.privileged=false \
--set containers[0].securityContext.readOnlyRootFilesystem=false \
--set containers[0].securityContext.runAsNonRoot=false \
--set containers[0].env[0].name=CIM_CONFIG_APOLLO_PORTALURL \
--set-string containers[0].env[0].value="https://cim-gdc-release.glodon.com/apollo-portal" \
--set containers[0].env[1].name=CIM_CONFIG_APOLLO_USER \
--set containers[0].env[1].value=apollo \
-n gdc .

Statefulset有状态应用部署

公共Config配置映射

# gdc-common
helm install gdc-common  \
--set configMap[0].name=gdc-common \
--set configMap[0].data.ENV=RELEASE \
--set configMap[0].data.ENV_ACTIVE=RELEASE \
--set configMap[0].data.ENV_META=http://apollo-service-apollo-configservice.gdc:8080 \
--set configMap[0].data.TZ=Asia/Shanghai \
-n gdc .

公共PVC

# object-services
helm install object-services  \
--set persistentVolumeClaim[0].name=object-services \
--set persistentVolumeClaim[0].accessModes[0]=ReadWriteMany \
--set persistentVolumeClaim[0].storageClass="pub-nfs-sc" \
--set persistentVolumeClaim[0].size=2Gi \
-n gdc .
1. 简化yaml部署格式
2. 聚合部署文件(podYaml + serviceYaml + ingressYaml + configYaml--> helm)