5장. 컨트롤 플레인 백업 및 복원


5.1. etcd 백업

etcd는 모든 리소스 개체의 상태를 저장하는 OpenShift Container Platform의 키-값 형식의 저장소입니다.

클러스터의 etcd 데이터를 정기적으로 백업하고 OpenShift Container Platform 환경 외부의 안전한 위치에 백업 데이터를 저장하십시오. 설치 후 24 시간 내에 발생하는 첫 번째 인증서 교체가 완료되기 전까지 etcd 백업을 수행하지 마십시오. 인증서 교체가 완료되기 전에 실행하면 백업에 만료된 인증서가 포함됩니다. etcd 스냅샷에 높은 I/O 비용이 있기 때문에 사용량이 많지 않은 시간에 etcd 백업을 수행하는 것이 좋습니다.

클러스터를 업그레이드한 후 etcd 백업을 수행해야 합니다. 이는 클러스터를 복원할 때 동일한 z-stream 릴리스에서 가져온 etcd 백업을 사용해야 하므로 중요합니다. 예를 들어 OpenShift Container Platform 4.y.z 클러스터는 4.y.z에서 가져온 etcd 백업을 사용해야 합니다.

중요

컨트롤 플레인 호스트에서 백업 스크립트를 실행하여 클러스터의 etcd 데이터를 백업합니다. 클러스터의 각 컨트롤 플레인 호스트마다 백업을 수행하지 마십시오.

etcd 백업 후 이전 클러스터 상태로 복원할 수 있습니다.

5.1.1. etcd 데이터 백업

다음 단계에 따라 etcd 스냅샷을 작성하고 정적 pod의 리소스를 백업하여 etcd 데이터를 백업합니다. 이 백업을 저장하여 etcd를 복원해야하는 경우 나중에 사용할 수 있습니다.

중요

단일 컨트롤 플레인 호스트의 백업만 저장합니다. 클러스터의 각 컨트롤 플레인 호스트에서 백업을 수행하지 마십시오.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • 클러스터 전체의 프록시가 활성화되어 있는지 확인해야 합니다.

    작은 정보

    oc get proxy cluster -o yaml의 출력을 확인하여 프록시가 사용 가능한지 여부를 확인할 수 있습니다. httpProxy, httpsProxynoProxy 필드에 값이 설정되어 있으면 프록시가 사용됩니다.

