AWS에 사용자 클러스터 백업

이 페이지에서는 클러스터의 etcd 데이터를 손상시킬 수 있는 이벤트에서 복구하기 위해 Anthos clusters on AWS(GKE on AWS) 설치용 etcd 데이터 저장소를 백업하는 방법을 보여줍니다.

제한사항

  • 백업 파일을 사용한 etcd 데이터 복원은 최후의 수단으로 사용하는 것이 좋습니다. 클러스터가 완전히 손상되지 않는 한 백업 파일에서 복원하지 않는 것이 좋습니다. 최상의 조치를 결정하는 데 도움이 필요하면 Google 지원팀에 문의하세요.

  • 이 절차에서는 PersistentVolume을 포함하여 워크로드의 데이터를 백업하지 않습니다.

  • 이 백업은 다른 버전의 Anthos clusters on AWS를 복원하는 데 사용할 수 없습니다.

사용자 클러스터 백업

사용자 클러스터 백업은 사용자 클러스터 etcd 저장소의 스냅샷입니다. etcd 저장소에는 클러스터의 상태를 나타내는 모든 Kubernetes 객체와 커스텀 객체가 포함됩니다. 스냅샷에는 클러스터의 스테이트리스(Stateless) 워크로드를 다시 만드는 데 필요한 데이터가 포함되어 있습니다.

etcd 데이터 저장소의 스냅샷을 만들려면 다음 단계를 따르세요.

  1. 클러스터의 etcd를 실행하는 관리 서비스 인스턴스에서 셸을 엽니다.

    1. 클러스터 관리 서비스 인스턴스의 IP 주소를 찾습니다.

      export CLUSTER_ID=$(terraform output cluster_id)
      export MANAGEMENT_IP=$(aws ec2 describe-instances \
        --filters "Name=tag:Name,Values=$CLUSTER_ID-management-0" \
        --query "Reservations[*].Instances[*].PrivateIpAddress" \
        --output text)
      
    2. ssh 도구를 사용하여 관리 서비스 인스턴스에 대한 연결을 엽니다.

      직접 연결

      ssh -i ~/.ssh/anthos-gke ubuntu@$MANAGEMENT_IP
      

      배스천 호스트

      export BASTION_DNS=$(terraform output bastion_dns_name)
      ssh -i ~/.ssh/anthos-gke -J ubuntu@$BASTION_DNS ubuntu@$MANAGEMENT_IP
      
  2. etcd 백업 데이터를 저장할 디렉터리를 만듭니다.

    mkdir ./etcd-backups
    
  3. ps 명령줄 도구를 사용하여 해당 인스턴스의 etcd 프로세스 ID를 찾습니다.

    ps -e | grep etcd
    

    출력에는 etcd 프로세스의 세부정보가 표시됩니다. 첫 번째 요소는 etcd의 프로세스 ID입니다. 다음 단계에서 ETCD_PID를 이 프로세스 ID로 바꿉니다.

  4. etcd 컨테이너의 파일 시스템 내에 스크립트를 작성해 스냅샷을 만듭니다. 이 스크립트는 etcdctl을 실행하여 etcd 데몬에 연결하고 etcd 데이터베이스를 백업하는 스냅샷을 수행합니다.

    cat << EOT > /tmp/etcdbackup.sh
    # Extract a snapshot of the anthos-gke etcd state database
    
    export ETCDCTL_API=3
    
    etcdctl \
     --endpoints=https://127.0.0.1:2379 \
     --cacert=/secrets/server-ca.crt \
     --cert=/secrets/server.crt \
     --key=/secrets/server.key \
     snapshot save /tmp/snapshot.db
    EOT
    
    chmod a+x /tmp/etcdbackup.sh
    sudo mv /tmp/etcdbackup.sh /proc/ETCD_PID/root/tmp/etcdbackup.sh
    
  5. nsenter 명령어를 사용하여 etcd 컨테이너 내에서 스크립트를 실행하여 스냅샷을 만듭니다.

    sudo nsenter --all --target ETCD_PID /tmp/etcdbackup.sh
    
  6. etcd 컨테이너에서 스냅샷 파일을 복사합니다.

    sudo cp /proc/ETCD_PID/root/tmp/snapshot.db ./etcd-backups
    
  7. etcd 컨테이너의 /secrets 디렉터리에 있는 모든 파일을 백업 디렉터리에 복사합니다. 이 파일에는 etcd와 클러스터의 다른 프로세스 간의 커뮤니케이션을 암호화하고 검증하는 인증서가 포함됩니다. 스냅샷 파일과 인증서 파일은 모두 etcd 클러스터 상태의 전체 백업입니다.

    sudo cp -r /proc/ETCD_PID/root/secrets ./etcd-backups
    
  8. tar 도구를 사용하여 etc-backup 파일을 편리한 tar 파일로 묶습니다.

    tar -cvf etcd-backup.tar etcd-backup
    
  9. 로컬 머신으로 종료하고 scp 도구를 사용하여 관리 서비스 인스턴스에서 etcd-backup.tar 파일을 복사합니다. 이 예시에서는 앞에서 정의한 BASTION_DNS 및 MANAGEMENT_IP 환경 변수를 사용합니다.

    scp -i ~/.ssh/anthos-gke -J ubuntu@$BASTION_DNS \
     ubuntu@$MANAGEMENT_IP:~/etcd-backup/backup.tar
    

추가 정보