Contrail 백업 및 복원 등
요약 Contrail 등 데이터베이스를 백업하고 복원하는 방법을 알아보십시오.
릴리스 22.1에서 Contrail은 데이터를 기본 OpenShift 등 데이터베이스에 저장합니다. 릴리스 22.1에서 기본 등 데이터베이스를 백업하고 복원하면 Contrail 데이터를 암묵적으로 백업하고 복원할 수 있습니다.
Contrail은 릴리스 22.2부터 데이터를 자체적인 기타 데이터베이스에 저장합니다. 이 섹션에 있는 절차를 사용하여 Contrail 등 데이터베이스를 백업 및 복원합니다.
릴리스 22.2에서 Contrail 등 데이터베이스 백업
릴리스 22.2에서 이 예 절차를 사용하여 Contrail 등 데이터베이스를 백업합니다. 릴리스 22.2에서는 contrail 등 포드 자체에서 etcdctl 명령을 실행합니다.
- Contrail 등 포드 목록을 확인하세요.
Contrail 등 포드 이름과 IP 주소를 유의하십시오. 다음 단계에서 이러한 이름과 IP 주소를 참조하십시오.user@ai-client:~# kubectl get pods -A | grep contrail-etcd
- 등 데이터베이스를 백업합니다.
- Contrail 등 포드 중 하나에 쉘을 넣습니다.
예를 들어,
쉘(shell)을 포함하려는 등 포드는 어디에 contrail-etcd-xxx 있는가?kubectl exec -it contrail-etcd-xxx -c contrail-etcd -n contrail-system sh
- 등 데이터베이스를 백업합니다.
이 예는 데이터베이스를 /tmp/etcdbackup.db에 저장합니다.
<etcd-pod-ip> 은(는) 은(는) 포드의 IP 주소이며 <etcd-port>, 은(는) 등에서 수신하는 포트입니다(기본값, 12379).etcdctl snapshot save /tmp/etcdbackup.db --endpoints=<etcd-pod-ip>:<etcd-port>
exit
- Contrail 등 포드 중 하나에 쉘을 넣습니다.
- 데이터베이스를 안전한 위치로 복사합니다.
예를 들어,
데이터베이스를 백업한 등 포드는 어디에 contrail-etcd-xxx 있습니다.user@ai-client:~# kubectl cp contrail-system/contrail-etcd-xxx:/tmp/etcdbackup.db -c contrail-etcd ./etcdbackup.db
릴리스 22.3에서 Contrail 등 데이터베이스 백업
릴리스 22.3의 이 예 절차를 사용하여 Contrail 등 데이터베이스를 백업합니다. 릴리스 22.3에서는 컨트롤 플레인 노드에서 etcdctl 명령을 실행합니다.
- 모든 컨트롤 플레인 노드에 etcdctl을 설치합니다.
- 컨트롤 플레인 노드 중 하나에 로그인합니다.
예를 들어:
ssh core@172.16.0.11
- 다운로드 등. 이 예는 /tmp 디렉터리로 다운로드됩니다.
ETCD_VER=v3.4.13 curl -L https://storage.googleapis.com/etcd/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz - 등 실행 파일을 경로의 디렉터리(예: /usr/local/bin)로 언타르하고 이동합니다.
tar -xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp sudo mv /tmp/etcd-${ETCD_VER}-linux-amd64/etcdctl /usr/local/bin - 설치했는지 확인합니다.
[core@ocp1]$ etcdctl version etcdctl version: 3.4.13 API version: 3.4
- 모든 컨트롤 플레인 노드에서 반복합니다.
- 컨트롤 플레인 노드 중 하나에 로그인합니다.
- Contrail 등 포드 목록을 확인하세요.
Contrail 등 포드 이름, IP 주소 및 실행 중인 노드를 유의하십시오. 다음 몇 단계에서 이 정보가 필요합니다.user@ai-client:~# kubectl get pods -A | grep contrail-etcd
- 포드에서 컨트롤 플레인 노드로 등 인증서 및 키 파일을 복사합니다.
이 단계에서 컨트롤 플레인 노드에서 kubectl을 실행합니다. 컨트롤 플레인 노드의 기본 위치( ~/.kube/config)에서 kubeconfig를 설정했다고 가정합니다.
- Contrail 등 포드(예: contrail-etcd-0)를 선택하고 해당 포드를 호스팅하는 컨트롤 플레인 노드에 로그인합니다.
- Contrail 등 포드의 인증서와 키 파일을 호스팅 컨트롤 플레인 노드로 복사합니다.
이 예에서는 contrail 등 0 포드의 인증서와 키 파일을 이 노드의 로컬 파일로 복사합니다.
이렇게 하면 Contrail 등 0 포드의 인증서 및 키 파일을 이 컨트롤 플레인 노드의 현재 디렉터리에 있는 ca.crt, tls.crt 및 tls.key 로 복사합니다.kubectl exec --namespace contrail-system contrail-etcd-0 -c contrail-etcd -- cat /etc/member-tls/ca.crt > ./ca.crt kubectl exec --namespace contrail-system contrail-etcd-0 -c contrail-etcd -- cat /etc/member-tls/tls.crt > ./tls.crt kubectl exec --namespace contrail-system contrail-etcd-0 -c contrail-etcd -- cat /etc/member-tls/tls.key > ./tls.key
- 각 Contrail 등 포드에 대해 반복합니다.
- 컨트롤 플레인 노드 중 하나에서 등 데이터베이스를 백업합니다. 하나의 노드에서만 데이터베이스를 백업하면 됩니다.
- 컨트롤 플레인 노드 중 하나에 다시 로그인합니다.
- 등 데이터베이스를 백업합니다.
이 예는 이 컨트롤 플레인 노드에서 데이터베이스를 /tmp/etcdbackup.db에 저장합니다.
<etcd-pod-ip> 은(는) 이 노드에서 포드의 IP 주소이며 <etcd-port>, 은(는) 등에서 수신 중인 포트입니다(기본적으로 12379).etcdctl snapshot save /tmp/etcdbackup.db --endpoints=<etcd-pod-ip>:<etcd-port> --cacert=ca.crt --cert=tls.crt --key=tls.key
- 데이터베이스를 안전한 위치로 복사합니다.
릴리스 22.2에서 Contrail 등 데이터베이스 복원
릴리스 22.2의 이 예 절차를 사용하여 스냅샷에서 Contrail 등 데이터베이스를 복원합니다.
- 모든 Contrail 등 포드에 스냅샷을 복사합니다.
다른 Contrail 등 포드에 대해 반복합니다.kubectl cp etcdbackup.db contrail-system/contrail-etcd-xxx:/tmp/etcdbackup.db -c contrail-etcd
- 스냅샷을 복원합니다.
- Contrail 등 포드 중 하나에 쉘을 넣습니다.
예를 들어,
쉘(shell)을 포함하려는 등 포드는 어디에 contrail-etcd-xxx 있는가?kubectl exec -it contrail-etcd-xxx -n contrail-system sh
- 등 데이터베이스를 복원합니다.
이는 포드에 .etcd directory를 생성합니다 <contrail-etcd-xxx>.
여기서 <contrail-etcd-xxx> 은(는) 현재 에 있는 Contrail 등 포드의 이름이며 <contrail-etcd-xxx-ip> 해당 포드의 IP 주소입니다. 및 <contrail-etcd-zzz> 은 <contrail-etcd-yyy>(는) 다른 Contrail 등 포드를 참조하십시오.ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcdBackup.db \ --name=<contrail-etcd-xxx> \ --initial-cluster=<contrail-etcd-xxx>=https://<contrail-etcd-xxx-ip>:12380,<contrail-etcd-yyy>=https://<contrail-etcd-yyy-ip>:12380,<contrail-etcd-zzz>=https://<contrail-etcd-zzz-ip>:12380 \ --initial-advertise-peer-urls= https://<contrail-etcd-xxx>:12380
exit
- 다른 Contrail 등 포드에 대해 반복하여
--name각 Contrail 등 포드 이름과 IP 주소로 및--initial-advertise-peer-urls값을 대체합니다.
- Contrail 등 포드 중 하나에 쉘을 넣습니다.
- Contrail 등 포드에서 저장된 등 데이터를 각 컨트롤 플레인 노드로 복사합니다.
- 컨트롤 플레인 노드 중 하나에 SSH를 통합합니다.
- 각 Contrail 등 포드에서 저장된 contrail-etcd-xxx.etcd를 노드로 복사합니다.
예를 들어,
에 로그인한 컨트롤 플레인 노드의 Contrail 등 포드 이름은 어디에 contrail-etcd-xxx 있습니다.kubectl cp contrail-system/contrail-etcd-xxx:/app/cmd/operator/operator.runfiles/cn2/contrail-etcd-xxx.etcd -c contrail-etcd ./<contrail-etcd-xxx>.etcd
exit
- 다른 컨트롤 플레인 노드에 대해 반복합니다.
- Contrail 등 포드를 중지합니다.
이렇게 하면 복제본이 0으로 설정되며 이는 효과적으로 포드를 중지합니다.
user@ai-client:~# kubectl patch etcds.datastore.juniper.net contrail-etcd -n contrail-system --type=merge -p '{"spec": {"common": {"replicas": 0}}} - Contrail 등 데이터를 스냅샷의 데이터로 대체합니다.
- 컨트롤 플레인 노드 중 하나에 SSH를 통합합니다.
- 데이터를 대체합니다.
은( contrail-etcd-xxx는) 에 로그인한 컨트롤 플레인 노드의 Contrail 등 포드 이름입니다.sudo rm -rf /var/lib/contrail-etcd/snapshots sudo mv /var/lib/contrail-etcd/etcd/member /var/lib/contrail-etcd/etcd/member.bak sudo mv contrail-etcd-xxx.etcd/member /var/lib/contrail-etcd/etcd/
exit
- 다른 컨트롤 플레인 노드에 대해 반복합니다.
- Contrail 등 포드를 시작합니다.
이렇게 하면 복제본이 3으로 설정되며, 꼬투리를 효과적으로 시작합니다.
user@ai-client:~# kubectl patch etcds.datastore.juniper.net contrail-etcd -n contrail-system --type=merge -p '{"spec": {"common": {"replicas": 3}}} - Contrail-System apiserver 및 Controller를 다시 시작합니다.
모든 contrail-k8s-apiserver 및 contrail-k8s-controller pod를 삭제합니다.
kubectl delete pod <contrail-k8s-apiserver-xxx> -n contrail-system
이러한 포드는 자동으로 다시 시작됩니다.kubectl delete pod <contrail-k8s-controller-xxx> -n contrail-system
- vrouters를 다시 시작합니다.
모든 Contrail-vrouter-master 및 contrail-vrouter-nodes pod를 삭제합니다.
kubectl delete pod <contrail-vrouter-masters-xxx> -n contrail
이러한 포드는 자동으로 다시 시작됩니다.kubectl delete pod <contrail-vrouter-nodes-xxx> -n contrail
- 모든 pod가 실행 상태에 있는지 확인합니다.
user@ai-client:~# kubectl get pods -n contrail-system
user@ai-client:~# kubectl get pods -n contrail
릴리스 22.3에서 Contrail 등 데이터베이스 복원
릴리스 22.3의 이 예 절차를 사용하여 스냅샷에서 Contrail 등 데이터베이스를 복원합니다.
- 모든 컨트롤 플레인 노드에 복원하려는 스냅샷을 복사합니다.
아래 단계는 모든 컨트롤 플레인 노드에서 /tmp/etcdbackup.db 에 대한 스냅샷을 복사한 것으로 가정합니다.
- 스냅샷을 복원합니다.
- 컨트롤 플레인 노드 중 하나에 로그인합니다. 이 예에서는 Contrail 등 0을 호스팅하는 컨트롤 플레인 노드에 로그인하고 있습니다.
- 등 데이터베이스를 이 컨트롤 플레인 노드의 Contrail 등 0 포드에 복원합니다.
이렇게 하면 노드에 Contrail 등 0 등 디렉터 리를 생성합니다.
여기서ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcdBackup.db \ --name=contrail-etcd-0 \ --initial-cluster=contrail-etcd-0=https://<contrail-etcd-0-ip>:12380,\ contrail-etcd-1=https://<contrail-etcd-1-ip>:12380,\ contrail-etcd-2=https://<contrail-etcd-2-ip>:12380 \ --initial-advertise-peer-urls= https://<contrail-etcd-0-ip>:12380 \ --cacert=ca.crt --cert=tls.crt --key=tls.key
--name=contrail-etcd-0이 명령이 데이터베이스를 Contrail 등 0으로 복원하도록 지정하고,--initial-cluster=...클러스터에 있는 모든 Contrail 등 멤버를 나열하며--initial-advertise-peer-urls=..., Contrail 등 0 포드가 수신하고 있는 IP 주소 및 포트 번호를 나타냅니다. - 각 컨트롤 플레인 노드의 다른 Contrail 등 포드에 대해 반복하여
--name해당 Contrail 등 포드 이름과 IP 주소로 및--initial-advertise-peer-urls값을 대체합니다.
- Contrail 등 포드를 중지합니다.
이렇게 하면 복제본이 0으로 설정되며 이는 효과적으로 포드를 중지합니다.
user@ai-client:~# kubectl patch etcds.datastore.juniper.net contrail-etcd -n contrail-system --type=merge -p '{"spec": {"common": {"replicas": 0}}} - Contrail 등 데이터를 스냅샷의 데이터로 대체합니다.
- 컨트롤 플레인 노드 중 하나에 SSH를 통합합니다.
- 데이터를 대체합니다. 스냅샷은 Contrail 등<xxx> 디렉터리에 저장되어 있습니다.
은( contrail-etcd-xxx는) 에 로그인한 컨트롤 플레인 노드의 Contrail 등 포드 이름입니다.sudo rm -rf /var/lib/contrail-etcd/snapshots sudo mv /var/lib/contrail-etcd/etcd/member /var/lib/contrail-etcd/etcd/member.bak sudo mv contrail-etcd-<xxx>.etcd/member /var/lib/contrail-etcd/etcd/
- 다른 컨트롤 플레인 노드에 대해 반복합니다.
- Contrail 등 포드를 시작합니다.
이렇게 하면 복제본이 3으로 설정되며, 꼬투리를 효과적으로 시작합니다.
user@ai-client:~# kubectl patch etcds.datastore.juniper.net contrail-etcd -n contrail-system --type=merge -p '{"spec": {"common": {"replicas": 3}}} - Contrail-System apiserver 및 Controller를 다시 시작합니다.
모든 contrail-k8s-apiserver 및 contrail-k8s-controller pod를 삭제합니다.
kubectl delete pod <contrail-k8s-apiserver-xxx> -n contrail-system
이러한 포드는 자동으로 다시 시작됩니다.kubectl delete pod <contrail-k8s-controller-xxx> -n contrail-system
- vrouters를 다시 시작합니다.
모든 Contrail-vrouter-master 및 contrail-vrouter-nodes pod를 삭제합니다.
kubectl delete pod <contrail-vrouter-masters-xxx> -n contrail
이러한 포드는 자동으로 다시 시작됩니다.kubectl delete pod <contrail-vrouter-nodes-xxx> -n contrail
- 모든 pod가 실행 상태에 있는지 확인합니다.
user@ai-client:~# kubectl get pods -n contrail-system
user@ai-client:~# kubectl get pods -n contrail