프로세스

  1. 컨트롤 플레인 노드의 root로 디버그 세션을 시작합니다.

    $ oc debug --as-root node/<node_name>
  2. 디버그 쉘에서 root 디렉토리를 /host 로 변경합니다.

    sh-4.4# chroot /host
  3. 클러스터 전체의 프록시가 활성화되어 있는 경우 NO_PROXY, HTTP_PROXYhttps_proxy 환경 변수를 내보내고 있는지 확인합니다.
  4. 디버그 쉘에서 cluster-backup.sh 스크립트를 실행하고 백업을 저장할 위치를 전달합니다.

    작은 정보

    cluster-backup.sh 스크립트는 etcd Cluster Operator의 구성 요소로 유지 관리되며 etcdctl snapshot save 명령 관련 래퍼입니다.

    sh-4.4# /usr/local/bin/cluster-backup.sh /home/core/assets/backup

    스크립트 출력 예

    found latest kube-apiserver: /etc/kubernetes/static-pod-resources/kube-apiserver-pod-6
    found latest kube-controller-manager: /etc/kubernetes/static-pod-resources/kube-controller-manager-pod-7
    found latest kube-scheduler: /etc/kubernetes/static-pod-resources/kube-scheduler-pod-6
    found latest etcd: /etc/kubernetes/static-pod-resources/etcd-pod-3
    ede95fe6b88b87ba86a03c15e669fb4aa5bf0991c180d3c6895ce72eaade54a1
    etcdctl version: 3.4.14
    API version: 3.4
    {"level":"info","ts":1624647639.0188997,"caller":"snapshot/v3_snapshot.go:119","msg":"created temporary db file","path":"/home/core/assets/backup/snapshot_2021-06-25_190035.db.part"}
    {"level":"info","ts":"2021-06-25T19:00:39.030Z","caller":"clientv3/maintenance.go:200","msg":"opened snapshot stream; downloading"}
    {"level":"info","ts":1624647639.0301006,"caller":"snapshot/v3_snapshot.go:127","msg":"fetching snapshot","endpoint":"https://10.0.0.5:2379"}
    {"level":"info","ts":"2021-06-25T19:00:40.215Z","caller":"clientv3/maintenance.go:208","msg":"completed snapshot read; closing"}
    {"level":"info","ts":1624647640.6032252,"caller":"snapshot/v3_snapshot.go:142","msg":"fetched snapshot","endpoint":"https://10.0.0.5:2379","size":"114 MB","took":1.584090459}
    {"level":"info","ts":1624647640.6047094,"caller":"snapshot/v3_snapshot.go:152","msg":"saved","path":"/home/core/assets/backup/snapshot_2021-06-25_190035.db"}
    Snapshot saved at /home/core/assets/backup/snapshot_2021-06-25_190035.db
    {"hash":3866667823,"revision":31407,"totalKey":12828,"totalSize":114446336}
    snapshot db and kube resources are successfully saved to /home/core/assets/backup

    이 예제에서는 컨트롤 플레인 호스트의 /home/core/assets/backup/ 디렉토리에 두 개의 파일이 생성됩니다.

    • snapshot_<datetimestamp>.db:이 파일은 etcd 스냅샷입니다. cluster-backup.sh 스크립트는 유효성을 확인합니다.
    • static_kuberesources_<datetimestamp>.tar.gz: 이 파일에는 정적 pod 리소스가 포함되어 있습니다. etcd 암호화가 활성화되어 있는 경우 etcd 스냅 샷의 암호화 키도 포함됩니다.

      참고

      etcd 암호화가 활성화되어 있는 경우 보안상의 이유로 이 두 번째 파일을 etcd 스냅 샷과 별도로 저장하는 것이 좋습니다. 그러나 이 파일은 etcd 스냅 샷에서 복원하는데 필요합니다.

      etcd 암호화는 키가 아닌 값만 암호화합니다. 즉, 리소스 유형, 네임 스페이스 및 개체 이름은 암호화되지 않습니다.

5.1.2. 추가 리소스

5.1.3. 자동화된 etcd 백업 생성

etcd의 자동화된 백업 기능은 반복 및 단일 백업을 모두 지원합니다. 반복 백업은 작업이 트리거될 때마다 단일 백업을 시작하는 cron 작업을 생성합니다.

중요

etcd 백업 자동화는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

5.1.3.1. 자동화된 etcd 백업 활성화

다음 단계에 따라 etcd에 대한 자동 백업을 활성화합니다.

주의

클러스터에 TechPreviewNoUpgrade 기능 세트를 활성화하면 마이너 버전 업데이트가 수행되지 않습니다. TechPreviewNoUpgrade 기능 세트를 비활성화할 수 없습니다. 프로덕션 클러스터에서 이 기능 세트를 활성화하지 마십시오.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • OpenShift CLI(oc)에 액세스할 수 있습니다.

프로세스

  1. 다음 콘텐츠를 사용하여 enable-tech-preview-no-upgrade.yaml 이라는 FeatureGate CR(사용자 정의 리소스) 파일을 생성합니다.

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: TechPreviewNoUpgrade
  2. CR을 적용하고 자동화된 백업을 활성화합니다.

    $ oc apply -f enable-tech-preview-no-upgrade.yaml
  3. 관련 API를 활성화하는 데 시간이 걸립니다. 다음 명령을 실행하여 CRD(사용자 정의 리소스 정의) 생성을 확인합니다.

    $ oc get crd | grep backup

    출력 예

    backups.config.openshift.io 2023-10-25T13:32:43Z
    etcdbackups.operator.openshift.io 2023-10-25T13:32:04Z

