インフラストラクチャの設定(Contrail Networkingリリース21.4以降)
概要 Contrail Networkingリリース21.4以降を使用している場合、RHOSP 16環境でContrail Networking導入用のインフラストラクチャを設定するには、このトピックに従います。
この手順を使用する状況
Contrail Networkingリリース21.4以降を使用している場合は、このトピックを使用して、RHOSP 16環境でContrail Networking導入用のインフラストラクチャを設定する必要があります。
この手順では、ホストが Red Hat 仮想化 (RHV) を使用している場合に、インストール用のインフラストラクチャーをセットアップする方法を示します。Contrail Networkingは、リリース21.4でRed Hat仮想化(RHV)を使用してホストで動作するように拡張されました。
リリース 21.3 以前では、この手順はカーネルベースの仮想マシン(KVM)を使用するホストで実行されます。 インフラストラクチャの設定(Contrail Networkingリリース21.3以前) を参照してください。
Red Hat の仮想化について
この手順は、ホストが Red Hat 仮想化(RHV)を使用している場合に、RHOSP 16 環境で Contrail Networking デプロイメント用のインフラストラクチャを設定する方法の例を示しています。
RHV は、Red Hat Enterprise Linux と KVM 上に構築されたエンタープライズ仮想化プラットフォームです。RHV は Red Hat によって開発され、完全にサポートされています。
このトピックでは、RHOSP 16 を使用して RHOSP 16 環境に Contrail Networking を導入する方法の 1 つを説明することを目的としています。関連する RHV コンポーネントのドキュメントは、このトピックの範囲外です。
RHV の詳細については、Red Hat の Red Hat 仮想化の製品ドキュメント を参照してください。
RHV のインストールに関する追加情報については、Red Hat のコマンドラインドキュメントを使用したセルフホストエンジンとしての Red Hat 仮想化のインストール を参照してください。
Red Hat Virtualization Manager ホストの準備
Red Hat が提供する手順に従って、Red Hat Virtualization Manager ホストを準備します。Red Hat のコマンドラインガイドを使用してセルフホストエンジンとして Red Hat 仮想化をインストールする の章の「Red Hat 仮想化ホストのインストール」セクションを参照してください。
Red Hat Enterprise Linux を使用したホストのデプロイ
RHV を有効にするには、Red Hat Enterprise Linux (RHEL) を実行する必要があります。
このセクションでは、RHEL8 をデプロイする方法の例を示します。
必要なソフトウェアをインストールして有効にする
この例では、Red Hat Enterprise Linux 8 の運用に必要なソフトウェアを入手、インストール、および有効にする方法を示します。
# Register node with RedHat subscription # (for satellite check RedHat instruction) sudo subscription-manager register \ --username {username} \ --password {password} # Attach pools that allow to enable all required repos # e.g.: sudo subscription-manager attach \ --pool {RHOSP16.2 pool ID} \ --pool {Red Hat Virtualization Manager pool ID} # Enable repos sudo subscription-manager repos \ --disable='*' \ --enable=rhel-8-for-x86_64-baseos-rpms \ --enable=rhel-8-for-x86_64-appstream-rpms \ --enable=rhv-4-mgmt-agent-for-rhel-8-x86_64-rpms \ --enable=fast-datapath-for-rhel-8-x86_64-rpms \ --enable=advanced-virt-for-rhel-8-x86_64-rpms \ --enable=openstack-16.2-cinderlib-for-rhel-8-x86_64-rpms \ --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms # Remove cloud-init (in case if it virt test setup and cloud image used for deploy) sudo dnf remove -y cloud-init || true # Enable dnf modules and update system # For Red Hat Virtualization Manager 4.4 use virt:av # (for previous versions check RedHat documentation) sudo dnf module reset -y virt sudo dnf module enable -y virt:av sudo dnf distro-sync -y --nobest sudo dnf upgrade -y --nobest # Enable firewall sudo dnf install -y firewalld sudo systemctl enable --now firewalld # Check current active zone sudo firewall-cmd --get-active-zones # exmaple of zones: # public # interfaces: eth0 # Add virbr0 interface into the active zone for ovirtmgmt, e.g. sudo firewall-cmd --zone=public --change-zone=virbr0 --permanent sudo firewall-cmd --zone=public --add-forward --permanent # Ensure used interfaces in one zone sudo firewall-cmd --get-active-zones # exmaple of zones: # [stack@node-10-0-10-147 ~]$ sudo firewall-cmd --get-active-zones # public # interfaces: eth0 virbr0 # Enable https and cockpit for RHVM web access and monitoring sudo firewall-cmd --permanent \ --add-service=https \ --add-service=cockpit \ --add-service nfs sudo firewall-cmd --permanent \ --add-port 2223/tcp \ --add-port 5900-6923/tcp \ --add-port 2223/tcp \ --add-port 5900-6923/tcp \ --add-port 111/tcp --add-port 111/udp \ --add-port 2049/tcp --add-port 2049/udp \ --add-port 4045/tcp --add-port 4045/udp \ --add-port 1110/tcp --add-port 1110/udp # Prepare NFS Storage # adjust sysctl settings cat {{ EOF | sudo tee /etc/sysctl.d/99-nfs-tf-rhv.conf net.ipv4.tcp_mem=4096 65536 4194304 net.ipv4.tcp_rmem=4096 65536 4194304 net.ipv4.tcp_wmem=4096 65536 4194304 net.core.rmem_max=8388608 net.core.wmem_max=8388608 EOF sudo sysctl --system # install and enable NFS services sudo dnf install -y nfs-utils sudo systemctl enable --now nfs-server sudo systemctl enable --now rpcbind # prepare special user required by Red Hat Virtualization getent group kvm || sudo groupadd kvm -g 36 sudo useradd vdsm -u 36 -g kvm exports="/storage *(rw,all_squash,anonuid=36,anongid=36)\n" for s in vmengine undercloud ipa overcloud ; do sudo mkdir -p /storage/$s exports+="/storage/$s *(rw,all_squash,anonuid=36,anongid=36)\n" done sudo chown -R 36:36 /storage sudo chmod -R 0755 /storage # add storage directory to exports echo -e "$exports" | sudo tee /etc/exports # restart NFS services sudo systemctl restart rpcbind sudo systemctl restart nfs-server # check exports sudo exportfs # Rebbot system In case if newer kernel availalbe in /lib/modules latest_kv=$(ls -1 /lib/modules | sort -V | tail -n 1) active_kv=$(uname -r) if [[ "$latest_kv" != "$active_kv" ]] ; then echo "INFO: newer kernel version $latest_kv is available, active one is $active_kv" echo "Perform reboot..." sudo reboot fi
ドメイン名の確認
続行する前に、完全修飾ドメイン名 (FQDN) が DNS またはすべてのノードの /etc/hosts によって解決できることを確認してください。
[stack@node-10-0-10-147 ~]$ cat /etc/hosts # Red Hat Virtualization Manager VM 10.0.10.200 vmengine.dev.clouddomain vmengine.dev vmengine # Red Hat Virtualization Hosts 10.0.10.147 node-10-0-10-147.dev.clouddomain node-10-0-10-147.dev node-10-0-10-147 10.0.10.148 node-10-0-10-148.dev.clouddomain node-10-0-10-148.dev node-10-0-10-148 10.0.10.149 node-10-0-10-149.dev.clouddomain node-10-0-10-149.dev node-10-0-10-149 10.0.10.150 node-10-0-10-150.dev.clouddomain node-10-0-10-150.dev node-10-0-10-150
最初のノードへの Red Hat 仮想化マネージャーのデプロイ
このセクションでは、Red Hat Virtual Manager (RHVM) のデプロイ方法について説明します。
- Red Hat Virtualization Manager アプライアンスを有効にする
- セルフホステッド エンジンのデプロイ
- virh CLI で oVirt 認証を使用できるようにする
- Red Hat Virtualization Manager リポジトリの有効化
Red Hat Virtualization Manager アプライアンスを有効にする
Red Hat Virtualization Manager Appliance を有効にするには:
sudo dnf install -y \ tmux \ rhvm-appliance \ ovirt-hosted-engine-setup
セルフホステッド エンジンのデプロイ
セルフホステッド エンジンをデプロイするには:
# !!! During deploy you need answer questions sudo hosted-engine --deploy # example of adding ansible vars into deploy command # sudo hosted-engine --deploy --ansible-extra-vars=he_ipv4_subnet_prefix=10.0.10 # example of an answer: # ... # Please specify the storage you would like to use (glusterfs, iscsi, fc, nfs)[nfs]: # Please specify the nfs version you would like to use (auto, v3, v4, v4_0, v4_1, v4_2)[auto]: # Please specify the full shared storage connection path to use (example: host:/path): 10.0.10.147:/storage/vmengine # ...
展開中に NFS タスクに進む前に、必要なすべてのインターフェイスが IP 転送用に 1 つのゾーンにあることを確認してください。
sudo firewall-cmd --get-active-zones # exmaple of zones: # [stack@node-10-0-10-147 ~]$ sudo firewall-cmd --get-active-zones # public # interfaces: ovirtmgmt eth0 virbr0
virh CLI で oVirt 認証を使用できるようにする
virh cli で oVirt 認証を使用できるようにするには:
sudo ln -s /etc/ovirt-hosted-engine/virsh_auth.conf /etc/libvirt/auth.conf
Red Hat Virtualization Manager リポジトリの有効化
RHVM リポジトリを有効にするには:
ノードの展開とネットワークの有効化
このセクションのタスクに従って、ノードをデプロイし、ネットワークを有効にします。
Ansible 環境ファイルを準備する
Ansible 環境ファイルを準備するには、次の手順を実行します。
# Common variables # !!! Adjust to your setup - especially undercloud_mgmt_ip and # ipa_mgmt_ip to allow SSH to this machines (e.g. choose IPs from ovirtmgmt network) cat << EOF > common-env.yaml --- ovirt_hostname: vmengine.dev.clouddomain ovirt_user: "admin@internal" ovirt_password: "qwe123QWE" datacenter_name: Default # to access hypervisors ssh_public_key: false ssh_root_password: "qwe123QWE" # gateway for VMs (undercloud and ipa) mgmt_gateway: "10.0.10.1" # dns to be set in ipa and initial dns for UC # k8s nodes uses ipa as dns dns_server: "10.0.10.1" undercloud_name: "undercloud" undercloud_mgmt_ip: "10.0.10.201" undercloud_ctlplane_ip: "192.168.24.1" ipa_name: "ipa" ipa_mgmt_ip: "10.0.10.205" ipa_ctlplane_ip: "192.168.24.5" overcloud_domain: "dev.clouddomain" EOF # Hypervisor nodes # !! Adjust to your setup # Important: ensure you use correct node name for already registered first hypervisor # (it is registed at the RHVM deploy command hosted-engine --deploy) cat << EOF > nodes.yaml --- nodes: # !!! Adjust networks and power management options for your needs - name: node-10-0-10-147.dev.clouddomain ip: 10.0.10.147 cluster: Default comment: 10.0.10.147 networks: - name: ctlplane phy_dev: eth1 - name: tenant phy_dev: eth2 # provide power management if needed (for all nodes) # pm: # address: 192.168.122.1 # port: 6230 # user: ipmi # password: qwe123QWE # type: ipmilan # options: # ipmilanplus: true - name: node-10-0-10-148.dev.clouddomain ip: 10.0.10.148 cluster: node-10-0-10-148 comment: 10.0.10.148 networks: - name: ctlplane phy_dev: eth1 - name: tenant phy_dev: eth2 - name: node-10-0-10-149.dev.clouddomain ip: 10.0.10.149 cluster: node-10-0-10-149 comment: 10.0.10.149 networks: - name: ctlplane phy_dev: eth1 - name: tenant phy_dev: eth2 - name: node-10-0-10-150.dev.clouddomain ip: 10.0.10.150 cluster: node-10-0-10-150 comment: 10.0.10.150 networks: - name: ctlplane phy_dev: eth1 - name: tenant phy_dev: eth2 # !!! Adjust storages according to your setup architecture storage: - name: undercloud mountpoint: "/storage/undercloud" host: node-10-0-10-147.dev.clouddomain address: node-10-0-10-147.dev.clouddomain - name: ipa mountpoint: "/storage/ipa" host: node-10-0-10-147.dev.clouddomain address: node-10-0-10-147.dev.clouddomain - name: node-10-0-10-148-overcloud mountpoint: "/storage/overcloud" host: node-10-0-10-148.dev.clouddomain address: node-10-0-10-148.dev.clouddomain - name: node-10-0-10-149-overcloud mountpoint: "/storage/overcloud" host: node-10-0-10-149.dev.clouddomain address: node-10-0-10-149.dev.clouddomain - name: node-10-0-10-150-overcloud mountpoint: "/storage/overcloud" host: node-10-0-10-150.dev.clouddomain address: node-10-0-10-150.dev.clouddomain EOF # Playbook to register hypervisor nodes in RHVM, create storage pools and networks # Adjust values to your setup!!! cat << EOF > infra.yaml - hosts: localhost tasks: - name: Get RHVM token ovirt_auth: url: "https://{{ ovirt_hostname }}/ovirt-engine/api" username: "{{ ovirt_user }}" password: "{{ ovirt_password }}" insecure: true - name: Create datacenter ovirt_datacenter: state: present auth: "{{ ovirt_auth }}" name: "{{ datacenter_name }}" local: false - name: Create clusters {{ item.name }} ovirt_cluster: state: present auth: "{{ ovirt_auth }}" name: "{{ item.cluster }}" data_center: "{{ datacenter_name }}" ksm: true ballooning: true memory_policy: server with_items: - "{{ nodes }}" - name: List host in datacenter ovirt_host_info: auth: "{{ ovirt_auth }}" pattern: "datacenter={{ datacenter_name }}" register: host_list - set_fact: hostnames: [] - name: List hostname set_fact: hostnames: "{{ hostnames + [ item.name ] }}" with_items: - "{{ host_list['ovirt_hosts'] }}" - name: Register in RHVM ovirt_host: state: present auth: "{{ ovirt_auth }}" name: "{{ item.name }}" cluster: "{{ item.cluster }}" address: "{{ item.ip }}" comment: "{{ item.comment | default(item.ip) }}" power_management_enabled: "{{ item.power_management_enabled | default(false) }}" # unsupported in rhel yet - to avoid reboot create node via web # reboot_after_installation: "{{ item.reboot_after_installation | default(false) }}" reboot_after_upgrade: "{{ item.reboot_after_upgrade | default(false) }}" public_key: "{{ ssh_public_key }}" password: "{{ ssh_root_password }}" register: task_result until: not task_result.failed retries: 5 delay: 10 when: item.name not in hostnames with_items: - "{{ nodes }}" - name: Register Power Management for host ovirt_host_pm: state: present auth: "{{ ovirt_auth }}" name: "{{ item.name }}" address: "{{ item.pm.address }}" username: "{{ item.pm.user }}" password: "{{ item.pm.password }}" type: "{{ item.pm.type }}" options: "{{ item.pm.pm_options | default(omit) }}" when: item.pm is defined with_items: - "{{ nodes }}" - name: Create storage domains ovirt_storage_domain: state: present auth: "{{ ovirt_auth }}" data_center: "{{ datacenter_name }}" name: "{{ item.name }}" domain_function: "data" host: "{{ item.host }}" nfs: address: "{{ item.address | default(item.host) }}" path: "{{ item.mountpoint }}" version: "auto" register: task_result until: not task_result.failed retries: 5 delay: 10 with_items: - "{{ storage }}" - name: Create logical networks ovirt_network: state: present auth: "{{ ovirt_auth }}" data_center: "{{ datacenter_name }}" name: "{{ datacenter_name }}-{{ item.1.name }}" clusters: - name: "{{ item.0.cluster }}" vlan_tag: "{{ item.1.vlan | default(omit)}}" vm_network: true with_subelements: - "{{ nodes }}" - networks - name: Create host networks ovirt_host_network: state: present auth: "{{ ovirt_auth }}" networks: - name: "{{ datacenter_name }}-{{ item.1.name }}" boot_protocol: none name: "{{ item.0.name }}" interface: "{{ item.1.phy_dev }}" with_subelements: - "{{ nodes }}" - networks - name: Remove vNICs network_filter ovirt.ovirt.ovirt_vnic_profile: state: present auth: "{{ ovirt_auth }}" name: "{{ datacenter_name }}-{{ item.1.name }}" network: "{{ datacenter_name }}-{{ item.1.name }}" data_center: "{{ datacenter_name }}" network_filter: "" with_subelements: - "{{ nodes }}" - networks - name: Revoke SSO Token ovirt_auth: state: absent ovirt_auth: "{{ ovirt_auth }}" EOF
ノードとネットワーキングの展開
ノードを展開してネットワークを有効にするには:
ansible-playbook \ --extra-vars="@common-env.yaml" \ --extra-vars="@nodes.yaml" \ infra.yaml
ホストの確認
ホストが再起動ステータスの場合は、拡張メニューに移動し、[ホストが再起動されたことを確認する]を選択します。
イメージの準備
イメージを準備するには:
オーバークラウド VM の作成
このセクションの手順に従って、オーバークラウド VM を作成します。
Kubernetes クラスター用のイメージの準備
KubernetesクラスターにContrailコントロールプレーンを展開する場合は、次の例に従ってContrailコントローラ用のイメージを準備します。
cd cloud_image=images/rhel-8.4-x86_64-kvm.qcow2 root_password=contrail123 stack_password=contrail123 export LIBGUESTFS_BACKEND=direct qemu-img create -f qcow2 images/overcloud.qcow2 100G virt-resize --expand /dev/sda3 ${cloud_image} images/overcloud.qcow2 virt-customize -a images/overcloud.qcow2 \ --run-command 'xfs_growfs /' \ --root-password password:${root_password} \ --run-command 'useradd stack' \ --password stack:password:${stack_password} \ --run-command 'echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack' \ --chmod 0440:/etc/sudoers.d/stack \ --run-command 'sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config' \ --run-command 'systemctl enable sshd' \ --selinux-relabel
Kubernetes はノードに個別にデプロイする必要があることに注意してください。これはさまざまな方法で実行できます。Kubespray を使用してこのタスクを実行する方法については、GitHub の この Kubespray ページを参照してください。
Contrail Controllers は、Kubernetes 上で TF 演算子を使用して導入できます。 TF 演算子 の Github ページを参照してください。
オーバークラウド VM 定義の準備
オーバークラウド VM 定義を準備するには:
# Overcloud VMs definitions # Adjust values to your setup!!! # For deploying Contrail Control plane in a Kuberentes cluster # remove contrail controller nodes as they are not managed by RHOSP. They to be created at next steps. cat << EOF > vms.yaml --- vms: - name: controller-0 disk_size_gb: 100 memory_gb: 16 cpu_cores: 4 nics: - name: eth0 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" mac_address: "52:54:00:16:54:d8" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-tenant" cluster: node-10-0-10-148 storage: node-10-0-10-148-overcloud - name: contrail-controller-0 disk_size_gb: 100 memory_gb: 16 cpu_cores: 4 nics: - name: eth0 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" mac_address: "52:54:00:d6:2b:03" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-tenant" cluster: node-10-0-10-148 storage: node-10-0-10-148-overcloud - name: contrail-controller-1 disk_size_gb: 100 memory_gb: 16 cpu_cores: 4 nics: - name: eth0 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" mac_address: "52:54:00:d6:2b:13" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-tenant" cluster: node-10-0-10-149 storage: node-10-0-10-149-overcloud - name: contrail-controller-2 disk_size_gb: 100 memory_gb: 16 cpu_cores: 4 nics: - name: eth0 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" mac_address: "52:54:00:d6:2b:23" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-tenant" cluster: node-10-0-10-150 storage: node-10-0-10-150-overcloud EOF # Playbook for overcloud VMs # !!! Adjustto your setup cat << EOF > overcloud.yaml - hosts: localhost tasks: - name: Get RHVM token ovirt_auth: url: "https://{{ ovirt_hostname }}/ovirt-engine/api" username: "{{ ovirt_user }}" password: "{{ ovirt_password }}" insecure: true - name: Create disks ovirt_disk: auth: "{{ ovirt_auth }}" name: "{{ item.name }}" interface: virtio size: "{{ item.disk_size_gb }}GiB" format: cow image_path: "{{ item.image | default(omit) }}" storage_domain: "{{ item.storage }}" register: task_result ignore_errors: yes until: not task_result.failed retries: 5 delay: 10 with_items: - "{{ vms }}" - name: Deploy VMs ovirt.ovirt.ovirt_vm: auth: "{{ ovirt_auth }}" state: "{{ item.state | default('present') }}" cluster: "{{ item.cluster }}" name: "{{ item.name }}" memory: "{{ item.memory_gb }}GiB" cpu_cores: "{{ item.cpu_cores }}" type: server high_availability: yes placement_policy: pinned operating_system: rhel_8x64 disk_format: cow graphical_console: protocol: - spice - vnc serial_console: yes nics: "{{ item.nics | default(omit) }}" disks: - name: "{{ item.name }}" bootable: True storage_domain: "{{ item.storage }}" cloud_init: "{{ item.cloud_init | default(omit) }}" cloud_init_nics: "{{ item.cloud_init_nics | default(omit) }}" retries: 5 delay: 2 with_items: - "{{ vms }}" - name: Revoke SSO Token ovirt_auth: state: absent ovirt_auth: "{{ ovirt_auth }}" EOF ansible-playbook \ --extra-vars="@common-env.yaml" \ --extra-vars="@vms.yaml" \ overcloud.yaml
Kubernetesベースの導入向けにContrailコントロールプレーンVMを作成
Contrailコントロールプレーンが個別のKubernetesベースのクラスターとしてデプロイされるサイドバイサイドデプロイのこのセクションの手順に従ってください。
Kubernetes VM 用に VM イメージをカスタマイズする
Kubernetes VM の VM イメージをカスタマイズするには、次のようにします。
cd cloud_image=images/rhel-8.4-x86_64-kvm.qcow2 root_password=contrail123 stack_password=contrail123 export LIBGUESTFS_BACKEND=direct qemu-img create -f qcow2 images/k8s.qcow2 100G virt-resize --expand /dev/sda3 ${cloud_image} images/k8s.qcow2 virt-customize -a images/k8s.qcow2 \ --run-command 'xfs_growfs /' \ --root-password password:${root_password} \ --password stack:password:${stack_password} \ --run-command 'echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack' \ --chmod 0440:/etc/sudoers.d/stack \ --run-command 'sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config' \ --run-command 'systemctl enable sshd' \ --selinux-relabel
Kubernetes VM を定義する
Kubernetes VM を定義するには、次の手順に従います。
# !!! Adjust to your setup (addresses in ctlplane, tenant and mgmt networks) cat << EOF > k8s-vms.yaml --- vms: - name: contrail-controller-0 state: running disk_size_gb: 100 memory_gb: 16 cpu_cores: 4 nics: - name: eth0 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" mac_address: "52:54:00:16:54:d8" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-tenant" - name: eth2 interface: virtio profile_name: "ovirtmgmt" cluster: node-10-0-10-148 storage: node-10-0-10-148-overcloud image: "images/k8s.qcow2" cloud_init: # ctlplane network host_name: "contrail-controller-0.{{ overcloud_domain }}" dns_search: "{{ overcloud_domain }}" dns_servers: "{{ ipa_ctlplane_ip }}" nic_name: "eth0" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "192.168.24.7" nic_gateway: "{{ undercloud_ctlplane_ip }}" nic_netmask: "255.255.255.0" cloud_init_nics: # tenant network - nic_name: "eth1" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "10.0.0.201" nic_netmask: "255.255.255.0" # mgmt network - nic_name: "eth2" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "10.0.10.210" nic_netmask: "255.255.255.0" - name: contrail-controller-1 state: running disk_size_gb: 100 memory_gb: 16 cpu_cores: 4 nics: - name: eth0 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" mac_address: "52:54:00:d6:2b:03" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-tenant" - name: eth2 interface: virtio profile_name: "ovirtmgmt" cluster: node-10-0-10-149 storage: node-10-0-10-149-overcloud image: "images/k8s.qcow2" cloud_init: host_name: "contrail-controller-1.{{ overcloud_domain }}" dns_search: "{{ overcloud_domain }}" dns_servers: "{{ ipa_ctlplane_ip }}" nic_name: "eth0" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "192.168.24.8" nic_gateway: "{{ undercloud_ctlplane_ip }}" nic_netmask: "255.255.255.0" cloud_init_nics: - nic_name: "eth1" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "10.0.0.202" nic_netmask: "255.255.255.0" # mgmt network - nic_name: "eth2" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "10.0.10.211" nic_netmask: "255.255.255.0" - name: contrail-controller-2 state: running disk_size_gb: 100 memory_gb: 16 cpu_cores: 4 nics: - name: eth0 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" mac_address: "52:54:00:d6:2b:23" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-tenant" - name: eth2 interface: virtio profile_name: "ovirtmgmt" cluster: node-10-0-10-150 storage: node-10-0-10-150-overcloud image: "images/k8s.qcow2" cloud_init: host_name: "contrail-controller-1.{{ overcloud_domain }}" dns_search: "{{ overcloud_domain }}" dns_servers: "{{ ipa_ctlplane_ip }}" nic_name: "eth0" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "192.168.24.9" nic_gateway: "{{ undercloud_ctlplane_ip }}" nic_netmask: "255.255.255.0" cloud_init_nics: - nic_name: "eth1" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "10.0.0.203" nic_netmask: "255.255.255.0"EOF # mgmt network - nic_name: "eth2" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "10.0.10.212" nic_netmask: "255.255.255.0" EOF ansible-playbook \ --extra-vars="@common-env.yaml" \ --extra-vars="@k8s-vms.yaml" \ overcloud.yaml
RHOSP 内部 API ネットワークの VLAN の設定
Kubernetes ノードに SSH 接続し、RHOSP 内部 API ネットワーク用に VLAN を構成するには、以下を行います。
# Example # ssh to a node ssh stack@192.168.24.7 # !!!Adjust to your setup and repeate for all Contrail Controller nodes cat {{EOF | sudo tee /etc/sysconfig/network-scripts/ifcfg-vlan710 ONBOOT=yes BOOTPROTO=static HOTPLUG=no NM_CONTROLLED=no PEERDNS=no USERCTL=yes VLAN=yes DEVICE=vlan710 PHYSDEV=eth0 IPADDR=10.1.0.7 NETMASK=255.255.255.0 EOF sudo ifup vlan710 # Do same for external vlan if needed
クラウド VM の作成
このセクションの手順に従って、アンダークラウド VM を作成します。
アンダークラウド VM のイメージをカスタマイズする
アンダークラウドVMのイメージをお客様に提供:
cd cloud_image=images/rhel-8.4-x86_64-kvm.qcow2 undercloud_name=undercloud domain_name=dev.clouddomain root_password=contrail123 stack_password=contrail123 export LIBGUESTFS_BACKEND=direct qemu-img create -f qcow2 images/${undercloud_name}.qcow2 100G virt-resize --expand /dev/sda3 ${cloud_image} images/${undercloud_name}.qcow2 virt-customize -a images/${undercloud_name}.qcow2 \ --run-command 'xfs_growfs /' \ --root-password password:${root_password} \ --hostname ${undercloud_name}.${domain_name} \ --run-command 'useradd stack' \ --password stack:password:${stack_password} \ --run-command 'echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack' \ --chmod 0440:/etc/sudoers.d/stack \ --run-command 'sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config' \ --run-command 'systemctl enable sshd' \ --selinux-relabel
アンダークラウドVMの定義
アンダークラウド VM を定義するには:
cat << EOF > undercloud.yaml - hosts: localhost tasks: - set_fact: cluster: "Default" storage: "undercloud" - name: get RHVM token ovirt_auth: url: "https://{{ ovirt_hostname }}/ovirt-engine/api" username: "{{ ovirt_user }}" password: "{{ ovirt_password }}" insecure: true - name: create disks ovirt_disk: auth: "{{ ovirt_auth }}" name: "{{ undercloud_name }}" interface: virtio format: cow size: 100GiB image_path: "images/{{ undercloud_name }}.qcow2" storage_domain: "{{ storage }}" register: task_result ignore_errors: yes until: not task_result.failed retries: 5 delay: 10 - name: deploy vms ovirt.ovirt.ovirt_vm: auth: "{{ ovirt_auth }}" state: running cluster: "{{ cluster }}" name: "{{ undercloud_name }}" memory: 32GiB cpu_cores: 8 type: server high_availability: yes placement_policy: pinned operating_system: rhel_8x64 cloud_init: host_name: "{{ undercloud_name }}.{{ overcloud_domain }}" dns_search: "{{ overcloud_domain }}" dns_servers: "{{ dns_server | default(mgmt_gateway) }}" nic_name: "eth0" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "{{ undercloud_mgmt_ip }}" nic_gateway: "{{ mgmt_gateway }}" nic_netmask: "255.255.255.0" cloud_init_nics: - nic_name: "eth1" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "{{ undercloud_ctlplane_ip }}" nic_netmask: "255.255.255.0" disk_format: cow graphical_console: protocol: - spice - vnc serial_console: yes nics: - name: eth0 interface: virtio profile_name: "ovirtmgmt" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" disks: - name: "{{ undercloud_name }}" bootable: true storage_domain: "{{ storage }}" - name: revoke SSO token ovirt_auth: state: absent ovirt_auth: "{{ ovirt_auth }}" EOF ansible-playbook --extra-vars="@common-env.yaml" undercloud.yaml
FreeIPA VM を作成する
FreeIPA VM を作成するには、次の手順に従います。
- RedHat IDM(FreeIPA)VM用のVMイメージのカスタマイズ
- RedHat IDM(FreeIPA)VMを有効にする
- ウェブブラウザからの RHVM へのアクセス
- シリアル コンソール経由の VM へのアクセス
RedHat IDM(FreeIPA)VM用のVMイメージのカスタマイズ
この例に従って、RedHat IDM イメージの VM イメージを顧客に提供します。
この例は、TLS Everywhere デプロイのセットアップです。
cd cloud_image=images/rhel-8.4-x86_64-kvm.qcow2 ipa_name=ipa domain_name=dev.clouddomain qemu-img create -f qcow2 images/${ipa_name}.qcow2 100G virt-resize --expand /dev/sda3 ${cloud_image} images/${ipa_name}.qcow2 virt-customize -a images/${ipa_name}.qcow2 \ --run-command 'xfs_growfs /' \ --root-password password:${root_password} \ --hostname ${ipa_name}.${domain_name} \ --run-command 'sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config' \ --run-command 'systemctl enable sshd' \ --selinux-relabel
RedHat IDM(FreeIPA)VMを有効にする
RedHat IDM VM を有効にするには:
cat << EOF > ipa.yaml - hosts: localhost tasks: - set_fact: cluster: "Default" storage: "ipa" - name: get RHVM token ovirt_auth: url: "https://{{ ovirt_hostname }}/ovirt-engine/api" username: "{{ ovirt_user }}" password: "{{ ovirt_password }}" insecure: true - name: create disks ovirt_disk: auth: "{{ ovirt_auth }}" name: "{{ ipa_name }}" interface: virtio format: cow size: 100GiB image_path: "images/{{ ipa_name }}.qcow2" storage_domain: "{{ storage }}" register: task_result ignore_errors: yes until: not task_result.failed retries: 5 delay: 10 - name: deploy vms ovirt.ovirt.ovirt_vm: auth: "{{ ovirt_auth }}" state: running cluster: "{{ cluster }}" name: "{{ ipa_name }}" memory: 4GiB cpu_cores: 2 type: server high_availability: yes placement_policy: pinned operating_system: rhel_8x64 cloud_init: host_name: "{{ ipa_name }}.{{ overcloud_domain }}" dns_search: "{{ overcloud_domain }}" dns_servers: "{{ dns_server | default(mgmt_gateway) }}" nic_name: "eth0" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "{{ ipa_mgmt_ip }}" nic_gateway: "{{ mgmt_gateway }}" nic_netmask: "255.255.255.0" cloud_init_nics: - nic_name: "eth1" nic_boot_protocol_v6: none nic_boot_protocol: static nic_ip_address: "{{ ipa_ctlplane_ip }}" nic_netmask: "255.255.255.0" disk_format: cow graphical_console: protocol: - spice - vnc serial_console: yes nics: - name: eth0 interface: virtio profile_name: "ovirtmgmt" - name: eth1 interface: virtio profile_name: "{{ datacenter_name }}-ctlplane" disks: - name: "{{ ipa_name }}" bootable: true storage_domain: "{{ storage }}" - name: revoke SSO token ovirt_auth: state: absent ovirt_auth: "{{ ovirt_auth }}" EOF ansible-playbook --extra-vars="@common-env.yaml" ipa.yaml
ウェブブラウザからの RHVM へのアクセス
RHVM には、エンジン FQDN またはエンジン代替 FQDN の 1 つを使用してのみアクセスできます。たとえば、https://vmengine.dev.clouddomain などです。FQDNが解決可能であることを確認してください。
シリアル コンソール経由の VM へのアクセス
シリアルコンソールから仮想マシンにアクセスするには、RedHat のドキュメントまたは oVirtのドキュメントを参照してください。