Kubernetes가 파산했습니다. 이제 뭐?
12451 단어 srekubernetesetcd
우리는 몇 개의 Kubernetes 클러스터를 운영해 왔습니다. 누군가 넘어져 키보드에 넘어지고 여러 서비스가 삭제됩니다. 우리는 그것들을 (빨리!) 다시 온라인 상태로 만들어야 합니다.
이전 상태로 되돌릴 수 있는 몇 가지 옵션이 있습니다.
우리는 버전 제어에 모든 것을 갖추고 있습니다. 파이프라인 또는 GitOps 조정자가 이를 처리합니다.
ectd 백업 복원 - 모든 Kubernetes 객체는 etcd에 저장됩니다. 정기적으로 etcd 클러스터 데이터를 백업하면 재해 시나리오에서 생명의 은인이 될 수 있습니다.
특정 Kubernetes 백업 도구를 사용합니다(예: Velero ).
Velero과 같은 도구는 Kubernetes 개체를 백업하고 클라우드 공급자에게 PersistentVolume을 백업하도록 지시하므로 훌륭합니다. 즉, 이것은 램프 업이 있으며 지금 무언가가 필요합니다. etcd 클러스터를 백업하는 것은 항상 안전한 방법이며 그렇게 할 수 있는 방법이 있습니다ways.
한동안 나는 MVP에 대한 "반대"로서 Earliest Testable/Usable/Lovable의 팬이었습니다.
이를 염두에 두고 우리가 원하는 것은 무언가 잘못될 경우를 대비하여 안전망(스케이트)을 갖추는 빠른 방법입니다. 다행스럽게도 etcd에는 스냅샷 기능이 내장되어 있습니다.
백업 등
백업을 만들기 위해 etcd 배포에서 몇 가지를 식별해야 합니다.
spec:
containers:
- command:
- etcd
- --advertise-client-urls=https://172.23.0.3:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/var/lib/etcd
- --initial-advertise-peer-urls=https://172.23.0.3:2380
- --initial-cluster=backup-control-plane=https://172.23.0.3:2380
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --listen-client-urls=https://127.0.0.1:2379,https://172.23.0.3:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://172.23.0.3:2380
- --name=backup-control-plane
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-client-cert-auth=true
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --snapshot-count=10000
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
advertise-client-urls, cert-file, key-file 및 trusted-ca-file 값으로 무장하면 다음을 수행할 수 있습니다.
ETCDCTL_API=3 etcdctl --endpoints https://172.23.0.3:2379 \
--cacert="/etc/kubernetes/pki/etcd/ca.crt" \
--cert="/etc/kubernetes/pki/etcd/server.crt" \
--key="/etc/kubernetes/pki/etcd/server.key" \
snapshot save snapshotdb
{"level":"info","ts":1610913776.2521563,"caller":"snapshot/v3_snapshot.go:119","msg":"created temporary db file","path":"snapshotdb.part"}
{"level":"info","ts":"2021-01-17T20:02:56.256Z","caller":"clientv3/maintenance.go:200","msg":"opened snapshot stream; downloading"}
{"level":"info","ts":1610913776.2563014,"caller":"snapshot/v3_snapshot.go:127","msg":"fetching snapshot","endpoint":"https://172.23.0.3:2379"}
{"level":"info","ts":"2021-01-17T20:02:56.273Z","caller":"clientv3/maintenance.go:208","msg":"completed snapshot read; closing"}
{"level":"info","ts":1610913776.2887816,"caller":"snapshot/v3_snapshot.go:142","msg":"fetched snapshot","endpoint":"https://172.23.0.3:2379","size":"3.6 MB","took":0.036583317}
{"level":"info","ts":1610913776.2891474,"caller":"snapshot/v3_snapshot.go:152","msg":"saved","path":"snapshotdb"}
Snapshot saved at snapshotdb
안전을 위해 백업이 정상인지 확인할 수 있습니다.
ETCDCTL_API=3 etcdctl --write-out=table snapshot status snapshotdb
+----------+----------+------------+------------+
| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 9b193bf0 | 1996 | 2009 | 2.7 MB |
+----------+----------+------------+------------+
etcd 복원
kube-apiserver은 etcd을 사용하여 정보를 저장하고 검색하므로 먼저 ip를 중지해야 합니다. 이는 kube-apiserver 구성 방법에 따라 다릅니다. 다음으로 etcd를 복원합니다.
ETCDCTL_API=3 etcdctl snapshot restore snapshotdb --data-dir="/var/lib/etcd-restore"
{"level":"info","ts":1610913810.5761065,"caller":"snapshot/v3_snapshot.go:296","msg":"restoring snapshot","path":"snapshotdb","wal-dir":"/var/lib/etcd-restore/member/wal","data-dir":"/var/lib/etcd-restore","snap-dir":"/var/lib/etcd-restore/member/snap"}
{"level":"info","ts":1610913810.599168,"caller":"mvcc/kvstore.go:380","msg":"restored last compact revision","meta-bucket-name":"meta","meta-bucket-name-key":"finishedCompactRev","restored-compact-revision":7655}
{"level":"info","ts":1610913810.60404,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"cdf818194e3a8c32","local-member-id":"0","added-peer-id":"8e9e05c52164694d","added-peer-peer-urls":["http://localhost:2380"]}
{"level":"info","ts":1610913810.6153672,"caller":"snapshot/v3_snapshot.go:309","msg":"restored snapshot","path":"snapshotdb","wal-dir":"/var/lib/etcd-restore/member/wal","data-dir":"/var/lib/etcd-restore","snap-dir":"/var/lib/etcd-restore/member/snap"}
etcd에게 이 데이터 폴더를 사용하도록 지시하고 실행되면 kube-apiserver을 다시 온라인으로 가져와야 합니다.
volumes:
- hostPath:
path: /var/lib/etcd-restore
type: DirectoryOrCreate
name: etcd-data
이것은 약간 투박해 보이지만 재해 발생 시 안전망을 확보하는 동시에 더 유능한 솔루션(스쿠터 -> 자전거 -> 오토바이 -> 자동차)을 작업할 시간을 벌 수 있는 쉬운 방법(다시 스케이트)입니다. 예를 들어 자전거가 충분하다는 점에 도달할 수도 있습니다.
Reference
이 문제에 관하여(Kubernetes가 파산했습니다. 이제 뭐?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mccricardo/kubernetes-gone-bust-now-what-2ck3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
spec:
containers:
- command:
- etcd
- --advertise-client-urls=https://172.23.0.3:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/var/lib/etcd
- --initial-advertise-peer-urls=https://172.23.0.3:2380
- --initial-cluster=backup-control-plane=https://172.23.0.3:2380
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --listen-client-urls=https://127.0.0.1:2379,https://172.23.0.3:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://172.23.0.3:2380
- --name=backup-control-plane
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-client-cert-auth=true
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --snapshot-count=10000
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
ETCDCTL_API=3 etcdctl --endpoints https://172.23.0.3:2379 \
--cacert="/etc/kubernetes/pki/etcd/ca.crt" \
--cert="/etc/kubernetes/pki/etcd/server.crt" \
--key="/etc/kubernetes/pki/etcd/server.key" \
snapshot save snapshotdb
{"level":"info","ts":1610913776.2521563,"caller":"snapshot/v3_snapshot.go:119","msg":"created temporary db file","path":"snapshotdb.part"}
{"level":"info","ts":"2021-01-17T20:02:56.256Z","caller":"clientv3/maintenance.go:200","msg":"opened snapshot stream; downloading"}
{"level":"info","ts":1610913776.2563014,"caller":"snapshot/v3_snapshot.go:127","msg":"fetching snapshot","endpoint":"https://172.23.0.3:2379"}
{"level":"info","ts":"2021-01-17T20:02:56.273Z","caller":"clientv3/maintenance.go:208","msg":"completed snapshot read; closing"}
{"level":"info","ts":1610913776.2887816,"caller":"snapshot/v3_snapshot.go:142","msg":"fetched snapshot","endpoint":"https://172.23.0.3:2379","size":"3.6 MB","took":0.036583317}
{"level":"info","ts":1610913776.2891474,"caller":"snapshot/v3_snapshot.go:152","msg":"saved","path":"snapshotdb"}
Snapshot saved at snapshotdb
ETCDCTL_API=3 etcdctl --write-out=table snapshot status snapshotdb
+----------+----------+------------+------------+
| HASH | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 9b193bf0 | 1996 | 2009 | 2.7 MB |
+----------+----------+------------+------------+
kube-apiserver은 etcd을 사용하여 정보를 저장하고 검색하므로 먼저 ip를 중지해야 합니다. 이는 kube-apiserver 구성 방법에 따라 다릅니다. 다음으로 etcd를 복원합니다.
ETCDCTL_API=3 etcdctl snapshot restore snapshotdb --data-dir="/var/lib/etcd-restore"
{"level":"info","ts":1610913810.5761065,"caller":"snapshot/v3_snapshot.go:296","msg":"restoring snapshot","path":"snapshotdb","wal-dir":"/var/lib/etcd-restore/member/wal","data-dir":"/var/lib/etcd-restore","snap-dir":"/var/lib/etcd-restore/member/snap"}
{"level":"info","ts":1610913810.599168,"caller":"mvcc/kvstore.go:380","msg":"restored last compact revision","meta-bucket-name":"meta","meta-bucket-name-key":"finishedCompactRev","restored-compact-revision":7655}
{"level":"info","ts":1610913810.60404,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"cdf818194e3a8c32","local-member-id":"0","added-peer-id":"8e9e05c52164694d","added-peer-peer-urls":["http://localhost:2380"]}
{"level":"info","ts":1610913810.6153672,"caller":"snapshot/v3_snapshot.go:309","msg":"restored snapshot","path":"snapshotdb","wal-dir":"/var/lib/etcd-restore/member/wal","data-dir":"/var/lib/etcd-restore","snap-dir":"/var/lib/etcd-restore/member/snap"}
etcd에게 이 데이터 폴더를 사용하도록 지시하고 실행되면 kube-apiserver을 다시 온라인으로 가져와야 합니다.
volumes:
- hostPath:
path: /var/lib/etcd-restore
type: DirectoryOrCreate
name: etcd-data
이것은 약간 투박해 보이지만 재해 발생 시 안전망을 확보하는 동시에 더 유능한 솔루션(스쿠터 -> 자전거 -> 오토바이 -> 자동차)을 작업할 시간을 벌 수 있는 쉬운 방법(다시 스케이트)입니다. 예를 들어 자전거가 충분하다는 점에 도달할 수도 있습니다.
Reference
이 문제에 관하여(Kubernetes가 파산했습니다. 이제 뭐?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mccricardo/kubernetes-gone-bust-now-what-2ck3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)