5.1.3.2. 단일 etcd 백업 생성

다음 단계에 따라 CR(사용자 정의 리소스)을 생성하고 적용하여 단일 etcd 백업을 생성합니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • OpenShift CLI(oc)에 액세스할 수 있습니다.
  • 백업 데이터를 저장할 PVC가 있습니다.

프로세스

  1. 다음 예와 같은 콘텐츠를 사용하여 etcd-single-backup.yaml 이라는 CR 파일을 만듭니다.

    apiVersion: operator.openshift.io/v1alpha1
    kind: EtcdBackup
    metadata:
      name: etcd-single-backup
      namespace: openshift-etcd
    spec:
      pvcName: etcd-backup-pvc <.>

    <.> 백업을 저장할 PVC(영구 볼륨 클레임)의 이름입니다. 환경에 따라 이 값을 조정합니다.

  2. CR을 적용하여 단일 백업을 시작합니다.

    $ oc apply -f etcd-single-backup.yaml

5.1.3.3. 반복적인 etcd 백업 생성

다음 단계에 따라 etcd의 자동 반복 백업을 생성합니다.

동적으로 프로비저닝된 스토리지를 사용하여 가능한 경우 생성된 etcd 백업 데이터를 안전한 외부 위치에 보관합니다. 동적으로 프로비저닝된 스토리지를 사용할 수 없는 경우 NFS 공유에 백업 데이터를 저장하여 백업 복구에 더 쉽게 액세스할 수 있도록 하는 것이 좋습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • OpenShift CLI(oc)에 액세스할 수 있습니다.

