5.4. etcd 작업
5.4.1. etcd 백업
etcd는 영구 마스터 상태는 물론 모든 오브젝트 정의의 키 값 저장소입니다. 다른 구성 요소에서는 변경을 모니터링하다가 바람직한 상태로 전환합니다.
OpenShift Container Platform 버전 3.5 이전에서는 etcd 버전 2(v2)를 사용하고, 3.5 이상에서는 버전 3(v3)을 사용합니다. 두 가지 etcd 버전의 데이터 모델은 서로 다릅니다. etcd v3에서는 v2 및 v3 데이터 모델을 모두 사용할 수 있는 반면 etcd v2에서는 v2 데이터 모델만 사용할 수 있습니다. etcd v3 서버에서 v2 및 v3 데이터 저장소는 병렬로 존재하며 서로 독립적입니다.
v2 및 v3 작업 모두에서 ETCDCTL_API
환경 변수를 사용하여 올바른 API를 사용할 수 있습니다.
$ etcdctl -v etcdctl version: 3.2.28 API version: 2 $ ETCDCTL_API=3 etcdctl version etcdctl version: 3.2.28 API version: 3.2
v3으로 마이그레이션하는 방법에 대한 정보는 OpenShift Container Platform 3.7 설명서의 v2에서 v3으로 etcd 데이터 마이그레이션 섹션을 참조하십시오.
OpenShift Container Platform 버전 3.10 이상에서는 별도의 호스트에 etcd를 설치하거나 마스터 호스트에서 정적 포드로 실행할 수 있습니다. 별도의 etcd 호스트를 지정하지 않으면 etcd는 마스터 호스트에서 정적 포드로 실행됩니다. 이와 같은 차이 때문에 정적 포드를 사용하면 백업 프로세스가 달라집니다.
etcd 백업 프로세스는 두 가지 서로 다른 프로시저로 구성됩니다.
- 구성 백업: 필수 etcd 구성 및 인증서를 포함합니다.
- 데이터 백업: v2 및 v3 데이터 모델을 포함합니다.
etcd 클러스터에 연결되어 있고 적절한 인증서가 제공되며 etcdctl
도구가 설치된 모든 호스트에서 데이터 백업 프로세스를 수행할 수 있습니다.
외부 시스템, 가능하면 OpenShift Container Platform 환경 외부로 백업 파일을 복사한 다음 암호화해야 합니다.
etcd 백업에는 여전히 현재 스토리지 볼륨에 대한 모든 참조가 있습니다. etcd를 복원하면 OpenShift Container Platform이 노드에서 이전 포드를 시작하고 동일한 스토리지를 다시 연결하기 시작합니다. 이 프로세스는 클러스터에서 노드를 제거하고 그 자리에 새 노드를 다시 추가하는 프로세스와 동일합니다. 해당 노드에 연결되었던 모든 항목은 다시 스케줄링된 모든 노드의 포드에 다시 연결됩니다.
5.4.1.1. etcd 백업
etcd를 백업할 때 etcd 구성 파일과 etcd 데이터를 둘 다 백업해야 합니다.
5.4.1.1.1. etcd 구성 파일 백업
보존할 etcd 구성 파일은 모두 etcd가 실행 중인 인스턴스의 /etc/etcd
디렉터리에 저장됩니다. 여기에는 etcd 구성 파일(/etc/etcd/etcd.conf
)과 클러스터 통신에 필요한 인증서가 포함됩니다. 이러한 모든 파일은 Ansible 설치 프로그램에서 설치 시 생성됩니다.
프로시저
클러스터의 etcd 멤버마다 etcd 구성을 백업하십시오.
$ ssh master-0 1
# mkdir -p /backup/etcd-config-$(date +%Y%m%d)/
# cp -R /etc/etcd/ /backup/etcd-config-$(date +%Y%m%d)/
- 1
master-0
을 etcd 멤버의 이름으로 바꿉니다.
각 etcd 클러스터 멤버의 인증서 및 구성 파일은 고유합니다.
5.4.1.1.2. etcd 데이터 백업
전제 조건
OpenShift Container Platform 설치 프로그램에서는 별칭을 생성하여 etcd v2 작업의 경우 etcdctl2
라는 모든 플래그, etcd v3 작업의 경우 etcdctl3
이라는 모든 플래그를 입력하지 않아도 되게 합니다.
그러나 etcdctl3
별칭에서는 etcdctl
명령에 전체 끝점 목록을 제공하지 않으므로, --endpoints
옵션을 지정하고 모든 끝점을 나열해야 합니다.
etcd를 백업하기 전에 다음을 수행하십시오.
-
etcdctl
바이너리가 사용 가능해야 합니다. 컨테이너화된 설치에서는rhel7/etcd
컨테이너를 사용할 수 있어야 합니다. - OpenShift Container Platform API 서비스가 실행 중인지 확인하십시오.
- etcd 클러스터(2379/tcp 포트)와의 연결을 확인하십시오.
- etcd 클러스터에 연결하기 위한 적절한 인증서를 확인하십시오.
절차
백업을 수행할 때 etcdctl backup
명령을 사용하지만 etcd v3에는 백업이라는 개념이 없습니다. 대신 etcdctl snapshot save
명령으로 활성 멤버에서 스냅샷을 작성하거나 etcd 데이터 디렉터리에서 member/snap/db
파일을 복사합니다.
etcdctl backup
명령을 실행하면 백업에 포함된 일부 메타데이터, 특히 노드 ID 및 클러스터 ID가 다시 작성됩니다. 즉, 백업에서 노드의 이전 ID가 손실됩니다. 백업에서 클러스터를 다시 생성하려면 새로운 단일 노드 클러스터를 생성한 후 나머지 노드를 클러스터에 추가하십시오. 새 노드가 기존 클러스터에 조인하지 못하도록 메타데이터가 다시 작성됩니다.
etcd 데이터를 백업하십시오.
이전 버전의 OpenShift Container Platform에서 업그레이드된 클러스터에는 v2 데이터 저장소가 포함될 수 있습니다. 모든 etcd 데이터 저장소를 백업하십시오.
정적 포드 매니페스트에서 etcd 끝점 IP 주소를 확보하십시오.
$ export ETCD_POD_MANIFEST="/etc/origin/node/pods/etcd.yaml"
$ export ETCD_EP=$(grep https ${ETCD_POD_MANIFEST} | cut -d '/' -f3)
관리자로 로그인합니다.
$ oc login -u system:admin
etcd 포드 이름을 확보하십시오.
$ export ETCD_POD=$(oc get pods -n kube-system | grep -o -m 1 '^master-etcd\S*')
kube-system
프로젝트로 변경합니다.$ oc project kube-system
포드에서 etcd 데이터의 스냅샷을 작성하여 로컬에 저장하십시오.
$ oc exec ${ETCD_POD} -c etcd -- /bin/bash -c "ETCDCTL_API=3 etcdctl \ --cert /etc/etcd/peer.crt \ --key /etc/etcd/peer.key \ --cacert /etc/etcd/ca.crt \ --endpoints $ETCD_EP \ snapshot save /var/lib/etcd/snapshot.db" 1
- 1
/var/lib/etcd/
의 디렉터리에 스냅샷을 써야 합니다.