{{- if .Values.config.etcd.enabled }} --- apiVersion: v1 kind: Service metadata: name: etcd namespace: {{ $.Release.Namespace }} labels: app: etcd-reports-server {{- include "reports-server.labels" . | nindent 4 }} spec: type: ClusterIP clusterIP: None selector: app: etcd-reports-server publishNotReadyAddresses: true ports: - name: etcd-client port: 2379 - name: etcd-server port: 2380 - name: etcd-metrics port: 8080 --- apiVersion: apps/v1 kind: StatefulSet metadata: namespace: {{ include "reports-server.fullname" . }} name: etcd labels: app: etcd-reports-server {{- include "reports-server.labels" . | nindent 4 }} spec: serviceName: etcd replicas: 3 podManagementPolicy: Parallel updateStrategy: type: RollingUpdate selector: matchLabels: app: etcd-reports-server template: metadata: labels: app: etcd-reports-server annotations: serviceName: etcd spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - etcd-reports-server topologyKey: "kubernetes.io/hostname" containers: - name: etcd image: quay.io/coreos/etcd:v3.5.15 imagePullPolicy: IfNotPresent ports: - name: etcd-client containerPort: 2379 - name: etcd-server containerPort: 2380 - name: etcd-metrics containerPort: 8080 readinessProbe: httpGet: path: /readyz port: 8080 initialDelaySeconds: 10 periodSeconds: 5 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 30 livenessProbe: httpGet: path: /livez port: 8080 initialDelaySeconds: 15 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 env: - name: K8S_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: HOSTNAME valueFrom: fieldRef: fieldPath: metadata.name - name: SERVICE_NAME valueFrom: fieldRef: fieldPath: metadata.annotations['serviceName'] - name: ETCDCTL_ENDPOINTS value: $(HOSTNAME).$(SERVICE_NAME):2379 ## TLS client configuration for etcdctl in the container. ## These files paths are part of the "etcd-client-certs" volume mount. # - name: ETCDCTL_KEY # value: /etc/etcd/certs/client/tls.key # - name: ETCDCTL_CERT # value: /etc/etcd/certs/client/tls.crt # - name: ETCDCTL_CACERT # value: /etc/etcd/certs/client/ca.crt ## ## Use this URI_SCHEME value for non-TLS clusters. - name: URI_SCHEME value: "http" ## TLS: Use this URI_SCHEME for TLS clusters. # - name: URI_SCHEME # value: "https" command: - /usr/local/bin/etcd args: - --name=$(HOSTNAME) - --data-dir=/data - --wal-dir=/data/wal - --listen-peer-urls=$(URI_SCHEME)://0.0.0.0:2380 - --listen-client-urls=$(URI_SCHEME)://0.0.0.0:2379 - --advertise-client-urls=$(URI_SCHEME)://$(HOSTNAME).$(SERVICE_NAME):2379 - --initial-cluster-state=new - --initial-cluster-token=etcd-$(K8S_NAMESPACE) - --initial-cluster=etcd-0=$(URI_SCHEME)://etcd-0.$(SERVICE_NAME):2380,etcd-1=$(URI_SCHEME)://etcd-1.$(SERVICE_NAME):2380,etcd-2=$(URI_SCHEME)://etcd-2.$(SERVICE_NAME):2380 - --initial-advertise-peer-urls=$(URI_SCHEME)://$(HOSTNAME).$(SERVICE_NAME):2380 - --listen-metrics-urls=http://0.0.0.0:8080 # - --auto-compaction-mode=periodic # - --auto-compaction-retention=10m # - --client-cert-auth # - --trusted-ca-file=$(ETCDCTL_CACERT) # - --cert-file=$(ETCDCTL_CERT) # - --key-file=$(ETCDCTL_KEY) # - --peer-client-cert-auth # - --peer-trusted-ca-file=/etc/etcd/certs/server/ca.crt # - --peer-cert-file=/etc/etcd/certs/server/tls.crt # - --peer-key-file=/etc/etcd/certs/server/tls.key volumeMounts: - name: etcd-data mountPath: /data # - name: etcd-client-tls # mountPath: "/etc/etcd/certs/client" # readOnly: true # - name: etcd-server-tls # mountPath: "/etc/etcd/certs/server" # readOnly: true volumes: # - name: etcd-client-tls # secret: # secretName: etcd-client-tls # optional: false # - name: etcd-server-tls # secret: # secretName: etcd-server-tls # optional: false volumeClaimTemplates: - metadata: name: etcd-data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi {{- end }}