3.3. OpenShift Container Platform etcd 호스트에 대한 권장 사례
etcd는 OpenShift Container Platform에서 구성에 사용하는 분산 키-값 저장소입니다.
| OpenShift Container Platform 버전 | etcd 버전 | 스토리지 스키마 버전 |
| 3.3 및 이전 버전 | 2.x | v2 |
| 3.4 및 3.5 | 3.x | v2 |
| 3.6 | 3.x | v2 (upgrades) |
| 3.6 | 3.x | v3 (새 설치) |
| 3.7 이상 | 3.x | v3 |
etcd 3.x는 모든 크기의 클러스터에 대한 CPU, 메모리, 네트워크 및 디스크 요구 사항을 줄이는 중요한 확장성과 성능 향상을 제공합니다. etcd 3.x는 디스크상의 etcd 데이터베이스의 2단계 마이그레이션을 용이하게 하는 이전 버전과 호환되는 스토리지 API도 구현합니다. 마이그레이션을 위해 OpenShift Container Platform 3.5에서 etcd 3.x에서 사용하는 스토리지 모드는 v2 모드로 유지됩니다. OpenShift Container Platform 3.6부터 새로운 설치는 스토리지 모드 v3를 사용합니다. 이전 버전의 OpenShift Container Platform에서 업그레이드해도 v2에서 v3로 데이터가 자동으로 마이그레이션 되지 않습니다. 제공된 플레이북을 사용하고 문서화된 프로세스에 따라 데이터를 마이그레이션해야 합니다.
etcd 버전 3은 디스크의 etcd 데이터베이스를 2단계로 마이그레이션할 수 있도록 이전 버전과 호환되는 스토리지 API를 구현합니다. 마이그레이션을 위해 OpenShift Container Platform 3.5에서 etcd 3.x에서 사용하는 스토리지 모드는 v2 모드로 유지됩니다. OpenShift Container Platform 3.6부터 새로운 설치는 스토리지 모드 v3를 사용합니다. OpenShift Container Platform 3.7로 업그레이드하는 프로세스의 일부로 etcd 스토리지 API를 필요한 경우 v3로 업그레이드합니다. 버전 3.7 이상에서는 v3 API를 사용해야 합니다.
새 설치의 스토리지 모드를 v3으로 변경하는 것 외에도 OpenShift Container Platform 3.6은 모든 OpenShift Container Platform 유형에 대해 쿼럼 읽기 를 적용하기 시작합니다. 이는 etcd에 대한 쿼리가 오래된 데이터를 반환하지 않도록하기 위해 수행됩니다. 단일 노드 etcd 클러스터에서 오래된 데이터는 중요하지 않습니다. 일반적으로 프로덕션 클러스터에 있는 고가용성 etcd 배포에서 쿼럼은 유효한 쿼리 결과를 확인합니다. 쿼럼 읽기는 데이터베이스 용어에 선형 화됩니다. 모든 클라이언트는 클러스터의 최신 업데이트된 상태를 확인하고 모든 클라이언트는 동일한 읽기 및 쓰기 순서를 확인합니다. 성능 향상에 대한 자세한 내용은 etcd 3.1 공지 를 참조하십시오.
OpenShift Container Platform은 etcd를 사용하여 Kubernetes 자체보다 추가 정보를 저장하는 데 필요합니다. 예를 들어 OpenShift Container Platform은 OpenShift Container Platform이 Kubernetes 위에 추가하는 기능에 필요하므로 etcd의 이미지, 빌드 및 기타 구성 요소에 대한 정보를 저장합니다. 궁극적으로 etcd 호스트의 성능 및 크기 조정에 대한 지침은 적절한 방식으로 Kubernetes 및 기타 권장 사항과 다릅니다. Red Hat은 가장 정확한 권장 사항을 생성하기 위해 OpenShift Container Platform 사용 사례 및 매개변수를 사용하여 etcd 확장성과 성능을 테스트합니다.
cluster-loader 유틸리티를 사용하여 300-노드 OpenShift Container Platform 3.6 클러스터를 사용하여 성능이 저하되었습니다. etcd 3.x (storage mode v2)와 etcd 3.x (storage 모드 v3) 비교하면 아래 차트에서 명확한 개선 사항이 확인됩니다.
로드 중인 스토리지 IOPS가 크게 줄어듭니다.
스토리지 IOPS가 정상적인 상태에서도 크게 줄어듭니다.
동일한 I/O 데이터를 보고 두 모드에서 평균 IOPS를 플롯합니다.
API 서버(마스터) 및 etcd 프로세스의 CPU 사용량이 감소합니다.
API 서버(마스터)와 etcd 프로세스 둘 다의 메모리 사용률도 감소합니다.
OpenShift Container Platform에서 etcd를 프로파일링한 후 etcd는 종종 소량의 스토리지 입력 및 출력을 수행합니다. SSD와 같은 소규모 읽기/쓰기 작업을 신속하게 처리하는 스토리지로 etcd를 사용하는 것이 좋습니다.
etcd 3.1의 3-노드 클러스터에서 수행한 크기 I/O 작업을 확인(스토리지 v3 모드 사용 및 쿼럼 읽기 사용), 읽기 크기는 다음과 같습니다.
및 쓰기:
etcd 프로세스는 일반적으로 메모리 집약적입니다. 마스터/ API 서버 프로세스는 CPU 집약적입니다. 이렇게 하면 단일 머신 또는 VM(가상 머신) 내에서 합리적인 공동 배치 쌍입니다. 동일한 호스트에서 공동 배치하거나 전용 네트워크를 제공하여 etcd 호스트와 마스터 호스트 간의 통신을 최적화합니다.
3.3.1. OpenStack에서 PCI 패스스루를 사용하여 etcd 노드에 스토리지 제공 링크 복사링크가 클립보드에 복사되었습니다!
etcd가 대규모로 안정적으로 작동하도록 etcd 노드에 빠른 스토리지를 제공하려면 PCI 통과를 사용하여 NVMe(Non-volatile memory express) 장치를 etcd 노드에 직접 전달합니다. Red Hat OpenStack 11 이상으로 설정하려면 PCI 장치가 존재하는 OpenStack 컴퓨팅 노드에서 다음을 완료합니다.
- BIOS에서 Intel Vt-x가 활성화되어 있는지 확인합니다.
-
IOMMU(Input-output Memory Management Unit)를 활성화합니다. /etc/sysconfig/grub 파일에서 따옴표 안에
intel_iommu=on iommu=pt를GRUB_CMDLINX_LINUX행의 끝에 추가합니다. 다음을 실행하여 /etc/grub2.cfg 를 다시 생성합니다.
$ grub2-mkconfig -o /etc/grub2.cfg- 시스템을 재부팅합니다.
/etc/nova.conf 의 컨트롤러에서 다음을 수행합니다.
[filter_scheduler] enabled_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter available_filters=nova.scheduler.filters.all_filters [pci] alias = { "vendor_id":"144d", "product_id":"a820", "device_type":"type-PCI", "name":"nvme" }-
컨트롤러에서
nova-api및nova-scheduler를 다시 시작합니다. /etc/nova/nova.conf 의 Compute 노드에서 다음을 수행합니다.
[pci] passthrough_whitelist = { "address": "0000:06:00.0" } alias = { "vendor_id":"144d", "product_id":"a820", "device_type":"type-PCI", "name":"nvme" }통과하려는 NVMe 장치의 필요한
주소,vendor_id,product_id값을 검색하려면 다음을 실행합니다.# lspci -nn | grep devicename-
계산 노드에서
nova-compute를 다시 시작합니다. - NVMe를 사용하고 etcd 노드를 시작하도록 실행 중인 OpenStack 버전을 구성합니다.