3.2. etcd를 다른 디스크로 이동


성능 문제를 방지하거나 해결하기 위해 공유 디스크에서 별도의 디스크로 etcd를 이동할 수 있습니다.

MCO(Machine Config Operator)는 OpenShift Container Platform 4.19 컨테이너 스토리지를 위한 보조 디스크를 마운트하는 역할을 합니다.

참고

이 인코딩된 스크립트는 다음 장치 유형에 대한 장치 이름만 지원합니다.

SCSI 또는 SATA
/dev/sd*
가상 장치
/dev/vd*
NVMe
/dev/nvme*[0-9]*n*

제한

  • 새 디스크가 클러스터에 연결되면 etcd 데이터베이스가 루트 마운트의 일부가 됩니다. 기본 노드가 다시 생성될 때 이는 보조 디스크나 의도된 디스크의 일부가 아닙니다. 결과적으로 기본 노드는 별도의 /var/lib/etcd 마운트를 생성하지 않습니다.

사전 요구 사항

  • 클러스터의 etcd 데이터를 백업했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • 머신 구성을 업로드하기 전에 추가 디스크를 추가하세요.
  • MachineConfigPool은 metadata.labels[machineconfiguration.openshift.io/role] 와 일치해야 합니다. 이는 컨트롤러, 워커 또는 사용자 정의 풀에 적용됩니다.
참고

이 절차는 /var/ 과 같은 루트 파일 시스템의 일부를 설치된 노드의 다른 디스크나 파티션으로 이동하지 않습니다.

중요

제어 평면 머신 세트를 사용하는 경우 이 절차는 지원되지 않습니다.

프로세스

  1. 클러스터에 새 디스크를 연결하고 디버그 셸에서 lsblk 명령을 실행하여 디스크가 노드에서 감지되는지 확인합니다.

    $ oc debug node/<node_name>
    Copy to Clipboard Toggle word wrap
    # lsblk
    Copy to Clipboard Toggle word wrap

    lsblk 명령에서 보고된 새 디스크의 장치 이름을 기록해 보세요.

  2. 다음 스크립트를 만들고 etcd-find-secondary-device.sh 라고 이름을 지정합니다.

    #!/bin/bash
    set -uo pipefail
    
    for device in <device_type_glob>; do 
    1
    
    /usr/sbin/blkid "${device}" &> /dev/null
     if [ $? == 2  ]; then
        echo "secondary device found ${device}"
        echo "creating filesystem for etcd mount"
        mkfs.xfs -L var-lib-etcd -f "${device}" &> /dev/null
        udevadm settle
        touch /etc/var-lib-etcd-mount
        exit
     fi
    done
    echo "Couldn't find secondary block device!" >&2
    exit 77
    Copy to Clipboard Toggle word wrap
    1
    <device_type_glob>을 블록 장치 유형에 맞는 셸 글로브로 바꾸세요. SCSI 또는 SATA 드라이브의 경우 /dev/sd*를 사용하고, 가상 드라이브의 경우 /dev/vd*를 사용하고, NVMe 드라이브의 경우 /dev/nvme*[0-9]*n*을 사용합니다.
  3. etcd-find-secondary-device.sh 스크립트에서 base64로 인코딩된 문자열을 만들고 내용을 기록해 둡니다.

    $ base64 -w0 etcd-find-secondary-device.sh
    Copy to Clipboard Toggle word wrap
  4. 다음과 같은 내용을 포함하는 etcd-mc.yml 이라는 MachineConfig YAML 파일을 만듭니다.

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 98-var-lib-etcd
    spec:
      config:
        ignition:
          version: 3.5.0
        storage:
          files:
            - path: /etc/find-secondary-device
              mode: 0755
              contents:
                source: data:text/plain;charset=utf-8;base64,<encoded_etcd_find_secondary_device_script> 
    1
    
        systemd:
          units:
            - name: find-secondary-device.service
              enabled: true
              contents: |
                [Unit]
                Description=Find secondary device
                DefaultDependencies=false
                After=systemd-udev-settle.service
                Before=local-fs-pre.target
                ConditionPathExists=!/etc/var-lib-etcd-mount
    
                [Service]
                RemainAfterExit=yes
                ExecStart=/etc/find-secondary-device
    
                RestartForceExitStatus=77
    
                [Install]
                WantedBy=multi-user.target
            - name: var-lib-etcd.mount
              enabled: true
              contents: |
                [Unit]
                Before=local-fs.target
    
                [Mount]
                What=/dev/disk/by-label/var-lib-etcd
                Where=/var/lib/etcd
                Type=xfs
                TimeoutSec=120s
    
                [Install]
                RequiredBy=local-fs.target
            - name: sync-var-lib-etcd-to-etcd.service
              enabled: true
              contents: |
                [Unit]
                Description=Sync etcd data if new mount is empty
                DefaultDependencies=no
                After=var-lib-etcd.mount var.mount
                Before=crio.service
    
                [Service]
                Type=oneshot
                RemainAfterExit=yes
                ExecCondition=/usr/bin/test ! -d /var/lib/etcd/member
                ExecStart=/usr/sbin/setsebool -P rsync_full_access 1
                ExecStart=/bin/rsync -ar /sysroot/ostree/deploy/rhcos/var/lib/etcd/ /var/lib/etcd/
                ExecStart=/usr/sbin/semanage fcontext -a -t container_var_lib_t '/var/lib/etcd(/.*)?'
                ExecStart=/usr/sbin/setsebool -P rsync_full_access 0
                TimeoutSec=0
    
                [Install]
                WantedBy=multi-user.target graphical.target
            - name: restorecon-var-lib-etcd.service
              enabled: true
              contents: |
                [Unit]
                Description=Restore recursive SELinux security contexts
                DefaultDependencies=no
                After=var-lib-etcd.mount
                Before=crio.service
    
                [Service]
                Type=oneshot
                RemainAfterExit=yes
                ExecStart=/sbin/restorecon -R /var/lib/etcd/
                TimeoutSec=0
    
                [Install]
                WantedBy=multi-user.target graphical.target
    Copy to Clipboard Toggle word wrap
    1
    <encoded_etcd_find_secondary_device_script>를 귀하가 기록해 둔 인코딩된 스크립트 내용으로 바꾸세요.
  5. 생성된 MachineConfig YAML 파일을 적용합니다.

    $ oc create -f etcd-mc.yml
    Copy to Clipboard Toggle word wrap

검증 단계

  • 노드의 디버그 셸에서 grep /var/lib/etcd /proc/mounts 명령을 실행하여 디스크가 마운트되었는지 확인하세요.

    $ oc debug node/<node_name>
    Copy to Clipboard Toggle word wrap
    # grep -w "/var/lib/etcd" /proc/mounts
    Copy to Clipboard Toggle word wrap

    출력 예

    /dev/sdb /var/lib/etcd xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
    Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat