4.3. OpenShift Virtualization에 호스팅된 컨트롤 플레인 배포
호스팅된 컨트롤 플레인 및 OpenShift Virtualization을 사용하면 KubeVirt 가상 머신에서 호스팅하는 작업자 노드로 OpenShift Container Platform 클러스터를 생성할 수 있습니다. OpenShift Virtualization에서 호스팅되는 컨트롤 플레인은 다음과 같은 몇 가지 이점을 제공합니다.
- 동일한 기본 베어 메탈 인프라에서 호스트된 컨트롤 플레인 및 호스팅된 클러스터를 패키징하여 리소스 사용량 개선
- 강력한 격리를 제공하기 위해 호스팅되는 컨트롤 플레인과 호스팅 클러스터를 분리
- 베어 메탈 노드 부트스트랩 프로세스를 제거하여 클러스터 프로비저닝 시간 단축
- 동일한 기본 OpenShift Container Platform 클러스터에서 많은 릴리스 관리
호스트된 컨트롤 플레인 기능은 기본적으로 활성화되어 있습니다.
호스팅된 컨트롤 플레인 명령줄 인터페이스 hcp
를 사용하여 OpenShift Container Platform 호스팅 클러스터를 생성할 수 있습니다. 호스팅된 클러스터는 관리 클러스터로 자동으로 가져옵니다. 이 자동 가져오기 기능을 비활성화하려면 "호스트된 클러스터의 자동 가져오기 비활성화"를 참조하십시오.
4.3.1. OpenShift Virtualization에 호스팅된 컨트롤 플레인을 배포하기 위한 요구사항 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Virtualization에 호스팅된 컨트롤 플레인을 배포할 준비가 되면 다음 정보를 고려하십시오.
- 베어 메탈에서 관리 클러스터를 실행합니다.
- 각 호스트 클러스터에는 클러스터 전체 이름이 있어야 합니다.
-
클러스터를 호스팅
클러스터
이름으로 사용하지 마십시오. - 호스트된 클러스터는 다중 클러스터 엔진 Operator 관리 클러스터의 네임스페이스에서 생성할 수 없습니다.
- 호스트된 컨트롤 플레인에 대한 스토리지를 구성할 때 권장 etcd 사례를 고려하십시오. 대기 시간 요구 사항을 충족하는지 확인하려면 각 컨트롤 플레인 노드에서 실행되는 모든 호스팅 컨트롤 플레인 etcd 인스턴스에 빠른 스토리지 장치를 전용으로 지정합니다. LVM 스토리지를 사용하여 호스팅된 etcd pod의 로컬 스토리지 클래스를 구성할 수 있습니다. 자세한 내용은 "Recommended etcd practices" 및 "Persistent storage using Logical Volume Manager storage"를 참조하십시오.
4.3.1.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Virtualization에서 OpenShift Container Platform 클러스터를 생성하려면 다음 사전 요구 사항을 충족해야 합니다.
-
KUBECONFIG
환경 변수에 지정된 OpenShift Container Platform 클러스터 버전 4.14 이상에 대한 관리자 액세스 권한이 있어야 합니다. OpenShift Container Platform 관리 클러스터에는 다음 명령에 표시된 대로 와일드카드 DNS 경로가 활성화되어 있어야 합니다.
oc patch ingresscontroller -n openshift-ingress-operator default \ --type=json \ -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
$ oc patch ingresscontroller -n openshift-ingress-operator default \ --type=json \ -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Container Platform 관리 클러스터에는 OpenShift Virtualization, 버전 4.14 이상이 설치되어 있습니다. 자세한 내용은 "웹 콘솔을 사용하여 OpenShift Virtualization 설치"를 참조하십시오.
- OpenShift Container Platform 관리 클러스터는 온프레미스 베어 메탈입니다.
-
OpenShift Container Platform 관리 클러스터는
OVNKubernetes
를 기본 Pod 네트워크 CNI(Container Network Interface)로 사용하여 구성해야 합니다. CNI가 OVN-Kubernetes인 경우에만 노드에서 실시간 마이그레이션이 지원됩니다. OpenShift Container Platform 관리 클러스터에는 기본 스토리지 클래스가 있습니다. 자세한 내용은 "Postinstallation storage configuration"을 참조하십시오. 다음 예제에서는 기본 스토리지 클래스를 설정하는 방법을 보여줍니다.
oc patch storageclass ocs-storagecluster-ceph-rbd \ -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
$ oc patch storageclass ocs-storagecluster-ceph-rbd \ -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
quay.io/openshift-release-dev
리포지토리에 유효한 풀 시크릿 파일이 있습니다. 자세한 내용은 "사용자 프로비저닝 인프라가 있는 x86_64 플랫폼에 OpenShift 설치"를 참조하십시오. - 호스팅된 컨트롤 플레인 명령줄 인터페이스를 설치했습니다.
- 로드 밸런서를 구성했습니다. 자세한 내용은 " MetalLB 구성"을 참조하십시오.
- 최적의 네트워크 성능을 위해 KubeVirt 가상 머신을 호스팅하는 OpenShift Container Platform 클러스터에서 네트워크 최대 전송 단위(MTU)를 사용하고 있습니다. 더 낮은 MTU 설정을 사용하는 경우 호스트된 Pod의 네트워크 대기 시간과 처리량이 영향을 받습니다. MTU가 9000 이상인 경우에만 노드 풀에서 멀티 큐를 활성화합니다.
다중 클러스터 엔진 Operator에는 하나 이상의 관리형 OpenShift Container Platform 클러스터가 있습니다.
local-cluster
가 자동으로 가져옵니다.local-cluster
에 대한 자세한 내용은 다중 클러스터 엔진 Operator 설명서의 "고급 구성"을 참조하십시오. 다음 명령을 실행하여 허브 클러스터의 상태를 확인할 수 있습니다.oc get managedclusters local-cluster
$ oc get managedclusters local-cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
OpenShift Virtualization 가상 머신을 호스팅하는 OpenShift Container Platform 클러스터에서는 실시간 마이그레이션을 활성화할 수 있도록 RWX(
ReadWriteMany
) 스토리지 클래스를 사용하고 있습니다.
4.3.1.2. 방화벽 및 포트 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
포트가 관리 클러스터, 컨트롤 플레인 및 호스팅 클러스터 간에 통신할 수 있도록 방화벽 및 포트 요구 사항을 충족하는지 확인합니다.
kube-apiserver
서비스는 기본적으로 포트 6443에서 실행되며 컨트롤 플레인 구성 요소 간의 통신을 위해 수신 액세스가 필요합니다.-
NodePort
게시 전략을 사용하는 경우kube-apiserver
서비스에 할당된 노드 포트가 노출되어 있는지 확인합니다. - MetalLB 로드 밸런싱을 사용하는 경우 로드 밸런서 IP 주소에 사용되는 IP 범위에 대한 수신 액세스를 허용합니다.
-
-
NodePort
게시 전략을 사용하는 경우ignition-server
및Oauth-server
설정에 방화벽 규칙을 사용합니다. 호스팅된 클러스터에서 양방향 통신을 허용하도록 역방향 터널을 설정하는
konnectivity
에이전트에는 포트 6443의 클러스터 API 서버 주소에 대한 송신 액세스가 필요합니다. 이 송신 액세스를 사용하면 에이전트가kube-apiserver
서비스에 도달할 수 있습니다.- 클러스터 API 서버 주소가 내부 IP 주소인 경우 워크로드 서브넷에서 포트 6443의 IP 주소로 액세스를 허용합니다.
- 주소가 외부 IP 주소인 경우 6443 포트에서 노드에서 해당 외부 IP 주소로 송신을 허용합니다.
- 기본 6443 포트를 변경하는 경우 해당 변경 사항을 반영하도록 규칙을 조정합니다.
- 클러스터에서 실행되는 워크로드에 필요한 모든 포트를 열어야 합니다.
- 방화벽 규칙, 보안 그룹 또는 기타 액세스 제어를 사용하여 필요한 소스만 액세스를 제한합니다. 필요한 경우 포트를 공개적으로 노출하지 마십시오.
- 프로덕션 배포의 경우 로드 밸런서를 사용하여 단일 IP 주소를 통한 액세스를 단순화합니다.
4.3.2. 컴퓨팅 노드를 위한 실시간 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
호스트된 클러스터 가상 머신(VM)의 관리 클러스터는 업데이트 또는 유지 관리 수행 중이지만 호스트된 클러스터 VM은 호스트된 클러스터 워크로드 중단을 방지하기 위해 자동으로 실시간 마이그레이션될 수 있습니다. 결과적으로 KubeVirt 플랫폼 호스팅 클러스터의 가용성 및 작동에 영향을 미치지 않고 관리 클러스터를 업데이트할 수 있습니다.
VM이 root 볼륨 및 kubevirt-csi
CSI 공급자에 매핑되는 스토리지 클래스에 대해 RWX( ReadWriteMany
) 스토리지를 사용하는 경우 KubeVirt VM의 실시간 마이그레이션이 기본적으로 활성화됩니다.
NodePool
오브젝트의 status
섹션에서 KubeVirtNodesLiveMigratable
조건을 확인하여 노드 풀의 VM을 실시간 마이그레이션할 수 있는지 확인할 수 있습니다.
다음 예제에서는 RWX 스토리지가 사용되지 않기 때문에 VM을 실시간 마이그레이션할 수 없습니다.
VM을 실시간 마이그레이션할 수 없는 구성의 예
다음 예에서 VM은 실시간 마이그레이션 요구 사항을 충족합니다.
VM을 실시간으로 마이그레이션할 수 있는 구성 예
실시간 마이그레이션은 정상적인 상황에서 VM을 중단하지 않도록 보호할 수 있지만 인프라 노드 장애와 같은 이벤트는 실패한 노드에서 호스팅되는 모든 VM을 다시 시작할 수 있습니다. 실시간 마이그레이션이 성공하려면 VM이 호스팅되는 소스 노드가 올바르게 작동해야 합니다.
노드 풀의 VM을 실시간 마이그레이션할 수 없는 경우 관리 클러스터에서 유지 관리하는 동안 호스트된 클러스터에서 워크로드 중단이 발생할 수 있습니다. 기본적으로 호스팅되는 컨트롤 플레인 컨트롤러는 VM을 중지하기 전에 실시간 마이그레이션할 수 없는 KubeVirt VM에서 호스팅되는 워크로드를 드레이닝하려고 합니다. VM을 중지하기 전에 호스팅된 클러스터 노드를 드레이닝하면 Pod 중단 예산으로 인해 호스팅된 클러스터 내에서 워크로드 가용성을 보호할 수 있습니다.
4.3.3. KubeVirt 플랫폼을 사용하여 호스트 클러스터 생성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 4.14 이상에서는 KubeVirt로 클러스터를 생성하여 외부 인프라로 생성할 수 있습니다.
4.3.3.1. CLI를 사용하여 KubeVirt 플랫폼에서 호스트 클러스터 생성 링크 복사링크가 클립보드에 복사되었습니다!
호스트된 클러스터를 생성하려면 호스팅된 컨트롤 플레인 CLI(명령줄 인터페이스) hcp
를 사용할 수 있습니다.
프로세스
다음 명령을 입력하여 KubeVirt 플랫폼을 사용하여 호스팅된 클러스터를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고--release-image
플래그를 사용하여 특정 OpenShift Container Platform 릴리스로 호스팅 클러스터를 설정할 수 있습니다.--node-pool-replicas
플래그에 따라 두 개의 가상 머신 작업자 복제본이 있는 클러스터에 대한 기본 노드 풀이 생성됩니다.잠시 후 다음 명령을 입력하여 호스팅된 컨트롤 플레인 포드가 실행 중인지 확인합니다.
oc -n clusters-<hosted-cluster-name> get pods
$ oc -n clusters-<hosted-cluster-name> get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow KubeVirt 가상 머신에서 지원하는 작업자 노드가 있는 호스팅된 클러스터는 일반적으로 완전히 프로비저닝되는 데 10-15분이 걸립니다.
검증
호스트 클러스터의 상태를 확인하려면 다음 명령을 입력하여 해당
HostedCluster
리소스를 참조하십시오.oc get --namespace clusters hostedclusters
$ oc get --namespace clusters hostedclusters
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 완전히 프로비저닝된
HostedCluster
오브젝트를 설명하는 다음 예제 출력을 참조하십시오.NAMESPACE NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE clusters my-hosted-cluster <4.x.0> example-admin-kubeconfig Completed True False The hosted control plane is available
NAMESPACE NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE clusters my-hosted-cluster <4.x.0> example-admin-kubeconfig Completed True False The hosted control plane is available
Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;4.x.0
>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꿉니다.
4.3.3.2. 외부 인프라를 사용하여 KubeVirt 플랫폼으로 호스트 클러스터 생성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 HyperShift Operator는 동일한 클러스터 내에서 호스팅되는 클러스터의 컨트롤 플레인 Pod와 KubeVirt 작업자 VM을 모두 호스팅합니다. 외부 인프라 기능을 사용하면 작업자 노드 VM을 컨트롤 플레인 Pod와 별도의 클러스터에 배치할 수 있습니다.
- 관리 클러스터 는 HyperShift Operator를 실행하고 호스팅된 클러스터의 컨트롤 플레인 Pod를 호스팅하는 OpenShift Container Platform 클러스터입니다.
- 인프라 클러스터 는 호스팅된 클러스터의 KubeVirt 작업자 VM을 실행하는 OpenShift Container Platform 클러스터입니다.
- 기본적으로 관리 클러스터는 VM을 호스팅하는 인프라 클러스터 역할을 합니다. 그러나 외부 인프라의 경우 관리 및 인프라 클러스터는 다릅니다.
사전 요구 사항
- KubeVirt 노드를 호스팅하려면 외부 인프라 클러스터에 네임스페이스가 있어야 합니다.
-
외부 인프라 클러스터에 대한
kubeconfig
파일이 있어야 합니다.
프로세스
hcp
명령줄 인터페이스를 사용하여 호스트된 클러스터를 생성할 수 있습니다.
인프라 클러스터에 KubeVirt 작업자 VM을 배치하려면 다음 예와 같이
--infra-kubeconfig-file
및--infra-namespace
인수를 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 해당 명령을 입력하면 컨트롤 플레인 Pod가 HyperShift Operator가 실행되는 관리 클러스터에서 호스팅되고 KubeVirt VM은 별도의 인프라 클러스터에서 호스팅됩니다.
4.3.3.3. 콘솔을 사용하여 호스트 클러스터 생성 링크 복사링크가 클립보드에 복사되었습니다!
콘솔을 사용하여 KubeVirt 플랫폼으로 호스팅된 클러스터를 생성하려면 다음 단계를 완료하십시오.
프로세스
- OpenShift Container Platform 웹 콘솔을 열고 관리자 인증 정보를 입력하여 로그인합니다.
- 콘솔 헤더에서 모든 클러스터 가 선택되어 있는지 확인합니다.
- Infrastructure > Clusters를 클릭합니다.
- Create cluster > Red Hat OpenShift Virtualization > Hosted를 클릭합니다.
클러스터 생성 페이지에서 프롬프트에 따라 클러스터 및 노드 풀에 대한 세부 정보를 입력합니다.
참고- 사전 정의된 값을 사용하여 콘솔에서 필드를 자동으로 채우려면 OpenShift Virtualization 인증 정보를 생성할 수 있습니다. 자세한 내용은 "온-프레미스 환경에 대한 인증 정보 생성"을 참조하십시오.
- 클러스터 세부 정보 페이지에서 풀 시크릿은 OpenShift Container Platform 리소스에 액세스하는 데 사용하는 OpenShift Container Platform 풀 시크릿입니다. OpenShift Virtualization 인증 정보를 선택한 경우 풀 시크릿이 자동으로 채워집니다.
노드 풀 페이지에서 네트워킹 옵션 섹션을 확장하고 노드 풀에 대한 네트워킹 옵션을 구성합니다.
-
추가 네트워크 필드에 <
namespace>/<name> 형식으로 네트워크 이름을
입력합니다(예:my-namespace/network1
). 네임스페이스와 이름은 유효한 DNS 레이블이어야 합니다. 여러 네트워크가 지원됩니다. - 기본적으로 Attach default pod network 확인란이 선택됩니다. 추가 네트워크가 있는 경우에만 이 확인란을 지울 수 있습니다.
-
추가 네트워크 필드에 <
항목을 검토하고 생성 을 클릭합니다.
호스팅된 클러스터 보기가 표시됩니다.
검증
- Hosted 클러스터 보기에서 호스팅된 클러스터의 배포를 모니터링합니다. 호스팅된 클러스터에 대한 정보가 표시되지 않는 경우 모든 클러스터가 선택되어 있는지 확인하고 클러스터 이름을 클릭합니다.
- 컨트롤 플레인 구성 요소가 준비될 때까지 기다립니다. 이 프로세스는 몇 분 정도 걸릴 수 있습니다.
- 노드 풀 상태를 보려면 NodePool 섹션으로 스크롤합니다. 노드를 설치하는 프로세스에는 약 10분이 걸립니다. 노드를 클릭하여 노드가 호스팅된 클러스터에 참여하고 있는지 확인할 수도 있습니다.
4.3.4. OpenShift Virtualization에서 호스팅된 컨트롤 플레인의 기본 수신 및 DNS 구성 링크 복사링크가 클립보드에 복사되었습니다!
모든 OpenShift Container Platform 클러스터에는 기본 애플리케이션 Ingress 컨트롤러가 포함되어 있으며, 이와 연결된 와일드카드 DNS 레코드가 있어야 합니다. 기본적으로 HyperShift KubeVirt 공급자를 사용하여 생성된 호스팅 클러스터는 KubeVirt 가상 머신이 실행되는 OpenShift Container Platform 클러스터의 하위 도메인이 자동으로 됩니다.
예를 들어 OpenShift Container Platform 클러스터에 다음과 같은 기본 인그레스 DNS 항목이 있을 수 있습니다.
*.apps.mgmt-cluster.example.com
*.apps.mgmt-cluster.example.com
결과적으로 guest
라는 이름의 KubeVirt 호스팅 클러스터에는 다음과 같은 기본 수신이 있습니다.
*.apps.guest.apps.mgmt-cluster.example.com
*.apps.guest.apps.mgmt-cluster.example.com
프로세스
기본 인그레스 DNS가 제대로 작동하려면 KubeVirt 가상 머신을 호스팅하는 클러스터에서 와일드카드 DNS 경로를 허용해야 합니다.
다음 명령을 입력하여 이 동작을 구성할 수 있습니다.
oc patch ingresscontroller -n openshift-ingress-operator default \ --type=json \ -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
$ oc patch ingresscontroller -n openshift-ingress-operator default \ --type=json \ -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
기본 호스팅 클러스터 수신을 사용하는 경우 포트 443을 통한 HTTPS 트래픽으로 제한됩니다. 포트 80을 통한 일반 HTTP 트래픽이 거부됩니다. 이 제한은 기본 수신 동작에만 적용됩니다.
4.3.4.1. 사용자 정의 DNS 이름 정의 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 노드 부트스트랩 및 컨트롤 플레인 통신에 사용되는 내부 끝점과 다른 외부 API DNS 이름을 사용하여 호스팅 클러스터를 생성할 수 있습니다. 다음과 같은 이유로 다른 DNS 이름을 정의할 수 있습니다.
- 내부 루트 CA에 바인딩되는 컨트롤 플레인 기능을 중단하지 않고 사용자용 TLS 인증서를 공용 CA의 인증서로 교체하려면 다음을 수행합니다.
- 분할 수평 DNS 및 NAT 시나리오를 지원합니다.
-
올바른
kubeconfig
및 DNS 구성으로Show Login Command
기능과 같은 기능을 사용할 수 있는 독립 실행형 컨트롤 플레인과 유사한 환경을 보장하기 위해 다음을 수행합니다.
HostedCluster
오브젝트의 kubeAPIServerDNSName
매개변수에 도메인 이름을 입력하여 초기 설정 중 또는 설치 후 작업 중에 DNS 이름을 정의할 수 있습니다.
사전 요구 사항
-
kubeAPIServerDNSName
매개변수에 설정한 DNS 이름을 다루는 유효한 TLS 인증서가 있습니다. - 올바른 주소에 도달하고 가리킬 수 있는 확인 가능한 DNS 이름 URI가 있습니다.
프로세스
HostedCluster
오브젝트의 사양에서kubeAPIServerDNSName
매개변수와 도메인의 주소를 추가하고 다음 예와 같이 사용할 인증서를 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
kubeAPIServerDNSName
매개변수의 값은 유효한 도메인이어야 합니다.
kubeAPIServerDNSName
매개변수를 정의하고 인증서를 지정하면 Control Plane Operator 컨트롤러에서 custom-admin-
라는 kubeconfig 파일을 생성합니다. 여기서 파일이 kubeconfig
HostedControlPlane
네임스페이스에 저장됩니다. 인증서 생성은 루트 CA에서 발생하며 HostedControlPlane
네임스페이스는 만료 및 갱신을 관리합니다.
Control Plane Operator는 HostedControlPlane
네임스페이스에서 CustomKubeconfig
라는 새 kubeconfig
파일을 보고합니다. 해당 파일은 kubeAPIServerDNSName
매개변수에서 정의된 새 서버를 사용합니다.
사용자 정의 kubeconfig
파일에 대한 참조는 HostedCluster
오브젝트의 CustomKubeconfig
로 status
매개변수에 있습니다. CustomKubeConfig
매개변수는 선택 사항이며 kubeAPIServerDNSName
매개변수가 비어 있지 않은 경우에만 매개변수를 추가할 수 있습니다. CustomKubeConfig
매개변수를 설정한 후 매개변수는 HostedCluster
네임스페이스에서 < hosted_cluster_name>-custom-admin-kubeconfig
라는 보안 생성을 트리거합니다. 시크릿을 사용하여 HostedCluster
API 서버에 액세스할 수 있습니다. 설치 후 작업 중에 CustomKubeConfig
매개변수를 제거하면 모든 관련 보안 및 상태 참조가 삭제됩니다.
사용자 정의 DNS 이름을 정의해도 데이터 플레인에 직접적인 영향을 미치지 않으므로 예상되는 롤아웃이 발생하지 않습니다. HostedControlPlane
네임스페이스는 HyperShift Operator에서 변경 사항을 수신하고 해당 매개변수를 삭제합니다.
HostedCluster
오브젝트의 사양에서 kubeAPIServerDNSName
매개변수를 제거하면 새로 생성된 모든 보안 및 CustomKubeconfig
참조가 클러스터 및 status
매개변수에서 제거됩니다.
4.3.5. 수신 및 DNS 동작 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
기본 수신 및 DNS 동작을 사용하지 않으려면 생성 시 KubeVirt 호스팅 클러스터를 고유 기본 도메인으로 구성할 수 있습니다. 이 옵션을 사용하려면 생성 중에 수동 구성 단계가 필요하며 클러스터 생성, 로드 밸런서 생성 및 와일드카드 DNS 구성의 세 가지 주요 단계가 포함됩니다.
4.3.5.1. 기본 도메인을 지정하는 호스팅된 클러스터 배포 링크 복사링크가 클립보드에 복사되었습니다!
기본 도메인을 지정하는 호스팅 클러스터를 생성하려면 다음 단계를 완료합니다.
프로세스
다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 결과적으로 호스팅된 클러스터에는 클러스터 이름과 기본 도메인(예:
.apps.example.hypershift.lab
)에 대해 구성된 수신 와일드카드가 있습니다. 호스트 클러스터는 고유한 기본 도메인을 사용하여 호스팅 클러스터를 생성한 후 필요한 DNS 레코드 및 로드 밸런서를 구성해야 하므로부분적
상태로 유지됩니다.
검증
다음 명령을 입력하여 호스팅 클러스터의 상태를 확인합니다.
oc get --namespace clusters hostedclusters
$ oc get --namespace clusters hostedclusters
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE example example-admin-kubeconfig Partial True False The hosted control plane is available
NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE example example-admin-kubeconfig Partial True False The hosted control plane is available
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 클러스터에 액세스합니다.
hcp create kubeconfig --name <hosted_cluster_name> \ > <hosted_cluster_name>-kubeconfig
$ hcp create kubeconfig --name <hosted_cluster_name> \ > <hosted_cluster_name>-kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc --kubeconfig <hosted_cluster_name>-kubeconfig get co
$ oc --kubeconfig <hosted_cluster_name>-kubeconfig get co
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE console <4.x.0> False False False 30m RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.example.hypershift.lab): Get "https://console-openshift-console.apps.example.hypershift.lab": dial tcp: lookup console-openshift-console.apps.example.hypershift.lab on 172.31.0.10:53: no such host ingress <4.x.0> True False True 28m The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing)
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE console <4.x.0> False False False 30m RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.example.hypershift.lab): Get "https://console-openshift-console.apps.example.hypershift.lab": dial tcp: lookup console-openshift-console.apps.example.hypershift.lab on 172.31.0.10:53: no such host ingress <4.x.0> True False True 28m The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;4.x.0
>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꿉니다.
다음 단계
출력에서 오류를 수정하려면 "로드 밸런서 설정" 및 " 와일드카드 DNS 설정"의 단계를 완료합니다.
호스팅 클러스터가 베어 메탈에 있는 경우 로드 밸런서 서비스를 설정하려면 MetalLB가 필요할 수 있습니다. 자세한 내용은 " MetalLB 구성"을 참조하십시오.
4.3.5.2. 로드 밸런서 설정 링크 복사링크가 클립보드에 복사되었습니다!
Ingress 트래픽을 KubeVirt VM으로 라우팅하고 로드 밸런서 IP 주소에 와일드카드 DNS 항목을 할당하는 로드 밸런서 서비스를 설정합니다.
프로세스
호스팅된 클러스터 인그레스를 노출하는
NodePort
서비스가 이미 존재합니다. 노드 포트를 내보내고 해당 포트를 대상으로 하는 로드 밸런서 서비스를 생성할 수 있습니다.다음 명령을 입력하여 HTTP 노드 포트를 가져옵니다.
oc --kubeconfig <hosted_cluster_name>-kubeconfig get services \ -n openshift-ingress router-nodeport-default \ -o jsonpath='{.spec.ports[?(@.name=="http")].nodePort}'
$ oc --kubeconfig <hosted_cluster_name>-kubeconfig get services \ -n openshift-ingress router-nodeport-default \ -o jsonpath='{.spec.ports[?(@.name=="http")].nodePort}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 단계에서 사용할 HTTP 노드 포트 값을 확인합니다.
다음 명령을 입력하여 HTTPS 노드 포트를 가져옵니다.
oc --kubeconfig <hosted_cluster_name>-kubeconfig get services \ -n openshift-ingress router-nodeport-default \ -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}'
$ oc --kubeconfig <hosted_cluster_name>-kubeconfig get services \ -n openshift-ingress router-nodeport-default \ -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 단계에서 사용할 HTTPS 노드 포트 값을 확인합니다.
YAML 파일에 다음 정보를 입력합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 로드 밸런서 서비스를 생성합니다.
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.5.3. 와일드카드 DNS 설정 링크 복사링크가 클립보드에 복사되었습니다!
로드 밸런서 서비스의 외부 IP를 참조하는 와일드카드 DNS 레코드 또는 CNAME을 설정합니다.
프로세스
다음 명령을 입력하여 외부 IP 주소를 가져옵니다.
oc -n clusters-<hosted_cluster_name> get service <hosted-cluster-name>-apps \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
$ oc -n clusters-<hosted_cluster_name> get service <hosted-cluster-name>-apps \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
192.168.20.30
192.168.20.30
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 외부 IP 주소를 참조하는 와일드카드 DNS 항목을 구성합니다. 다음 예제 DNS 항목을 확인합니다.
*.apps.<hosted_cluster_name\>.<base_domain\>.
*.apps.<hosted_cluster_name\>.<base_domain\>.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DNS 항목은 클러스터 내부 및 외부에서 라우팅할 수 있어야 합니다.
DNS 확인 예
dig +short test.apps.example.hypershift.lab 192.168.20.30
dig +short test.apps.example.hypershift.lab 192.168.20.30
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음 명령을 입력하여 호스팅 클러스터 상태가
Partial
에서Completed
로 이동했는지 확인합니다.oc get --namespace clusters hostedclusters
$ oc get --namespace clusters hostedclusters
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE example <4.x.0> example-admin-kubeconfig Completed True False The hosted control plane is available
NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE example <4.x.0> example-admin-kubeconfig Completed True False The hosted control plane is available
Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;4.x.0
>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꿉니다.
4.3.6. MetalLB 구성 링크 복사링크가 클립보드에 복사되었습니다!
MetalLB를 구성하기 전에 MetalLB Operator를 설치해야 합니다.
프로세스
호스팅된 클러스터에서 MetalLB를 구성하려면 다음 단계를 완료합니다.
다음 샘플 YAML 콘텐츠를
configure-metallb.yaml
파일에 저장하여MetalLB
리소스를 생성합니다.apiVersion: metallb.io/v1beta1 kind: MetalLB metadata: name: metallb namespace: metallb-system
apiVersion: metallb.io/v1beta1 kind: MetalLB metadata: name: metallb namespace: metallb-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 YAML 콘텐츠를 적용합니다.
oc apply -f configure-metallb.yaml
$ oc apply -f configure-metallb.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
metallb.metallb.io/metallb created
metallb.metallb.io/metallb created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow create-ip-address-pool.yaml
파일에 다음 샘플 YAML 콘텐츠를 저장하여IPAddressPool
리소스를 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 노드 네트워크 내에서 사용 가능한 IP 주소 범위를 사용하여 주소 풀을 생성합니다. IP 주소 범위를 네트워크에서 사용 가능한 IP 주소의 사용되지 않는 풀로 바꿉니다.
다음 명령을 입력하여 YAML 콘텐츠를 적용합니다.
oc apply -f create-ip-address-pool.yaml
$ oc apply -f create-ip-address-pool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
ipaddresspool.metallb.io/metallb created
ipaddresspool.metallb.io/metallb created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow l2advertisement.yaml
파일에 다음 샘플 YAML 콘텐츠를 저장하여L2Advertisement
리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 YAML 콘텐츠를 적용합니다.
oc apply -f l2advertisement.yaml
$ oc apply -f l2advertisement.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
l2advertisement.metallb.io/metallb created
l2advertisement.metallb.io/metallb created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.7. 노드 풀에 대한 추가 네트워크, 보장된 CPU 및 VM 스케줄링 구성 링크 복사링크가 클립보드에 복사되었습니다!
노드 풀에 대한 추가 네트워크를 구성해야 하는 경우 가상 머신(VM)에 대한 보장된 CPU 액세스를 요청하거나 KubeVirt VM의 스케줄링을 관리해야 하는 경우 다음 절차를 참조하십시오.
4.3.7.1. 노드 풀에 여러 네트워크 추가 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 노드 풀에서 생성한 노드는 Pod 네트워크에 연결됩니다. Multus 및 NetworkAttachmentDefinitions를 사용하여 추가 네트워크를 노드에 연결할 수 있습니다.
프로세스
노드에 여러 네트워크를 추가하려면 다음 명령을 실행하여
--additional-network
인수를 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 호스트 클러스터의 이름을 지정합니다(예:
my-hosted-cluster
). - 2
- 작업자 노드 수를 지정합니다(예:
2
). - 3
- 풀 시크릿의 경로를 지정합니다(예:
/user/name/pullsecret
). - 4
- 메모리 값을 지정합니다(예:
8Gi
). - 5
- CPU 값을 지정합니다(예:
2
). - 6
-additional-network
인수의 값을name:<namespace/name> 로 설정합니다
. <namespace/name&
gt;을 NetworkAttachmentDefinitions의 네임스페이스 및 이름으로 바꿉니다.
4.3.7.1.1. 추가 네트워크를 기본값으로 사용 링크 복사링크가 클립보드에 복사되었습니다!
기본 Pod 네트워크를 비활성화하여 추가 네트워크를 노드의 기본 네트워크로 추가할 수 있습니다.
프로세스
노드에 기본 네트워크를 추가하려면 다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.7.2. 보장된 CPU 리소스 요청 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 KubeVirt VM은 노드의 다른 워크로드와 CPU를 공유할 수 있습니다. 이는 VM의 성능에 영향을 미칠 수 있습니다. 성능에 미치는 영향을 방지하기 위해 VM에 대해 보장된 CPU 액세스를 요청할 수 있습니다.
프로세스
보장된 CPU 리소스를 요청하려면 다음 명령을 실행하여
--qos-class
인수를Guaranteed
로 설정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.7.3. 노드 세트에서 KubeVirt VM 예약 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 노드 풀에서 생성한 KubeVirt VM은 사용 가능한 모든 노드에 예약됩니다. VM을 실행하는 데 충분한 용량이 있는 특정 노드 세트에서 KubeVirt VM을 예약할 수 있습니다.
프로세스
특정 노드 세트의 노드 풀 내에서 KubeVirt VM을 예약하려면 다음 명령을 실행하여
--vm-node-selector
인수를 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.8. 노드 풀 확장 링크 복사링크가 클립보드에 복사되었습니다!
oc scale
명령을 사용하여 노드 풀을 수동으로 확장할 수 있습니다.
프로세스
다음 명령을 실행합니다.
NODEPOOL_NAME=${CLUSTER_NAME}-work NODEPOOL_REPLICAS=5 $ oc scale nodepool/$NODEPOOL_NAME --namespace clusters \ --replicas=$NODEPOOL_REPLICAS
NODEPOOL_NAME=${CLUSTER_NAME}-work NODEPOOL_REPLICAS=5 $ oc scale nodepool/$NODEPOOL_NAME --namespace clusters \ --replicas=$NODEPOOL_REPLICAS
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 잠시 후 다음 명령을 입력하여 노드 풀의 상태를 확인합니다.
oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
$ oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.8.1. 노드 풀 추가 링크 복사링크가 클립보드에 복사되었습니다!
이름, 복제본 수 및 메모리 및 CPU 요구 사항과 같은 추가 정보를 지정하여 호스팅된 클러스터에 대한 노드 풀을 생성할 수 있습니다.
프로세스
노드 풀을 생성하려면 다음 정보를 입력합니다. 이 예에서 노드 풀에는 VM에 더 많은 CPU가 할당됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cluster 네임스페이스에
nodepool
리소스를 나열하여 노드 풀의상태를
확인합니다.oc get nodepools --namespace clusters
$ oc get nodepools --namespace clusters
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE example example 5 5 False False <4.x.0> example-extra-cpu example 2 False False True True Minimum availability requires 2 replicas, current 0 available
NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE example example 5 5 False False <4.x.0> example-extra-cpu example 2 False False True True Minimum availability requires 2 replicas, current 0 available
Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;4.x.0
>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꿉니다.
검증
잠시 후 다음 명령을 입력하여 노드 풀의 상태를 확인할 수 있습니다.
oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
$ oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 노드 풀이 예상되는 상태에 있는지 확인합니다.
oc get nodepools --namespace clusters
$ oc get nodepools --namespace clusters
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE example example 5 5 False False <4.x.0> example-extra-cpu example 2 2 False False <4.x.0>
NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE example example 5 5 False False <4.x.0> example-extra-cpu example 2 2 False False <4.x.0>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;4.x.0
>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꿉니다.
4.3.9. OpenShift Virtualization에서 호스트된 클러스터 생성 확인 링크 복사링크가 클립보드에 복사되었습니다!
호스팅 클러스터가 성공적으로 생성되었는지 확인하려면 다음 단계를 완료합니다.
프로세스
다음 명령을 입력하여
HostedCluster
리소스가완료된
상태로 전환되었는지 확인합니다.oc get --namespace clusters hostedclusters <hosted_cluster_name>
$ oc get --namespace clusters hostedclusters <hosted_cluster_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAMESPACE NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE clusters example 4.12.2 example-admin-kubeconfig Completed True False The hosted control plane is available
NAMESPACE NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE clusters example 4.12.2 example-admin-kubeconfig Completed True False The hosted control plane is available
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 호스팅 클러스터의 모든 클러스터 운영자가 온라인 상태인지 확인합니다.
hcp create kubeconfig --name <hosted_cluster_name> \ > <hosted_cluster_name>-kubeconfig
$ hcp create kubeconfig --name <hosted_cluster_name> \ > <hosted_cluster_name>-kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get co --kubeconfig=<hosted_cluster_name>-kubeconfig
$ oc get co --kubeconfig=<hosted_cluster_name>-kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.10. 호스트된 클러스터에서 사용자 정의 API 서버 인증서 구성 링크 복사링크가 클립보드에 복사되었습니다!
API 서버의 사용자 정의 인증서를 구성하려면 HostedCluster
구성의 spec.configuration.apiServer
섹션에 인증서 세부 정보를 지정합니다.
day-1 또는 day-2 작업 중에 사용자 정의 인증서를 구성할 수 있습니다. 그러나 호스트 클러스터 생성 중에 서비스 게시 전략은 변경할 수 없으므로 구성하려는 Kubernetes API 서버의 호스트 이름이 무엇인지 알아야 합니다.
사전 요구 사항
관리 클러스터에 사용자 정의 인증서가 포함된 Kubernetes 시크릿을 생성했습니다. 보안에는 다음 키가 포함되어 있습니다.
-
TLS.crt
: 인증서 -
TLS.key
: 개인 키
-
-
HostedCluster
구성에 로드 밸런서를 사용하는 서비스 게시 전략이 포함된 경우 인증서의 SAN(주체 대체 이름)이 내부 API 끝점(api-int
)과 충돌하지 않는지 확인합니다. 내부 API 끝점은 플랫폼에서 자동으로 생성 및 관리합니다. 사용자 정의 인증서와 내부 API 끝점 모두에서 동일한 호스트 이름을 사용하는 경우 라우팅 충돌이 발생할 수 있습니다. 이 규칙의 유일한 예외는Private
또는PublicAndPrivate
구성이 있는 공급자로 AWS를 사용하는 경우입니다. 이러한 경우 SAN 충돌은 플랫폼에 의해 관리됩니다. - 인증서는 외부 API 끝점에 유효해야 합니다.
- 인증서의 유효 기간은 클러스터의 예상 라이프 사이클과 일치합니다.
프로세스
다음 명령을 입력하여 사용자 정의 인증서로 보안을 생성합니다.
oc create secret tls sample-hosted-kas-custom-cert \ --cert=path/to/cert.crt \ --key=path/to/key.key \ -n <hosted_cluster_namespace>
$ oc create secret tls sample-hosted-kas-custom-cert \ --cert=path/to/cert.crt \ --key=path/to/key.key \ -n <hosted_cluster_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예와 같이 사용자 정의 인증서 세부 정보를 사용하여
HostedCluster
구성을 업데이트합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여
HostedCluster
구성에 변경 사항을 적용합니다.oc apply -f <hosted_cluster_config>.yaml
$ oc apply -f <hosted_cluster_config>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
- API 서버 pod를 확인하여 새 인증서가 마운트되었는지 확인합니다.
- 사용자 정의 도메인 이름을 사용하여 API 서버에 대한 연결을 테스트합니다.
-
브라우저에서 인증서 세부 정보를 확인하거나
openssl
과 같은 도구를 사용하여 확인합니다.