cluster-service/deploy/templates/deployment.yaml (230 lines of code) (raw):
apiVersion: apps/v1
kind: Deployment
metadata:
name: clusters-service
namespace: '{{ .Release.Namespace }}'
labels:
app: clusters-service
spec:
selector:
matchLabels:
app: clusters-service
replicas: {{ .Values.replicas }}
template:
metadata:
labels:
app: clusters-service
azure.workload.identity/use: "true"
annotations:
checksum/db: '{{ include (print $.Template.BasePath "/database.secret.yaml") . | sha256sum }}'
checksum/operatorcfg: '{{ include (print $.Template.BasePath "/azure-operators-managed-identities-config.configmap.yaml") . | sha256sum }}'
checksum/cskv: '{{ include (print $.Template.BasePath "/cs-keyvault.secret.yaml") . | sha256sum }}'
checksum/provisionshard: '{{ include (print $.Template.BasePath "/provisioning-shards.secret.yaml") . | sha256sum }}'
checksum/cs: '{{ include (print $.Template.BasePath "/clusters-service.secret.yaml") . | sha256sum }}'
checksum/runtime: '{{ include (print $.Template.BasePath "/azure-runtime-config.configmap.yaml") . | sha256sum }}'
checksum/cloudres: '{{ include (print $.Template.BasePath "/cloud-resources-config.configmap.yaml") . | sha256sum }}'
checksum/sa: '{{ include (print $.Template.BasePath "/serviceaccount.yaml") . | sha256sum }}'
spec:
serviceAccount: '{{ .Values.serviceAccountName }}'
serviceAccountName: '{{ .Values.serviceAccountName }}'
volumes:
- name: service
secret:
secretName: clusters-service
- name: shards
secret:
secretName: provision-shards
- name: rds
secret:
secretName: ocm-cs-db
- name: oidc
secret:
secretName: rh-oidc-s3-secret
- name: authentication
configMap:
name: authentication
- name: region-constraints
configMap:
name: region-constraints-config
- name: instance-types
configMap:
name: cloud-resources-config
- name: instance-type-constraints
configMap:
name: cloud-resource-constraints-config
- name: cloud-regions
configMap:
name: cloud-resources-config
- name: cloud-region-constraints
configMap:
name: cloud-resource-constraints-config
- name: proxy
configMap:
name: cluster-proxy-service-config
- name: azure-runtime-config
configMap:
name: azure-runtime-config
- name: azure-operators-managed-identities-config
configMap:
name: azure-operators-managed-identities-config
- name: mixin-pull-secret
secret:
secretName: hive-ci-global-pull-secret
optional: true
- name: keyvault
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: cs-keyvault
initContainers:
- name: init
image: '{{ .Values.imageRegistry }}/{{ .Values.imageRepository }}@{{ .Values.imageDigest }}'
imagePullPolicy: IfNotPresent
volumeMounts:
- name: rds
mountPath: /secrets/rds
- name: service
mountPath: /secrets/service
- name: azure-runtime-config
mountPath: /configs/azure-runtime-config
command:
- /usr/local/bin/clusters-service
- init
- --db-host=@/secrets/rds/db.host
- --db-port=@/secrets/rds/db.port
- --db-name=@/secrets/rds/db.name
- --db-user=@/secrets/rds/db.user
- --db-password=@/secrets/rds/db.password
- --db-disable-tls={{ .Values.databaseDisableTls }}
- --db-auth-method={{ .Values.databaseAuthMethod }}
- --force-migration={{ .Values.forceMigration }}
- --batch-processes-dry-run={{ .Values.batchProcessesDryRun }}
- --batch-processes={{ .Values.batchProcesses }}
- --azure-runtime-config-path=/configs/azure-runtime-config/config.json
containers:
- name: service
image: '{{ .Values.imageRegistry }}/{{ .Values.imageRepository }}@{{ .Values.imageDigest }}'
imagePullPolicy: IfNotPresent
volumeMounts:
- name: service
mountPath: /secrets/service
- name: shards
mountPath: /secrets/shards
- name: rds
mountPath: /secrets/rds
- name: authentication
mountPath: /configs/authentication
- name: region-constraints
mountPath: /configs/region-constraints
- name: proxy
mountPath: /configs/proxy
- name: mixin-pull-secret
mountPath: /secrets/mixin-pull-secret
- name: instance-types
mountPath: /configs/cloud-resources/instance-types.yaml
subPath: instance-types.yaml
- name: instance-type-constraints
mountPath: /configs/cloud-resource-constraints/instance-type-constraints.yaml
subPath: instance-type-constraints.yaml
- name: cloud-regions
mountPath: /configs/cloud-resources/cloud-regions.yaml
subPath: cloud-regions.yaml
- name: cloud-region-constraints
mountPath: /configs/cloud-resource-constraints/cloud-region-constraints.yaml
subPath: cloud-region-constraints.yaml
- name: keyvault
mountPath: "/secrets/keyvault"
readOnly: true
- name: azure-runtime-config
mountPath: /configs/azure-runtime-config
- name: azure-operators-managed-identities-config
mountPath: /configs/azure-operators-managed-identities-config.yaml
subPath: azure-operators-managed-identities-config.yaml
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: '{{ .Values.tracing.address }}'
- name: OTEL_TRACES_EXPORTER
value: '{{ .Values.tracing.exporter }}'
command:
- /usr/local/bin/clusters-service
- serve
- --log-level={{ .Values.logLevel }}
- --namespace={{ .Release.Namespace }}
- --runtime-mode={{ .Values.runtimeMode }}
- --default-expiration={{ .Values.defaultExpiration }}
- --maximum-expiration={{ .Values.maximumExpiration }}
- --db-host=@/secrets/rds/db.host
- --db-port=@/secrets/rds/db.port
- --db-name=@/secrets/rds/db.name
- --db-user=@/secrets/rds/db.user
- --db-password=@/secrets/rds/db.password
- --db-disable-tls={{ .Values.databaseDisableTls }}
- --db-auth-method={{ .Values.databaseAuthMethod }}
- --gateway-url={{ .Values.gatewayURL }}
- --client-id=@/secrets/service/client.id
- --client-secret=@/secrets/service/client.secret
- --client-scopes={{ .Values.clientScopes }}
- --user-defined-dns-base-domain={{ .Values.userDefinedDnsBaseDomain }}
- --jwks-url={{ .Values.jwksUrl }}
- --jwks-file=/configs/authentication/jwks.json
- --acl-file=/configs/authentication/acl.yml
- --token-url={{ .Values.tokenUrl }}
- --insecure={{ .Values.insecure }}
- --api-listener-network=tcp
- --api-listener-address=:8000
- --metrics-listener-network=tcp
- --metrics-listener-address=:8080
- --healthcheck-listener-network=tcp
- --healthcheck-listener-address=:8083
- --environment={{ .Values.environment }}
- --backplane-url={{ .Values.backplaneURL }}
- --provision-shards-config=/secrets/shards/config
- --proxy-config-file=/configs/proxy/config.yaml
- --aws-sts-policy-directory=/configs/policies
- --mixin-pull-secret-path=/secrets/mixin-pull-secret
- --region-constraints-config=/configs/region-constraints/config.yaml
- --instance-type-config=/configs/cloud-resources/instance-types.yaml
- --instance-type-constraints-config=/configs/cloud-resource-constraints/instance-type-constraints.yaml
- --cloud-region-config=/configs/cloud-resources/cloud-regions.yaml
- --cloud-region-constraints-config=/configs/cloud-resource-constraints/cloud-region-constraints.yaml
- --azure-first-party-application-client-id={{ .Values.azureFirstPartyApplicationClientId }}
- --azure-first-party-application-certificate-bundle-path=/secrets/keyvault/firstPartyApplicationCertificateBundle
- --azure-runtime-config-path=/configs/azure-runtime-config/config.json
- --azure-operators-managed-identities-config-path=/configs/azure-operators-managed-identities-config.yaml
{{- if and .Values.azureMiMockServicePrincipalCertName .Values.azureMiMockServicePrincipalClientId .Values.azureMiMockServicePrincipalPrincipalId }}
- --azure-mi-mock-service-principal-certificate-bundle-path=/secrets/keyvault/mockMiServicePrincipalCertificateBundle
- --azure-mi-mock-service-principal-client-id={{ .Values.azureMiMockServicePrincipalClientId }}
- --azure-mi-mock-service-principal-principal-id={{ .Values.azureMiMockServicePrincipalPrincipalId }}
{{- end }}
{{- if and .Values.azureArmHelperIdentityCertName .Values.azureArmHelperIdentityClientId .Values.azureArmHelperMockFpaPrincipalId }}
- --azure-arm-helper-identity-certificate-bundle-path=/secrets/keyvault/armHelperIndentityCertificateBundle
- --azure-arm-helper-identity-client-id={{ .Values.azureArmHelperIdentityClientId }}
- --azure-arm-helper-mock-fpa-principal-id={{ .Values.azureArmHelperMockFpaPrincipalId }}
{{- end }}
# Baggage items are populated by the RP frontend and defined in internal/tracing/attributes.go.
- --log-fields-from-baggage=aro.correlation_id=correlation_id,aro.client.request_id=client_request_id
livenessProbe:
httpGet:
path: /api/clusters_mgmt/v1
port: 8000
scheme: HTTP
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /healthcheck
port: 8083
scheme: HTTP
httpHeaders:
- name: User-Agent
value: Probe
initialDelaySeconds: 20
periodSeconds: 10
resources:
requests:
memory: '{{ .Values.memoryRequest }}'
cpu: '{{ .Values.cpuRequest }}'
limits:
memory: '{{ .Values.memoryLimit }}'
cpu: '{{ .Values.cpuLimit }}'