可以在使用 k8s 的过程中选择不使用内置的 etcd,而是使用外部的 etcd 存储数据。
具体步骤如下:
- 配置 kube-apiserver 使用外部 etcd
修改 kube-apiserver 运行时参数,指定 etcd 的地址和端口号,以及证书、密钥等信息。
示例:
kube-apiserver --etcd-servers=https://<etcd-hostname>:2379 \
--tls-cert-file=/path/to/etcd-client.crt \
--tls-private-key-file=/path/to/etcd-client.key \
--etcd-cafile=/path/to/etcd-ca.crt \
...
- 配置 kube-controller-manager 和 kube-scheduler 使用外部 etcd
同样需要修改运行时参数,指定 etcd 的地址和端口号,以及证书、密钥等信息。
示例:
kube-controller-manager --master=https://<apiserver-hostname>:6443 \
--leader-elect=false \
--use-service-account-credentials=true \
--node-cidr-mask-size=24 \
--cluster-cidr=10.244.0.0/16 \
--allocate-node-cidrs=true \
--configure-cloud-routes=false \
--kubeconfig=/etc/kubernetes/controller-manager.conf \
--service-cluster-ip-range=10.96.0.0/12 \
--cluster-name=kubernetes \
--root-ca-file=/etc/kubernetes/pki/ca.crt \
--service-account-private-key-file=/etc/kubernetes/pki/sa.key \
--etcd-cafile=/path/to/etcd-ca.crt \
--etcd-certfile=/path/to/etcd-client.crt \
--etcd-keyfile=/path/to/etcd-client.key \
--etcd-servers=https://<etcd-hostname>:2379 \
...
kube-scheduler --kubeconfig=/etc/kubernetes/scheduler.conf \
--leader-elect=false \
--algorithm-provider=DefaultProvider \
--address=127.0.0.1 \
--master=http://127.0.0.1:8080 \
--policy-config-file=/etc/kubernetes/scheduler-policy.json \
--tls-cert-file=/path/to/kube-scheduler-client.crt \
--tls-private-key-file=/path/to/kube-scheduler-client.key \
--etcd-cafile=/path/to/etcd-ca.crt \
--etcd-certfile=/path/to/etcd-client.crt \
--etcd-keyfile=/path/to/etcd-client.key \
--etcd-servers=https://<etcd-hostname>:2379 \
...
- 配置 kubelet 使用外部 etcd
同样需要修改运行时参数,指定 etcd 的地址和端口号,以及证书、密钥等信息。
示例:
kubelet --pod-manifest-path=/etc/kubernetes/manifests \
--cluster-dns=10.96.0.10 \
--cluster-domain=cluster.local \
--tls-cert-file=/path/to/kubelet-client.crt \
--tls-private-key-file=/path/to/kubelet-client.key \
--node-labels=key=value \
--cadvisor-port=4194 \
--cgroup-driver=systemd \
--container-runtime=remote \
--runtime-request-timeout=15m \
--container-runtime-endpoint="unix:///var/run/containerd/containerd.sock" \
--image-pull-progress-deadline=2h \
--register-node=true \
--allow-privileged=true \
--protect-kernel-defaults=true \
--read-only-port=10255 \
--root-dir=/var/lib/kubelet \
--serialize-image-pulls=false \
--hostname-override=<node-hostname> \
--etcd-cafile=/path/to/etcd-ca.crt \
--etcd-certfile=/path/to/etcd-client.crt \
--etcd-keyfile=/path/to/etcd-client.key \
--etcd-servers=https://<etcd-hostname>:2379 \
...
- 配置 kube-proxy 使用外部 etcd
同样需要修改运行时参数,指定 etcd 的地址和端口号,以及证书、密钥等信息。
示例:
kube-proxy --master=https://<apiserver-hostname>:6443 \
--proxy-mode=iptables \
--kubeconfig=/etc/kubernetes/proxy.conf \
--tls-cert-file=/path/to/kube-proxy-client.crt \
--tls-private-key-file=/path/to/kube-proxy-client.key \
--etcd-cafile=/path/to/etcd-ca.crt \
--etcd-certfile=/path/to/etcd-client.crt \
--etcd-keyfile=/path/to/etcd-client.key \
--etcd-servers=https://<etcd-hostname>:2379 \
...
- 验证 k8s 是否使用了外部 etcd
可以通过查看 kube-apiserver 的日志,查看是否出现类似以下日志:
I0804 09:58:50.551123 1 storage_decorator.go:57] Using storage backend: etcd3
其中,etcd3 表示已成功启用外部 etcd。同时,还可以通过在 etcd 中查看是否有与 k8s 相关的数据来进一步验证。