服务安装
[RELEASE_NAME] .
有关命令文档,请参见helm install
服务卸载
helm uninstall [RELEASE_NAME]
有关命令文档,请参见helm uninstall
配置
下表列出图表的可配置参数和默认值
全局参数
| Parameter | Description | Default | Yaml |
|---|---|---|---|
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 |
控制器(工作负载)参数
| Parameter | Description | Default | Yaml |
|---|---|---|---|
| Deployment无状态应用部署 | |||
server.deployment.enabled | 启用Deployment无状态应用部署 | false | |
server.deployment.strategy | 升级策略 | {} | .spec.strategy |
replicaCount | 服务副本数量 | 1 | .spec.replicas |
| Statefulset有状态应用部署 | |||
server.statefulset.enabled | 启用Statefulset有状态应用部署 | false | |
server.statefulset.podManagementPolicy | Pod管理策略 | Parallel | .spec.podManagementPolicy |
replicaCount | 服务副本数量 | 1 | .spec.replicas |
| Daemonset守护进程应用部署 | |||
server.daemonset.enabled | 启用Daemonset守护进程应用部署 | false | |
| Job任务进程应用部署 | |||
server.job.enabled | 启用Job任务进程应用部署 | false | |
server.job.backoffLimit | 6 | .spec.backoffLimit | |
server.job.completions | 1 | .spec.completions | |
server.job.parallelism | 1 | .spec.parallelism | |
server.job.activeDeadlineSeconds | 50 | .spec.activeDeadlineSeconds | |
主容器参数
| Parameter | Description | Default | Yaml |
|---|---|---|---|
containers[].name | |||
| 镜像 | |||
containers[].image.repository | |||
containers[].image.tag | |||
containers[].image.pullPolicy | server.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.cpu | CPU限制 | 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.cpu | CPU预留 | 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.probeScheme | httpGet.scheme |
containers[].readinessProbeInitialDelay | 容器启动后要等待多少秒后才启动就绪探针 | server.container.readinessProbeInitialDelay | readinessProbe.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.periodSeconds | server.container.startupProbe.periodSeconds | ||
containers[].startupProbe.failureThreshold | server.container.startupProbe.failureThreshold | ||
containers[].startupProbe.timeoutSeconds | server.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[].readOnly | false | .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[].readOnly | false | .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.data | Config配置映射键值对 | {} | |
| 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[].readOnly | false | .spec.template.spec.containers[].volumeMounts[].readOnly | |
containers[].extraPersistentVolumeClaimMounts[].claim.name | .spec.template.spec.volumes[].persistentVolumeClaim.claimName | ||
containers[].extraPersistentVolumeClaimMounts[].claim.create | 启用创建PVC | false | |
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)参数(参看主容器参数)
| Parameter | Description | Default | Yaml |
|---|---|---|---|
initContainers[].name |
容器常用参数
| Parameter | Description | Default | Yaml |
|---|---|---|---|
| 镜像 | |||
server.container.image.pullPolicy | Image pull policy | Always | |
| Resources | |||
server.container.resources.limits.cpu | CPU限制 | 1000m | |
server.container.resources.limits.memory | 内存限制 | 2Gi | |
server.container.resources.requests.cpu | CPU预留 | 500m | |
server.container.resources.requests.memory | 内存预留 | 1Gi | |
| 健康检查 | |||
server.container.probeScheme | HTTP | ||
server.container.readinessProbeInitialDelay | 120 | ||
server.container.readinessProbePeriodSeconds | 30 | ||
server.container.readinessProbeTimeout | 2 | ||
server.container.readinessProbeFailureThreshold | 5 | ||
server.container.readinessProbeSuccessThreshold | 1 | ||
server.container.livenessProbeInitialDelay | 120 | ||
server.container.livenessProbePeriodSeconds | 30 | ||
server.container.livenessProbeTimeout | 2 | ||
server.container.livenessProbeFailureThreshold | 5 | ||
server.container.livenessProbeSuccessThreshold | 1 | ||
server.container.startupProbe.enabled | false | ||
server.container.startupProbe.periodSeconds | 5 | ||
server.container.startupProbe.failureThreshold | 30 | ||
server.container.startupProbe.timeoutSeconds | 30 |
服务发现参数(kind: Service)
| Parameter | Description | Default | Yaml |
|---|---|---|---|
service.enabled | 启用 | false | |
service.type | ClusterIP | ||
service.ports[].name | http | ||
service.ports[].port | 80 | ||
service.ports[].protocol | TCP | ||
service.ports[].targetPort | 8080 |
负载均衡参数(kind: Ingress)
| Parameter | Description | Default | Yaml |
|---|---|---|---|
ingress.enabled | 启用 | false | |
ingress.annotations | 注释 | {} | |
ingress.hosts[].host | |||
ingress.hosts[].paths[].path | |||
ingress.hosts[].paths[].pathType | ImplementationSpecific(路径类型) | ||
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)