22.3. OpenShift Ansible 플레이북을 사용하여 OpenShift Container Platform 인스턴스 프로비저닝
배포 호스트의 생성 및 구성이 완료되면 Ansible을 사용하여 OpenShift Container Platform 배포를 위한 환경을 준비합니다. 다음 하위 섹션에서 Ansible이 구성되고 특정 YAML 파일이 OpenStack 배포 시 OpenShift Container Platform을 성공적으로 수행하도록 수정됩니다.
22.3.1. 프로비저닝을 위한 인벤토리 준비
이전 단계를 통해 openshift-ansible
패키지를 설치하면 배포 호스트의 cloud
디렉터리가 있습니다.
-user 홈 디렉터리에 복사할 sample-
inventory
배포 호스트에서
$ cp -r /usr/share/ansible/openshift-ansible/playbooks/openstack/sample-inventory/ ~/inventory
이 인벤토리 디렉터리 내에서 all.yml 파일에는 RHOCP 인스턴스를 성공적으로 프로비저닝하기 위해 설정해야 하는 다양한 매개 변수가 모두 포함되어 있습니다. OSEv3.yml 파일에는 all.yml 파일에 필요한 몇 가지 참조와 사용자 지정할 수 있는 모든 사용 가능한 OpenShift Container Platform 클러스터 매개변수가 포함되어 있습니다.
22.3.1.1. OpenShiftSDN All YAML file
all.yml 파일에는 특정 요구 사항에 맞게 수정할 수 있는 많은 옵션이 있습니다. 이 파일에서 수집한 정보는 OpenShift Container Platform을 성공적으로 배포하는 데 필요한 인스턴스의 프로비저닝 부분에 사용됩니다. 이러한 내용을 신중하게 검토하는 것이 중요합니다. 이 문서에서는 All YAML 파일의 압축된 버전을 제공하고 성공적인 배포를 위해 설정해야 하는 가장 중요한 매개 변수에 중점을 둡니다.
$ cat ~/inventory/group_vars/all.yml --- openshift_openstack_clusterid: "openshift" openshift_openstack_public_dns_domain: *"example.com"* openshift_openstack_dns_nameservers: *["10.19.115.228"]* openshift_openstack_public_hostname_suffix: "-public" openshift_openstack_nsupdate_zone: "{{ openshift_openstack_public_dns_domain }}" openshift_openstack_keypair_name: *"openshift"* openshift_openstack_external_network_name: *"public"* openshift_openstack_default_image_name: *"rhel75"* ## Optional (Recommended) - This removes the need for floating IPs ## on the OpenShift Cluster nodes openshift_openstack_node_subnet_name: *<deployment-subnet-name>* openshift_openstack_router_name: *<deployment-router-name>* openshift_openstack_master_floating_ip: *false* openshift_openstack_infra_floating_ip: *false* openshift_openstack_compute_floating_ip: *false* ## End of Optional Floating IP section openshift_openstack_num_masters: *3* openshift_openstack_num_infra: *3* openshift_openstack_num_cns: *0* openshift_openstack_num_nodes: *2* openshift_openstack_master_flavor: *"m1.master"* openshift_openstack_default_flavor: *"m1.node"* openshift_openstack_use_lbaas_load_balancer: *true* openshift_openstack_docker_volume_size: "15" # # Roll-your-own DNS *openshift_openstack_external_nsupdate_keys:* public: *key_secret: '/alb8h0EAFWvb4i+CMA12w=='* *key_name: "update-key"* *key_algorithm: 'hmac-md5'* *server: '<ip-of-DNS>'* private: *key_secret: '/alb8h0EAFWvb4i+CMA12w=='* *key_name: "update-key"* *key_algorithm: 'hmac-md5'* *server: '<ip-of-DNS>'* ansible_user: openshift ## cloud config openshift_openstack_disable_root: true openshift_openstack_user: openshift
외부 DNS 서버를 사용하므로 private 및 public 섹션에서는 DNS 서버가 OpenStack 환경에 있지 않으므로 DNS 서버의 공용 IP 주소를 사용합니다.
별표(*)로 묶은 위의 값은 OpenStack 환경과 DNS 서버를 기반으로 수정해야 합니다.
모든 YAML 파일의 DNS 부분을 올바르게 수정하려면 DNS 서버에 로그인하고 다음 명령을 수행하여 키 이름, 키 알고리즘 및 키 시크릿을 캡처합니다.
$ ssh <ip-of-DNS> $ sudo -i # cat /etc/named/<key-name.key> key "update-key" { algorithm hmac-md5; secret "/alb8h0EAFWvb4i+CMA02w=="; };
키 이름은 다를 수 있으며 위의 이름은 예시일 뿐입니다.
22.3.1.2. KuryrSDN 모든 YAML 파일
다음 all.yml 파일은 기본 OpenShiftSDN 대신 Kuryr SDN을 활성화합니다. 아래 예제는 축소된 버전이므로 기본 템플릿을 주의 깊게 검토하는 것이 중요합니다.
$ cat ~/inventory/group_vars/all.yml --- openshift_openstack_clusterid: "openshift" openshift_openstack_public_dns_domain: *"example.com"* openshift_openstack_dns_nameservers: *["10.19.115.228"]* openshift_openstack_public_hostname_suffix: "-public" openshift_openstack_nsupdate_zone: "{{ openshift_openstack_public_dns_domain }}" openshift_openstack_keypair_name: *"openshift"* openshift_openstack_external_network_name: *"public"* openshift_openstack_default_image_name: *"rhel75"* ## Optional (Recommended) - This removes the need for floating IPs ## on the OpenShift Cluster nodes openshift_openstack_node_subnet_name: *<deployment-subnet-name>* openshift_openstack_router_name: *<deployment-router-name>* openshift_openstack_master_floating_ip: *false* openshift_openstack_infra_floating_ip: *false* openshift_openstack_compute_floating_ip: *false* ## End of Optional Floating IP section openshift_openstack_num_masters: *3* openshift_openstack_num_infra: *3* openshift_openstack_num_cns: *0* openshift_openstack_num_nodes: *2* openshift_openstack_master_flavor: *"m1.master"* openshift_openstack_default_flavor: *"m1.node"* ## Kuryr configuration openshift_use_kuryr: True openshift_use_openshift_sdn: False use_trunk_ports: True os_sdn_network_plugin_name: cni openshift_node_proxy_mode: userspace kuryr_openstack_pool_driver: nested openshift_kuryr_precreate_subports: 5 kuryr_openstack_public_net_id: *<public_ID>* # To disable namespace isolation, comment out the next 2 lines openshift_kuryr_subnet_driver: namespace openshift_kuryr_sg_driver: namespace # If you enable namespace isolation, `default` and `openshift-monitoring` become the # global namespaces. Global namespaces can access all namespaces. All # namespaces can access global namespaces. # To make other namespaces global, include them here: kuryr_openstack_global_namespaces: default,openshift-monitoring # If OpenStack cloud endpoints are accessible over HTTPS, provide the CA certificate kuryr_openstack_ca: *<path-to-ca-certificate>* openshift_master_open_ports: - service: dns tcp port: 53/tcp - service: dns udp port: 53/udp openshift_node_open_ports: - service: dns tcp port: 53/tcp - service: dns udp port: 53/udp # To set the pod network CIDR range, uncomment the following property and set its value: # # openshift_openstack_kuryr_pod_subnet_prefixlen: 24 # # The subnet prefix length value must be smaller than the CIDR value that is # set in the inventory file as openshift_openstack_kuryr_pod_subnet_cidr. # By default, this value is /24. # openshift_portal_net is the range that OpenShift services and their associated Octavia # load balancer VIPs use. Amphora VMs use Neutron ports in the range that is defined by # openshift_openstack_kuryr_service_pool_start and openshift_openstack_kuryr_service_pool_end. # # The value of openshift_portal_net in the OSEv3.yml file must be within the range that is # defined by openshift_openstack_kuryr_service_subnet_cidr. This range must be half # of openshift_openstack_kuryr_service_subnet_cidr's range. This practice ensures that # openshift_portal_net does not overlap with the range that load balancers' VMs use, which is # defined by openshift_openstack_kuryr_service_pool_start and openshift_openstack_kuryr_service_pool_end. # # For reference only, copy the value in the next line from OSEv3.yml: # openshift_portal_net: *"172.30.0.0/16"* openshift_openstack_kuryr_service_subnet_cidr: *"172.30.0.0/15"* openshift_openstack_kuryr_service_pool_start: *"172.31.0.1"* openshift_openstack_kuryr_service_pool_end: *"172.31.255.253"* # End of Kuryr configuration openshift_openstack_use_lbaas_load_balancer: *true* openshift_openstack_docker_volume_size: "15" # # Roll-your-own DNS *openshift_openstack_external_nsupdate_keys:* public: *key_secret: '/alb8h0EAFWvb4i+CMA12w=='* *key_name: "update-key"* *key_algorithm: 'hmac-md5'* *server: '<ip-of-DNS>'* private: *key_secret: '/alb8h0EAFWvb4i+CMA12w=='* *key_name: "update-key"* *key_algorithm: 'hmac-md5'* *server: '<ip-of-DNS>'* ansible_user: openshift ## cloud config openshift_openstack_disable_root: true openshift_openstack_user: openshift
네임스페이스 격리를 사용하는 경우 Kuryr-controller는 각 네임스페이스에 대해 새 Neutron 네트워크 및 서브넷을 생성합니다.
Kuryr SDN이 활성화되면 네트워크 정책 및 노드 포트 서비스가 지원되지 않습니다.
Kuryr가 활성화되면 OpenStack Octavia Amphora VM을 통해 OpenShift Container Platform 서비스가 구현됩니다.
Octavia는 UDP 로드 밸런싱을 지원하지 않습니다. UDP 포트를 노출하는 서비스는 지원되지 않습니다.
22.3.1.2.1. 글로벌 네임 스페이스 액세스 구성
The kuryr_openstack_global_namespace
매개 변수에는 글로벌 네임스페이스를 정의하는 목록이 포함되어 있습니다. 기본적으로 default
및 openshift-monitoring
네임스페이스만 이 목록에 포함되어 있습니다.
OpenShift Container Platform 3.11의 이전 z-release에서 업그레이드하는 경우 글로벌 네임스페이스의 다른 네임스페이스에 대한 액세스는 보안 그룹 *-allow_from_default
에서 제어합니다.
remote_group_id 규칙은
글로벌 네임스페이스에서 다른 네임스페이스에 대한 액세스를 제어할 수 있지만 를 사용하면 확장 및 연결 문제가 발생할 수 있습니다. 이러한 문제를 방지하려면 *_allow_from
를 사용하지 마십시오.
_default에서 remote_
idip_prefix로 remote_
group_
명령줄에서 네트워크의
subnetCIDR
값을 검색합니다.$ oc get kuryrnets ns-default -o yaml | grep subnetCIDR subnetCIDR: 10.11.13.0/24
이 범위에 대한 TCP 및 UDP 규칙을 생성합니다.
$ openstack security group rule create --remote-ip 10.11.13.0/24 --protocol tcp openshift-ansible-openshift.example.com-allow_from_default $ openstack security group rule create --remote-ip 10.11.13.0/24 --protocol udp openshift-ansible-openshift.example.com-allow_from_default
remote_group_id
를 사용하는 보안 그룹 규칙을 제거합니다.$ openstack security group show *-allow_from_default | grep remote_group_id $ openstack security group rule delete REMOTE_GROUP_ID
Variable | 설명 |
---|---|
openshift_openstack_clusterid | 클러스터 ID 이름 |
openshift_openstack_public_dns_domain | 퍼블릭 DNS 도메인 이름 |
openshift_openstack_dns_nameservers | DNS 이름 서버의 IP |
openshift_openstack_public_hostname_suffix | 공용 및 개인용 DNS 레코드의 노드 호스트 이름에 접미사를 추가합니다. |
openshift_openstack_nsupdate_zone | OCP 인스턴스 IP를 사용하여 업데이트할 영역 |
openshift_openstack_keypair_name | OCP 인스턴스에 로그인하는 데 사용되는 키 쌍 이름 |
openshift_openstack_external_network_name | OpenStack 공용 네트워크 이름 |
openshift_openstack_default_image_name | OCP 인스턴스에 사용되는 OpenStack 이미지 |
openshift_openstack_num_masters | 배포할 마스터 노드 수 |
openshift_openstack_num_infra | 배포할 인프라 노드 수 |
openshift_openstack_num_cns | 배포할 컨테이너 네이티브 스토리지 노드 수 |
openshift_openstack_num_nodes | 배포할 애플리케이션 노드 수 |
openshift_openstack_master_flavor | 마스터 인스턴스에 사용되는 OpenStack 플레이버의 이름 |
openshift_openstack_default_flavor | 특정 플레이버가 지정되지 않은 경우 모든 인스턴스에 사용되는 Openstack 플레이버의 이름입니다. |
openshift_openstack_use_lbaas_load_balancer | Octavia 로드 밸런서를 활성화하는 부울 값 (Octavia를 설치해야 함) |
openshift_openstack_docker_volume_size | Docker 볼륨의 최소 크기(필수 변수) |
openshift_openstack_external_nsupdate_keys | 인스턴스 IP 주소로 DNS 업데이트 |
ansible_user | OpenShift Container Platform을 배포하는 데 사용되는 Ansible 사용자입니다. "openshift"는 필수 이름이므로 변경해서는 안 됩니다. |
openshift_openstack_disable_root | 루트 액세스를 비활성화하는 부울 값 |
openshift_openstack_user | 이 사용자로 생성된 OCP 인스턴스 |
openshift_openstack_node_subnet_name | 배포에 사용할 기존 OpenShift 서브넷의 이름입니다. 이는 배포 호스트에 사용되는 서브넷 이름과 같아야 합니다. |
openshift_openstack_router_name | 배포에 사용할 기존 OpenShift 라우터의 이름입니다. 이는 배포 호스트에 사용된 라우터 이름과 같아야 합니다. |
openshift_openstack_master_floating_ip |
기본값은 |
openshift_openstack_infra_floating_ip |
기본값은 |
openshift_openstack_compute_floating_ip |
기본값은 |
openshift_use_openshift_sdn |
openshift-sdn을 비활성화하려면 |
openshift_use_kuryr |
kuryr sdn을 사용하려면 |
use_trunk_ports |
트렁크 포트가 있는 OpenStack VM을 생성하려면 |
os_sdn_network_plugin_name |
SDN 동작 선택. kuryr에 대해 to |
openshift_node_proxy_mode |
Kuryr의 |
openshift_master_open_ports | Kuryr를 사용할 때 VM에서 열 포트 |
kuryr_openstack_public_net_id | Kuryr의 필요성. FIP가 가져오는 퍼블릭 OpenStack 네트워크의 ID |
openshift_kuryr_subnet_driver |
Kuryr 서브넷 드라이버. |
openshift_kuryr_sg_driver |
Kuryr 보안 그룹 드라이버. 네임스페이스 격리를 위한 |
kuryr_openstack_global_namespaces |
네임스페이스 격리에 사용할 글로벌 네임스페이스입니다. 기본값은 |
kuryr_openstack_ca | 클라우드의 CA 인증서 경로입니다. HTTPS를 통해 OpenStack 클라우드 엔드포인트에 액세스할 수 있는 경우 필요합니다. |
22.3.1.3. OSEv3 YAML 파일
OSEv3 YAML 파일은 OpenShift 설치와 관련된 다른 매개 변수 및 사용자 지정을 모두 지정합니다.
다음은 성공적인 배포에 필요한 모든 변수가 포함된 파일의 축소 버전입니다. 특정 OpenShift Container Platform 배포에 필요한 사용자 지정에 따라 추가 변수가 필요할 수 있습니다.
$ cat ~/inventory/group_vars/OSEv3.yml --- openshift_deployment_type: openshift-enterprise openshift_release: v3.11 oreg_url: registry.access.redhat.com/openshift3/ose-${component}:${version} openshift_examples_modify_imagestreams: true oreg_auth_user: <oreg_auth_user> oreg_auth_password: <oreg_auth_pw> # The following is required if you want to deploy the Operator Lifecycle Manager (OLM) openshift_additional_registry_credentials: [{'host':'registry.connect.redhat.com','user':'REGISTRYCONNECTUSER','password':'REGISTRYCONNECTPASSWORD','test_image':'mongodb/enterprise-operator:0.3.2'}] openshift_master_default_subdomain: "apps.{{ (openshift_openstack_clusterid|trim == '') | ternary(openshift_openstack_public_dns_domain, openshift_openstack_clusterid + '.' + openshift_openstack_public_dns_domain) }}" openshift_master_cluster_public_hostname: "console.{{ (openshift_openstack_clusterid|trim == '') | ternary(openshift_openstack_public_dns_domain, openshift_openstack_clusterid + '.' + openshift_openstack_public_dns_domain) }}" #OpenStack Credentials: openshift_cloudprovider_kind: openstack openshift_cloudprovider_openstack_auth_url: "{{ lookup('env','OS_AUTH_URL') }}" openshift_cloudprovider_openstack_username: "{{ lookup('env','OS_USERNAME') }}" openshift_cloudprovider_openstack_password: "{{ lookup('env','OS_PASSWORD') }}" openshift_cloudprovider_openstack_tenant_name: "{{ lookup('env','OS_PROJECT_NAME') }}" openshift_cloudprovider_openstack_blockstorage_version: v2 openshift_cloudprovider_openstack_domain_name: "{{ lookup('env','OS_USER_DOMAIN_NAME') }}" openshift_cloudprovider_openstack_conf_file: <path_to_local_openstack_configuration_file> #Use Cinder volume for Openshift registry: openshift_hosted_registry_storage_kind: openstack openshift_hosted_registry_storage_access_modes: ['ReadWriteOnce'] openshift_hosted_registry_storage_openstack_filesystem: xfs openshift_hosted_registry_storage_volume_size: 30Gi openshift_hosted_registry_storage_openstack_volumeID: d65209f0-9061-4cd8-8827-ae6e2253a18d openshift_hostname_check: false ansible_become: true #Setting SDN (defaults to ovs-networkpolicy) not part of OSEv3.yml #For more info, on which to choose, visit: #https://docs.openshift.com/container-platform/3.11/architecture/networking/sdn.html#overview networkPluginName: redhat/ovs-networkpolicy #networkPluginName: redhat/ovs-multitenant #Configuring identity providers with Ansible #For initial cluster installations, the Deny All identity provider is configured #by default. It is recommended to be configured with either htpasswd #authentication, LDAP authentication, or Allowing all authentication (not recommended) #For more info, visit: #https://docs.openshift.com/container-platform/3.10/install_config/configuring_authentication.html#identity-providers-ansible #Example of Allowing All #openshift_master_identity_providers: [{'name': 'allow_all', 'login': 'true', 'challenge': 'true', 'kind': 'AllowAllPasswordIdentityProvider'}] #Optional Metrics (uncomment below lines for installation) #openshift_metrics_install_metrics: true #openshift_metrics_cassandra_storage_type: dynamic #openshift_metrics_storage_volume_size: 25Gi #openshift_metrics_cassandra_nodeselector: {"node-role.kubernetes.io/infra":"true"} #openshift_metrics_hawkular_nodeselector: {"node-role.kubernetes.io/infra":"true"} #openshift_metrics_heapster_nodeselector: {"node-role.kubernetes.io/infra":"true"} #Optional Aggregated Logging (uncomment below lines for installation) #openshift_logging_install_logging: true #openshift_logging_es_pvc_dynamic: true #openshift_logging_es_pvc_size: 30Gi #openshift_logging_es_cluster_size: 3 #openshift_logging_es_number_of_replicas: 1 #openshift_logging_es_nodeselector: {"node-role.kubernetes.io/infra":"true"} #openshift_logging_kibana_nodeselector: {"node-role.kubernetes.io/infra":"true"} #openshift_logging_curator_nodeselector: {"node-role.kubernetes.io/infra":"true"}
나열된 변수에 대한 자세한 내용은 OpenShift-Ansible 호스트 인벤토리 예제를 참조하십시오.