프로세스

  1. 동적으로 프로비저닝된 스토리지를 사용할 수 있는 경우 다음 단계를 완료하여 자동화된 반복 백업을 생성합니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 etcd-backup-pvc.yaml 이라는 PVC(영구 볼륨 클레임)를 생성합니다.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: etcd-backup-pvc
        namespace: openshift-etcd
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 200Gi <.>
        storageClassName: standard-csi <.>
        volumeMode: Filesystem

      PVC에서 사용할 수 있는 스토리지 용량입니다. 요구 사항에 맞게 이 값을 조정합니다. <.> 클레임에 필요한 StorageClass 의 이름입니다. 환경에 따라 이 값을 조정합니다.

      참고

      다음 공급자마다 accessModesstorageClassName 키를 변경해야 합니다.

      공급자accessModesstorageClassName value

      버전ed-installer-efc_operator-ci 프로필이 있는 AWS

      - ReadWriteMany

      efs-sc

      Google Cloud Platform

      - ReadWriteMany

      filestore-csi

      Microsoft Azure

      - ReadWriteMany

      azurefile-csi

    2. 다음 명령을 실행하여 PVC를 적용합니다.

      $ oc apply -f etcd-backup-pvc.yaml
    3. 다음 명령을 실행하여 PVC 생성을 확인합니다.

      $ oc get pvc

      출력 예

      NAME              STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      etcd-backup-pvc   Pending                                      standard-csi   51s

      참고

      동적 PVC는 마운트될 때까지 Pending 상태로 유지됩니다.

  2. 동적으로 프로비저닝된 스토리지를 사용할 수 없는 경우 다음 단계를 완료하여 로컬 스토리지 PVC를 생성합니다.

    주의

    저장된 백업 데이터가 포함된 노드에 대한 액세스 권한을 삭제하거나 손실하면 데이터가 손실될 수 있습니다.

    1. 다음 콘텐츠를 사용하여 etcd-backup-local-storage.yaml 이라는 StorageClass CR 파일을 만듭니다.

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: etcd-backup-local-storage
      provisioner: kubernetes.io/no-provisioner
      volumeBindingMode: WaitForFirstConsumer
    2. 다음 명령을 실행하여 StorageClass CR을 적용합니다.

      $ oc apply -f etcd-backup-local-storage.yaml
    3. 다음 예와 같은 콘텐츠를 사용하여 적용된 StorageClass 에서 etcd-backup-pv-fs.yaml 이라는 PV를 만듭니다.

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: etcd-backup-pv-fs
      spec:
        capacity:
          storage: 100Gi <.>
        volumeMode: Filesystem
        accessModes:
        - ReadWriteMany
        persistentVolumeReclaimPolicy: Delete
        storageClassName: local-storage
        local:
          path: /mnt/
        nodeAffinity:
          required:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                - <example-master-node> <.>

      <.> PV에서 사용할 수 있는 스토리지 용량입니다. 요구 사항에 맞게 이 값을 조정합니다. <.> 이 PV를 연결할 노드로 이 값을 바꿉니다.

      작은 정보

      다음 명령을 실행하여 사용 가능한 노드를 나열합니다.

      $ oc get nodes
    4. 다음 명령을 실행하여 PV 생성을 확인합니다.

      $ oc get pv

      출력 예

      NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS    REASON   AGE
      etcd-backup-pv-fs       100Gi      RWX            Delete           Available           local-storage            10s

    5. 다음 예와 같은 콘텐츠를 사용하여 etcd-backup-pvc.yaml 이라는 PVC를 만듭니다.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: etcd-backup-pvc
      spec:
        accessModes:
        - ReadWriteMany
        volumeMode: Filesystem
        resources:
          requests:
            storage: 10Gi <.>
        storageClassName: local-storage

      PVC에서 사용할 수 있는 스토리지 용량입니다. 요구 사항에 맞게 이 값을 조정합니다.

    6. 다음 명령을 실행하여 PVC를 적용합니다.

      $ oc apply -f etcd-backup-pvc.yaml
  3. etcd-recurring-backups.yaml 이라는 CRD(사용자 정의 리소스 정의) 파일을 생성합니다. 생성된 CRD의 내용은 자동 백업의 일정 및 보존 유형을 정의합니다.

    15개의 보존된 백업이 있는 보존 Number 의 기본 보존 유형은 다음 예와 같은 내용을 사용합니다.

    apiVersion: config.openshift.io/v1alpha1
    kind: Backup
    metadata:
      name: etcd-recurring-backup
    spec:
      etcd:
        schedule: "20 4 * * *" <.>
        timeZone: "UTC"
        pvcName: etcd-backup-pvc

    반복 백업의 CronTab 스케줄입니다. 요구 사항에 맞게 이 값을 조정합니다.

    최대 백업 수에 따라 보존을 사용하려면 다음 키-값 쌍을 etcd 키에 추가합니다.

    spec:
      etcd:
        retentionPolicy:
          retentionType: RetentionNumber <.>
          retentionNumber:
            maxNumberOfBackups: 5 <.>

    <.> 보존 유형. 지정되지 않은 경우 기본값은 RetentionNumber 입니다. <.> 보유할 최대 백업 수입니다. 요구 사항에 맞게 이 값을 조정합니다. 지정되지 않은 경우 기본값은 15 백업입니다.

    주의

    알려진 문제로 인해 보존된 백업 수가 구성된 값보다 큰 문제가 됩니다.

    백업 파일 크기에 따라 보존하려면 다음을 사용합니다.

    spec:
      etcd:
        retentionPolicy:
          retentionType: RetentionSize
          retentionSize:
            maxSizeOfBackupsGb: 20 <.>

    보관된 백업의 최대 파일 크기(GB)입니다. 요구 사항에 맞게 이 값을 조정합니다. 지정되지 않은 경우 기본값은 10GB입니다.

    주의

    알려진 문제로 인해 보존 백업의 최대 크기가 구성된 값보다 최대 10GB가 됩니다.

  4. 다음 명령을 실행하여 CRD에서 정의한 cron 작업을 생성합니다.

    $ oc create -f etcd-recurring-backup.yaml
  5. 생성된 cron 작업을 찾으려면 다음 명령을 실행합니다.

    $ oc get cronjob -n openshift-etcd
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.