2.9. OpenStack에서 컴퓨팅 머신 세트 생성
Red Hat OpenStack Platform (RHOSP)의 OpenShift Container Platform 클러스터에서 특정 목적을 충족하기 위해 다른 컴퓨팅 머신 세트를 생성할 수 있습니다. 예를 들어, 지원되는 워크로드를 새 머신으로 이동할 수 있도록 인프라 머신 세트 및 관련 머신을 작성할 수 있습니다.
머신 API가 작동하는 클러스터에서만 고급 머신 관리 및 스케일링 기능을 사용할 수 있습니다. 사용자 프로비저닝 인프라가 있는 클러스터에는 Machine API를 사용하려면 추가 검증 및 구성이 필요합니다.
인프라 플랫폼 유형의 클러스터가 Machine API를 사용할 수 없습니다. 이 제한은 클러스터에 연결된 컴퓨팅 시스템이 기능을 지원하는 플랫폼에 설치된 경우에도 적용됩니다. 이 매개변수는 설치 후 변경할 수 없습니다.
클러스터의 플랫폼 유형을 보려면 다음 명령을 실행합니다.
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'2.9.1. RHOSP에서 컴퓨팅 머신 세트 사용자 정의 리소스의 샘플 YAML
이 샘플 YAML은 RHOSP(Red Hat OpenStack Platform)에서 실행되는 컴퓨팅 머신 세트를 정의하고 node-role.kubernetes.io/<role>: "" 로 레이블이 지정된 노드를 만듭니다.
이 샘플에서 <infrastructure_id>는 클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로 하는 인프라 ID 레이블이며 <role>은 추가할 노드 레이블입니다.
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
machine.openshift.io/cluster-api-machine-role: <role> 2
machine.openshift.io/cluster-api-machine-type: <role> 3
name: <infrastructure_id>-<role> 4
namespace: openshift-machine-api
spec:
replicas: <number_of_replicas>
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 6
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id> 7
machine.openshift.io/cluster-api-machine-role: <role> 8
machine.openshift.io/cluster-api-machine-type: <role> 9
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 10
spec:
providerSpec:
value:
apiVersion: openstackproviderconfig.openshift.io/v1alpha1
cloudName: openstack
cloudsSecret:
name: openstack-cloud-credentials
namespace: openshift-machine-api
flavor: <nova_flavor>
image: <glance_image_name_or_location>
serverGroupID: <optional_UUID_of_server_group> 11
kind: OpenstackProviderSpec
networks: 12
- filter: {}
subnets:
- filter:
name: <subnet_name>
tags: openshiftClusterID=<infrastructure_id> 13
primarySubnet: <rhosp_subnet_UUID> 14
securityGroups:
- filter: {}
name: <infrastructure_id>-worker 15
serverMetadata:
Name: <infrastructure_id>-worker 16
openshiftClusterID: <infrastructure_id> 17
tags:
- openshiftClusterID=<infrastructure_id> 18
trunk: true
userDataSecret:
name: worker-user-data 19
availabilityZone: <optional_openstack_availability_zone>- 1 5 7 13 15 16 17 18
- 클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로하는 인프라 ID를 지정합니다. OpenShift CLI 패키지가 설치되어 있으면 다음 명령을 실행하여 인프라 ID를 얻을 수 있습니다.
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster - 2 3 8 9 19
- 추가할 노드 레이블을 지정합니다.
- 4 6 10
- 인프라 ID 및 노드 레이블을 지정합니다.
- 11
- MachineSet의 서버 그룹 정책을 설정하려면, 서버 그룹 생성에서 반환된 값을 입력합니다. 대부분의 배포에는
anti-affinity또는soft-anti-affinity정책이 권장됩니다. - 12
- 여러 네트워크에 배포해야 합니다. 여러 네트워크를 지정하려면 네트워크 배열에 다른 항목을 추가합니다. 또한
primarySubnet값으로 사용되는 네트워크를 포함해야 합니다. - 14
- 노드 엔드포인트를 게시할 RHOSP 서브넷을 지정합니다. 일반적으로 이 서브넷은
install-config.yaml파일에서machineSubnet값으로 사용되는 서브넷과 동일합니다.
2.9.2. RHOSP에서 SR-IOV를 사용하는 컴퓨팅 머신 세트 사용자 정의 리소스의 샘플 YAML
SR-IOV(Single-root I/O Virtualization)용으로 클러스터를 구성한 경우 해당 기술을 사용하는 컴퓨팅 머신 세트를 생성할 수 있습니다.
이 샘플 YAML은 SR-IOV 네트워크를 사용하는 컴퓨팅 머신 세트를 정의합니다. 생성된 노드에는 node-role.openshift.io/<node_role>: ""로 레이블이 지정됩니다.
이 샘플에서 infrastructure_id는 클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로 하는 인프라 ID 레이블이며 node_role은 추가할 노드 레이블입니다.
이 샘플은 "radio" 및 "uplink"라는 두 개의 SR-IOV 네트워크를 가정합니다. 네트워크는 spec.template.spec.providerSpec.value.ports 목록의 포트 정의에 사용됩니다.
SR-IOV 배포와 관련된 매개변수만 이 샘플에 설명되어 있습니다. 더 일반적인 샘플을 검토하려면 "RHOSP에서 컴퓨팅 머신 세트 사용자 정의 리소스의 샘플 YAML"을 참조하십시오.
SR-IOV 네트워크를 사용하는 컴퓨팅 머신 세트의 예
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machine-role: <node_role>
machine.openshift.io/cluster-api-machine-type: <node_role>
name: <infrastructure_id>-<node_role>
namespace: openshift-machine-api
spec:
replicas: <number_of_replicas>
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machine-role: <node_role>
machine.openshift.io/cluster-api-machine-type: <node_role>
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
spec:
metadata:
providerSpec:
value:
apiVersion: openstackproviderconfig.openshift.io/v1alpha1
cloudName: openstack
cloudsSecret:
name: openstack-cloud-credentials
namespace: openshift-machine-api
flavor: <nova_flavor>
image: <glance_image_name_or_location>
serverGroupID: <optional_UUID_of_server_group>
kind: OpenstackProviderSpec
networks:
- subnets:
- UUID: <machines_subnet_UUID>
ports:
- networkID: <radio_network_UUID> 1
nameSuffix: radio
fixedIPs:
- subnetID: <radio_subnet_UUID> 2
tags:
- sriov
- radio
vnicType: direct 3
portSecurity: false 4
- networkID: <uplink_network_UUID> 5
nameSuffix: uplink
fixedIPs:
- subnetID: <uplink_subnet_UUID> 6
tags:
- sriov
- uplink
vnicType: direct 7
portSecurity: false 8
primarySubnet: <machines_subnet_UUID>
securityGroups:
- filter: {}
name: <infrastructure_id>-<node_role>
serverMetadata:
Name: <infrastructure_id>-<node_role>
openshiftClusterID: <infrastructure_id>
tags:
- openshiftClusterID=<infrastructure_id>
trunk: true
userDataSecret:
name: <node_role>-user-data
availabilityZone: <optional_openstack_availability_zone>
SR-IOV를 사용할 수 있는 컴퓨팅 머신을 배포한 후 다음과 같이 라벨을 지정해야 합니다. 예를 들어 명령줄에서 다음을 입력합니다.
$ oc label node <NODE_NAME> feature.node.kubernetes.io/network-sriov.capable="true"
네트워크 및 서브넷 목록의 항목을 통해 생성된 포트에 대해 트렁킹이 활성화됩니다. 이러한 목록에서 생성된 포트의 이름은 <machine_name>-<nameSuffix> 패턴을 따릅니다. nameSuffix 필드는 포트 정의에 필요합니다.
각 포트에 대해 트렁킹을 활성화할 수 있습니다.
선택적으로 태그 목록의 일부로 포트에 tags를 추가할 수 있습니다.
2.9.3. 포트 보안이 비활성화된 SR-IOV 배포를 위한 샘플 YAML
포트 보안이 비활성화된 네트워크에서 SR-IOV(Single-root I/O virtualization) 포트를 생성하려면 포트를 spec.template.spec.providerSpec.value.ports 목록의 항목으로 포함하는 컴퓨팅 머신 세트를 정의합니다. 표준 SR-IOV 컴퓨팅 머신 세트와의 차이점은 네트워크 및 서브넷 인터페이스를 사용하여 생성되는 포트에 대해 발생하는 자동 보안 그룹 및 허용된 주소 쌍 구성으로 인해 발생합니다.
머신 서브넷에 대해 정의한 포트에는 다음이 필요합니다.
- API 및 ingress 가상 IP 포트에 허용되는 주소 쌍
- 컴퓨팅 보안 그룹
- 머신 네트워크 및 서브넷에 연결
포트 보안이 비활성화된 SR-IOV 배포와 관련된 매개변수만 이 샘플에 설명되어 있습니다. 더 일반적인 샘플을 검토하려면 RHOSP에서 SR-IOV를 사용하는 컴퓨팅 머신 세트 사용자 정의 리소스의 샘플 YAML을 참조하십시오.
SR-IOV 네트워크를 사용하고 포트 보안이 비활성화된 예제 컴퓨팅 머신 세트
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machine-role: <node_role>
machine.openshift.io/cluster-api-machine-type: <node_role>
name: <infrastructure_id>-<node_role>
namespace: openshift-machine-api
spec:
replicas: <number_of_replicas>
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machine-role: <node_role>
machine.openshift.io/cluster-api-machine-type: <node_role>
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
spec:
metadata: {}
providerSpec:
value:
apiVersion: openstackproviderconfig.openshift.io/v1alpha1
cloudName: openstack
cloudsSecret:
name: openstack-cloud-credentials
namespace: openshift-machine-api
flavor: <nova_flavor>
image: <glance_image_name_or_location>
kind: OpenstackProviderSpec
ports:
- allowedAddressPairs: 1
- ipAddress: <API_VIP_port_IP>
- ipAddress: <ingress_VIP_port_IP>
fixedIPs:
- subnetID: <machines_subnet_UUID> 2
nameSuffix: nodes
networkID: <machines_network_UUID> 3
securityGroups:
- <compute_security_group_UUID> 4
- networkID: <SRIOV_network_UUID>
nameSuffix: sriov
fixedIPs:
- subnetID: <SRIOV_subnet_UUID>
tags:
- sriov
vnicType: direct
portSecurity: False
primarySubnet: <machines_subnet_UUID>
serverMetadata:
Name: <infrastructure_ID>-<node_role>
openshiftClusterID: <infrastructure_id>
tags:
- openshiftClusterID=<infrastructure_id>
trunk: false
userDataSecret:
name: worker-user-data
네트워크 및 서브넷 목록의 항목을 통해 생성된 포트에 대해 트렁킹이 활성화됩니다. 이러한 목록에서 생성된 포트의 이름은 <machine_name>-<nameSuffix> 패턴을 따릅니다. nameSuffix 필드는 포트 정의에 필요합니다.
각 포트에 대해 트렁킹을 활성화할 수 있습니다.
선택적으로 태그 목록의 일부로 포트에 tags를 추가할 수 있습니다.
클러스터가 Kuryr를 사용하고 RHOSP SR-IOV 네트워크에 포트 보안이 비활성화된 경우 컴퓨팅 머신의 기본 포트에는 다음이 있어야 합니다.
-
spec.template.spec.providerSpec.value.networks.portSecurityEnabled매개변수의 값이false로 설정됩니다. -
각 서브넷의
spec.template.spec.providerSpec.value.networks.portSecurityEnabled매개변수 값이false로 설정됩니다. -
spec.template.spec.providerSpec.value.securityGroups값이 empty:[]로 설정됩니다.
SR-IOV를 사용하고 포트 보안이 비활성화된 Kuryr의 클러스터에 대한 컴퓨팅 머신 세트의 예제 섹션
...
networks:
- subnets:
- uuid: <machines_subnet_UUID>
portSecurityEnabled: false
portSecurityEnabled: false
securityGroups: []
...
이 경우 VM이 생성된 후 컴퓨팅 보안 그룹을 기본 VM 인터페이스에 적용할 수 있습니다. 예를 들어 명령줄에서 다음을 수행합니다.
$ openstack port set --enable-port-security --security-group <infrastructure_id>-<node_role> <main_port_ID>
SR-IOV를 사용할 수 있는 컴퓨팅 머신을 배포한 후 다음과 같이 라벨을 지정해야 합니다. 예를 들어 명령줄에서 다음을 입력합니다.
$ oc label node <NODE_NAME> feature.node.kubernetes.io/network-sriov.capable="true"
2.9.4. 컴퓨팅 머신 세트 생성
설치 프로그램에서 생성한 컴퓨팅 머신 세트 외에도 고유한 머신 세트를 생성하여 선택한 특정 워크로드의 머신 컴퓨팅 리소스를 동적으로 관리할 수 있습니다.
사전 요구 사항
- OpenShift Container Platform 클러스터를 배포합니다.
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로oc에 로그인합니다.
절차
컴퓨팅 머신 세트 CR(사용자 정의 리소스) 샘플이 포함된 새 YAML 파일을 만들고 <
file_name>.yaml이라는 이름을 지정합니다.<clusterID>및<role>매개 변수 값을 설정해야 합니다.선택 사항: 특정 필드에 설정할 값이 확실하지 않은 경우 클러스터에서 기존 컴퓨팅 머신 세트를 확인할 수 있습니다.
클러스터의 컴퓨팅 머신 세트를 나열하려면 다음 명령을 실행합니다.
$ oc get machinesets -n openshift-machine-api
출력 예
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m
특정 컴퓨팅 머신 세트 CR(사용자 정의 리소스)의 값을 보려면 다음 명령을 실행합니다.
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
출력 예
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-<role> 2 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <role> machine.openshift.io/cluster-api-machine-type: <role> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> spec: providerSpec: 3 ...
다음 명령을 실행하여
MachineSetCR을 생성합니다.$ oc create -f <file_name>.yaml
검증
다음 명령을 실행하여 컴퓨팅 머신 세트 목록을 확인합니다.
$ oc get machineset -n openshift-machine-api
출력 예
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-infra-us-east-1a 1 1 1 1 11m agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m
새 컴퓨팅 머신 세트를 사용할 수 있으면
DESIRED및CURRENT값이 일치합니다. 컴퓨팅 머신 세트를 사용할 수 없는 경우 몇 분 기다렸다가 명령을 다시 실행합니다.