Please enable Javascript to view the contents

如何将 Kubernetes 中的 Events 分离到独立的 Etcd

 ·  ☕ 1 分钟

对原 etcd 所在磁盘压力减少 5% 以下,风险系数很低,集群没有异常

1. 部署 Events Etcd 集群

Events 对一致性要求低于主 Etcd,建议部署 3 节点 集群。磁盘建议使用 SSD,数据目录与主 Etcd 分开。

采用静态 Pod 方式部署,kubelet 会自动管理 Etcd 进程,与 kube-apiserver 的部署方式一致。

1.1 集群部署

  • 全部节点设置环境变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
export EVENTS_ETCD_IP_1=10.10.10.1
export EVENTS_ETCD_NAME_1=events-etcd-1

export EVENTS_ETCD_IP_2=10.10.10.2
export EVENTS_ETCD_NAME_2=events-etcd-2

export EVENTS_ETCD_IP_3=10.10.10.3
export EVENTS_ETCD_NAME_3=events-etcd-3

export EVENTS_ETCD_IMAGE=registry.aliyuncs.com/google_containers/etcd:3.5.6-0
export EVENTS_ETCD_CLIENT_PORT=2479
export EVENTS_ETCD_PEER_PORT=2480
export EVENTS_ETCD_METRICS_PORT=2481
export EVENTS_ETCD_CLUSTER="events-etcd-1=http://${EVENTS_ETCD_IP_1}:${EVENTS_ETCD_PEER_PORT},events-etcd-2=http://${EVENTS_ETCD_IP_2}:${EVENTS_ETCD_PEER_PORT},events-etcd-3=http://${EVENTS_ETCD_IP_3}:${EVENTS_ETCD_PEER_PORT}"
  • 打印 kube-apiserver 配置
1
echo "etcd-servers-overrides=/events#http://${EVENTS_ETCD_IP_1}:${EVENTS_ETCD_CLIENT_PORT};http://${EVENTS_ETCD_IP_2}:${EVENTS_ETCD_CLIENT_PORT};http://${EVENTS_ETCD_IP_3}:${EVENTS_ETCD_CLIENT_PORT}"
  • 每个节点创建静态 Pod
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
export EVENTS_ETCD_IP=$EVENTS_ETCD_IP_3
export EVENTS_ETCD_NAME=$EVENTS_ETCD_NAME_3

```bash
mkdir -p /data/etcd-events

tee /etc/kubernetes/manifests/etcd-events.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: etcd-events
  namespace: kube-system
  labels:
    component: etcd-events
spec:
  hostNetwork: true
  priorityClassName: system-cluster-critical
  containers:
  - name: etcd
    image: ${EVENTS_ETCD_IMAGE}
    command:
    - etcd
    - --name=${EVENTS_ETCD_NAME}
    - --data-dir=/data/etcd-events
    - --listen-client-urls=http://0.0.0.0:${EVENTS_ETCD_CLIENT_PORT}
    - --advertise-client-urls=http://${EVENTS_ETCD_IP}:${EVENTS_ETCD_CLIENT_PORT}
    - --listen-peer-urls=http://0.0.0.0:${EVENTS_ETCD_PEER_PORT}
    - --initial-advertise-peer-urls=http://${EVENTS_ETCD_IP}:${EVENTS_ETCD_PEER_PORT}
    - --listen-metrics-urls=http://0.0.0.0:${EVENTS_ETCD_METRICS_PORT}
    - --initial-cluster=${EVENTS_ETCD_CLUSTER}
    - --initial-cluster-state=new
    - --initial-cluster-token=events-etcd-cluster
    - --quota-backend-bytes=8589934592
    volumeMounts:
    - name: data
      mountPath: /data/etcd-events
  volumes:
  - name: data
    hostPath:
      path: /data/etcd-events
      type: DirectoryOrCreate
EOF

1.2 验证集群状态

需要等待几分钟

  • 检查 Pod 状态
1
kubectl -n kube-system get pod -l component=etcd-events -o wide
  • 检查 Etcd 成员列表
1
ETCDCTL_API=3 etcdctl --endpoints=http://${EVENTS_ETCD_IP}:2479 member list
  • 检查 Etcd Metrics
1
curl http://${EVENTS_ETCD_IP}:2481/metrics

2. 配置 kube-apiserver

在全部 Master 节点修改 kube-apiserver 静态 Pod 配置:

1
vim /etc/kubernetes/manifests/kube-apiserver.yaml

command 中新增 overrides 配置:

1
- --etcd-servers-overrides=/events#http://

更新过程中,需要注意观察 kube-apiserver 的状态。

1
kubectl -n kube-system get pod -l component=kube-apiserver

微信公众号
作者
微信公众号