--- # Source: etcd/templates/pdb.yaml apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: my-etcd namespace: "ingress-apisix" labels: app.kubernetes.io/name: etcd helm.sh/chart: etcd-8.5.8 app.kubernetes.io/instance: my app.kubernetes.io/managed-by: Helm spec: minAvailable: 51% selector: matchLabels: app.kubernetes.io/name: etcd app.kubernetes.io/instance: my --- # Source: etcd/templates/svc-headless.yaml apiVersion: v1 kind: Service metadata: name: my-etcd-headless namespace: "ingress-apisix" labels: app.kubernetes.io/name: etcd helm.sh/chart: etcd-8.5.8 app.kubernetes.io/instance: my app.kubernetes.io/managed-by: Helm annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec: type: ClusterIP clusterIP: None publishNotReadyAddresses: true ports: - name: client port: 2379 targetPort: client - name: peer port: 2380 targetPort: peer selector: app.kubernetes.io/name: etcd app.kubernetes.io/instance: my --- # Source: etcd/templates/svc.yaml apiVersion: v1 kind: Service metadata: name: my-etcd namespace: "ingress-apisix" labels: app.kubernetes.io/name: etcd helm.sh/chart: etcd-8.5.8 app.kubernetes.io/instance: my app.kubernetes.io/managed-by: Helm annotations: spec: type: ClusterIP sessionAffinity: None ports: - name: "client" port: 2379 targetPort: client nodePort: null - name: "peer" port: 2380 targetPort: peer nodePort: null selector: app.kubernetes.io/name: etcd app.kubernetes.io/instance: my --- # Source: etcd/templates/statefulset.yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: my-etcd namespace: "ingress-apisix" labels: app.kubernetes.io/name: etcd helm.sh/chart: etcd-8.5.8 app.kubernetes.io/instance: my app.kubernetes.io/managed-by: Helm spec: replicas: 3 selector: matchLabels: app.kubernetes.io/name: etcd app.kubernetes.io/instance: my serviceName: my-etcd-headless podManagementPolicy: Parallel updateStrategy: type: RollingUpdate template: metadata: labels: app.kubernetes.io/name: etcd helm.sh/chart: etcd-8.5.8 app.kubernetes.io/instance: my app.kubernetes.io/managed-by: Helm annotations: spec: affinity: podAffinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchLabels: app.kubernetes.io/name: etcd app.kubernetes.io/instance: my namespaces: - "ingress-apisix" topologyKey: kubernetes.io/hostname weight: 1 nodeAffinity: serviceAccountName: "default" containers: - name: etcd image: docker.io/bitnami/etcd:3.5.5-debian-11-r13 imagePullPolicy: "IfNotPresent" env: - name: BITNAMI_DEBUG value: "false" - name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: MY_STS_NAME value: "my-etcd" - name: ETCDCTL_API value: "3" - name: ETCD_ON_K8S value: "yes" - name: ETCD_START_FROM_SNAPSHOT value: "no" - name: ETCD_DISASTER_RECOVERY value: "no" - name: ETCD_NAME value: "$(MY_POD_NAME)" - name: ETCD_DATA_DIR value: "/bitnami/etcd/data" - name: ETCD_LOG_LEVEL value: "info" - name: ALLOW_NONE_AUTHENTICATION value: "yes" - name: ETCD_AUTH_TOKEN value: "simple" - name: ETCD_ADVERTISE_CLIENT_URLS value: "http://$(MY_POD_NAME).my-etcd-headless.ingress-apisix.svc.cluster.local:2379,http://my-etcd.ingress-apisix.svc.cluster.local:2379" - name: ETCD_LISTEN_CLIENT_URLS value: "http://0.0.0.0:2379" - name: ETCD_INITIAL_ADVERTISE_PEER_URLS value: "http://$(MY_POD_NAME).my-etcd-headless.ingress-apisix.svc.cluster.local:2380" - name: ETCD_LISTEN_PEER_URLS value: "http://0.0.0.0:2380" - name: ETCD_INITIAL_CLUSTER_TOKEN value: "etcd-cluster-k8s" - name: ETCD_INITIAL_CLUSTER_STATE value: "new" - name: ETCD_INITIAL_CLUSTER value: "my-etcd-0=http://my-etcd-0.my-etcd-headless.ingress-apisix.svc.cluster.local:2380,my-etcd-1=http://my-etcd-1.my-etcd-headless.ingress-apisix.svc.cluster.local:2380,my-etcd-2=http://my-etcd-2.my-etcd-headless.ingress-apisix.svc.cluster.local:2380" - name: ETCD_CLUSTER_DOMAIN value: "my-etcd-headless.ingress-apisix.svc.cluster.local" envFrom: ports: - name: client containerPort: 2379 protocol: TCP - name: peer containerPort: 2380 protocol: TCP livenessProbe: exec: command: - /opt/bitnami/scripts/etcd/healthcheck.sh initialDelaySeconds: 60 periodSeconds: 30 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 readinessProbe: exec: command: - /opt/bitnami/scripts/etcd/healthcheck.sh initialDelaySeconds: 60 periodSeconds: 10 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 lifecycle: preStop: exec: command: - /opt/bitnami/scripts/etcd/prestop.sh resources: limits: {} requests: {} volumeMounts: - name: data mountPath: /bitnami/etcd volumes: - name: data emptyDir: {}