1.6. etcd를 다른 디스크로 이동
공유 디스크에서 etcd를 별도의 디스크로 이동하여 성능 문제를 방지하거나 해결할 수 있습니다.
MCO(Machine Config Operator)는 OpenShift Container Platform 4.11 컨테이너 스토리지를 위한 보조 디스크를 마운트합니다.
이 절차에서는 루트 파일 시스템의 일부(예: /var/
)를 설치된 노드의 다른 디스크 또는 파티션으로 이동하지 않습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
권한이 있는 클러스터에 액세스할 수 있습니다. -
MachineConfigPool
은metadata.labels[machineconfiguration.openshift.io/role]
과 일치해야 합니다. 컨트롤러, 작업자 또는 사용자 지정 풀에 적용됩니다.
절차
새 디스크를 클러스터에 연결하고 디버그 쉘에서
lsblk
명령을 사용하여 노드에서 디스크가 감지되었는지 확인합니다.$ oc debug node/<node_name>
# lsblk
lsblk
명령에서 보고한 새 디스크의 장치 이름을 확인합니다.다음과 같은 내용이 포함된
etcd-mc.yml
이라는MachineConfig
YAML 파일을 생성하여 <new_disk_name
>의 인스턴스를 지정된 장치 이름으로 교체합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 98-var-lib-etcd spec: config: ignition: version: 3.2.0 systemd: units: - contents: | [Unit] Description=Make File System on /dev/<new_disk_name> DefaultDependencies=no BindsTo=dev-<new_disk_name>.device After=dev-<new_disk_name>.device var.mount Before=systemd-fsck@dev-<new_disk_name>.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/systemd-makefs xfs /dev/<new_disk_name> TimeoutSec=0 [Install] WantedBy=var-lib-containers.mount enabled: true name: systemd-mkfs@dev-<new_disk_name>.service - contents: | [Unit] Description=Mount /dev/<new_disk_name> to /var/lib/etcd Before=local-fs.target Requires=systemd-mkfs@dev-<new_disk_name>.service After=systemd-mkfs@dev-<new_disk_name>.service var.mount [Mount] What=/dev/<new_disk_name> Where=/var/lib/etcd Type=xfs Options=defaults,prjquota [Install] WantedBy=local-fs.target enabled: true name: var-lib-etcd.mount - 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=semanage fcontext -a -e /sysroot/ostree/deploy/rhcos/var/lib/etcd/ /var/lib/etcd/ ExecStart=/bin/rsync -ar /sysroot/ostree/deploy/rhcos/var/lib/etcd/ /var/lib/etcd/ TimeoutSec=0 [Install] WantedBy=multi-user.target graphical.target enabled: true name: sync-var-lib-etcd-to-etcd.service - 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 enabled: true name: restorecon-var-lib-etcd.service
cluster-admin
권한이 있는 사용자로 클러스터에 로그인하고 머신 구성을 생성합니다.$ oc login -u <username> -p <password>
$ oc create -f etcd-mc.yml
노드가 업데이트 및 재부팅됩니다. 재부팅이 완료되면 다음 이벤트가 수행됩니다.
- XFS 파일 시스템이 지정된 디스크에 생성됩니다.
-
디스크가
/var/lib/etcd
에 마운트되어 있습니다. -
/sysroot/ostree/deploy/rhcos/var/lib/etcd
의 콘텐츠와/var/lib/etcd
입니다. -
/var/lib/etcd
에 대해SELinux
레이블 복원이 강제 적용됩니다. - 이전 콘텐츠는 제거되지 않습니다.
노드가 별도의 디스크에 있는 후
etcd-mc.yml
파일을 다음과 같은 내용으로 업데이트하여 <new_disk_name
>의 인스턴스를 지정된 장치 이름으로 교체합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 98-var-lib-etcd spec: config: ignition: version: 3.2.0 systemd: units: - contents: | [Unit] Description=Mount /dev/<new_disk_name> to /var/lib/etcd Before=local-fs.target Requires=systemd-mkfs@dev-<new_disk_name>.service After=systemd-mkfs@dev-<new_disk_name>.service var.mount [Mount] What=/dev/<new_disk_name> Where=/var/lib/etcd Type=xfs Options=defaults,prjquota [Install] WantedBy=local-fs.target enabled: true name: var-lib-etcd.mount
노드가 재부팅되지 않도록 장치를 생성하고 동기화하는 논리를 제거하는 수정된 버전을 적용합니다.
$ oc replace -f etcd-mc.yml
검증 단계
노드의 디버그 쉘에서
grep <new_disk_name> /proc/mounts
명령을 실행하여 디스크가 마운트되었는지 확인합니다.$ oc debug node/<node_name>
# grep <new_disk_name> /proc/mounts
출력 예
/dev/nvme1n1 /var/lib/etcd xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,prjquota 0 0