クラウドインフラ全般を担当しているソリューションアーキテクトの伊藤です。
はじめに
OpenShiftを利用する際は様々な環境でデプロイすることができます。
以下の図のA. のようにオンプレミスでのデプロイは、コスト効率、柔軟性なインフラ構成、レガシーアプリケーションとの接続性といった観点で有利に働きます。
また他の構成として、マネージドサービスを利用することで早く、簡単にOpenShiftを利用することができます。
図のB-2. のようにいくつかのマネージドサービスを選択できます。
そして今回は上記図のA-4. の様に2019年1月にリリースされたRed Hat OpenStack Platform 14(RHOSP14)を使って、OpenShiftをデプロイしたいと思います。
Directorについて
RHOSPにはDirectorと呼ばれるインフラをデプロイするためのツールが備わっています。
このDirectorはOpenStackをデプロイするのは勿論のこと、以下の4つのソフトウェアをデプロイすることが可能です。
・OpenStack
・OpenShift
・Ceph Storage
・OpenShiftに付随するストレージとしてGluster Storage
また、デプロイするサーバに割り当てるプロファイルを調整することで、
・OpenStackのみをデプロイ
・OpenStackとCeph Storageをデプロイ
・OpenShiftのみをデプロイ
・OpenShiftとGluster Storageをデプロイ
・OpenStackとOpenShift、Ceph Storage、Gluster Storageをデプロイ
といったサブスクリプションの所有状況やインフラ要件に応じて、デプロイをするソフトウェアを切り替えられます。
以下の図は例として
・赤い線でDirectorでOpenStackとCeph Storageをデプロイする
・緑の線でDirectorでOpenShiftとGluster Storageをデプロイする
という例を示しました。
・OpenShiftをDirectorからデプロイする手順
以下のOSP14のドキュメントでは、Directorでベアメタルにデプロイする方法とOpenStack上の仮想インスタンスへデプロイする方法が記載されています。
https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/14/html-single/installing_openshift_container_platform_on_bare_metal_using_director/
Directorでデプロイする際には以下の要素を抑えておきます。
・コンポーザブルロール
Directorによるデプロイでは役割を最初に定義します。役割をホストに割り当てることでデプロイする構成が決まります。
Composable Rolesと言い、OpenShiftをデプロイする際は通常、OpenShiftMaster, OpenShiftWorker, OpenShiftInfraという3つのロールを定義します。
・Directorがデプロイに使用するコンテナレジストリ
コンポーザブルロールにはそのロールが、どのソフトウェアを必要とするかを定義します。
Director環境下ではソフトウェアはコンテナによってパッケージングされます。ロールを定義するときに動作させるソフトウェアが決まるためロールに適したコンテナをコンテナレジストリに登録します。
・DirectorがIPMIで制御可能なホストのリスト
DirectorがOpenShiftをデプロイする先の物理サーバをjsonフォーマットで定義します。
IPMIのIPアドレス、アカウント情報、割り当てるプロファイルなどを記載します。
・Directorが環境を理解するための構成ファイル
environmentファイルと呼ばれているものになります。
ホスト名、VLAN、IPアドレスといったネットワーク構成、利用するストレージ構成、サーバ証明書、クラウドの名前まで環境ファイルで定義するものは多岐に渡ります。
定義した環境ファイルは、デプロイ時のコマンドにすべて記載します。
重要な要素はたった4つです!
手順
これから説明する手順は例となりますので、実際にデプロイする環境に合わせてご準備頂く必要があります。
・Director(Undercloud)のセットアップ
Red Hat OpenStack Platformの世界においては
・クラウド基盤利用者が実際に使うインフラソフトウェアがインストールされたサーバをOvercloud
・そのOvercloudをデプロイするためのサーバをUndercloud
と言います。
まずDirectorでOpenShiftをデプロイするには、Director自体をセットアップしなくてはなりません。
RHEL7がインストールされたサーバを準備し、ドキュメントのようにDirectorをセットアップしていきます。
実際のところ、UndercloudのセットアップはOpenStackをデプロイする際と変わりません。
https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/14/html/director_installation_and_usage/planning-your-undercloud
echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack && chmod 0440 /etc/sudoers.d/stack && su - stack mkdir ~/images && mkdir ~/templates sudo subscription-manager register sudo subscription-manager list --available --all --matches="Red Hat OpenStack" sudo subscription-manager attach --pool=Valid-Pool-Number-123456 sudo subscription-manager repos --disable=* --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms --enable=rhel-7-server-rh-common-rpms --enable=rhel-ha-for-rhel-7-server-rpms --enable=rhel-7-server-openstack-14-rpms --enable=rhel-7-server-rhceph-3-tools-rpms sudo yum update -y sudo yum install -y python-tripleoclient ceph-ansible rhosp-director-images rhosp-director-images-ipa libguestfs-tools OpenIPMI-tools reboot openstack tripleo container image prepare default --local-push-destination --output-env-file containers-prepare-parameter.yaml sudo openstack tripleo container image prepare -e ~/containers-prepare-parameter.yaml cp /usr/share/python-tripleoclient/undercloud.conf.sample ~/undercloud.conf #undercloud.confは環境に応じて変更してください openstack undercloud install
これで/home/stack/stackrc というファイルが生成されたらDirectorのインストールが完了ですので、その後の各コマンドが動作するかご確認下さい。
・コンポーザブルロールの定義
コンポーザブルロールを定義します。
openstack overcloud roles generate -o /home/stack/templates-ocp/openshift_roles_data.yaml OpenShiftMaster OpenShiftWorker OpenShiftInfra
・Directorにデプロイ対象のサーバを登録
スペックに合わせたフレーバーを作成し、それぞれにプロファイルを割り当てます。
OpenStackをデプロイする際とcapabilitiesを除いて変わりません。
instackenv.jsonの例:
この例はOpenShiftWorker、OpenShiftMaster、OpenShiftInfraノードがそれぞれ3台です。
{ "nodes":[ { "name": "worker001", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.131", "capabilities": "profile:OpenShiftWorker,boot_option:local,node:worker-0", "arch":"x86_64" }, { "name": "worker002", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.132", "capabilities": "profile:OpenShiftWorker,boot_option:local,node:worker-1", "arch":"x86_64" }, { "name": "worker003", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.133", "capabilities": "profile:OpenShiftWorker,boot_option:local,node:worker-2", "arch":"x86_64" }, { "name": "master001", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.141", "capabilities": "profile:OpenShiftMaster,boot_option:local,node:master-0", "arch":"x86_64" }, { "name": "master002", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.142", "capabilities": "profile:OpenShiftMaster,boot_option:local,node:master-1", "arch":"x86_64" }, { "name": "master003", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.143", "capabilities": "profile:OpenShiftMaster,boot_option:local,node:master-2", "arch":"x86_64" }, { "name": "infra001", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.151", "capabilities": "profile:OpenShiftInfra,boot_option:local,node:infra-0", "arch":"x86_64" }, { "name": "infra002", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.152", "capabilities": "profile:OpenShiftInfra,boot_option:local,node:infra-1", "arch":"x86_64" }, { "name": "infra003", "pm_type":"pxe_ipmitool", "pm_user":"root", "pm_password":"root", "pm_addr":"192.168.99.153", "capabilities": "profile:OpenShiftInfra,boot_option:local,node:infra-2", "arch":"x86_64" } ] }
フレーバーとプロパティの登録をします。
openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 --swap 500 m1.OpenShiftMaster openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 --swap 500 m1.OpenShiftWorker openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 --swap 500 m1.OpenShiftInfra openstack flavor set --property "capabilities:profile"="OpenShiftMaster" --property "capabilities:boot_option"="local" m1.OpenShiftMaster openstack flavor set --property "capabilities:profile"="OpenShiftWorker" --property "capabilities:boot_option"="local" m1.OpenShiftWorker openstack flavor set --property "capabilities:profile"="OpenShiftInfra" --property "capabilities:boot_option"="local" m1.OpenShiftInfra openstack overcloud node import ~/instackenv.json openstack overcloud node introspect --all-manageable --provide
イントロスペクションを実施し、Directorが実際にデプロイ可能なホストと認識すると以下のように利用可能なステータスになります。
・Directorが環境を理解するために構成ファイルを準備します
テンプレートを生成します。
cd /usr/share/openstack-tripleo-heat-templates ./tools/process-templates.py -o ~/templates/
以下のファイルを準備します
/home/stack/openshift_env.yaml
Parameter_defaults: # by default Director assigns the VIP random from the allocation pool # by using the FixedIPs we can set the VIPs to predictable IPs before starting the deployment CloudName: openshift.localdomain PublicVirtualFixedIPs: [{'ip_address':'10.0.0.200'}] CloudNameInternal: internal.openshift.localdomain InternalApiVirtualFixedIPs: [{'ip_address':'172.17.1.200'}] CloudDomain: openshift.localdomain ## Required for CNS deployments only OpenShiftInfraParameters: OpenShiftGlusterDisks: - /dev/vdb ## Required for CNS deployments only OpenShiftWorkerParameters: OpenShiftGlusterDisks: - /dev/vdb - /dev/vdc NtpServer: ["clock.redhat.com","clock2.redhat.com"] ControlPlaneDefaultRoute: 192.168.24.1 EC2MetadataIp: 192.168.24.1 ControlPlaneSubnetCidr: 24 # The DNS server below should have entries for resolving {internal,public,apps}.openshift.localdomain names DnsServers: - 10.0.0.90 OpenShiftGlobalVariables: openshift_master_identity_providers: - name: 'htpasswd_auth' login: 'true' challenge: 'true' kind: 'HTPasswdPasswordIdentityProvider' openshift_master_htpasswd_users: sysadmin: '$apr1$jpBOUqeU$X4jUsMyCHOOp8TFYtPq0v1' #openshift_master_cluster_hostname should match the CloudNameInternal parameter openshift_master_cluster_hostname: internal.openshift.localdomain #openshift_master_cluster_public_hostname should match the CloudName parameter openshift_master_cluster_public_hostname: public.openshift.localdomain openshift_master_default_subdomain: apps.openshift.localdomain
Directorがデプロイに使用するコンテナレジストリ情報を生成します。
/home/stack/containers-prepare-parameter.yaml
このファイルはUndercloudのインストール時に作成しています。
サブスクリプション管理のための環境ファイル
/home/stack/rhsm.yaml
resource_registry: OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/extraconfig/services/rhsm.yaml parameter_defaults: RhsmVars: rhsm_repos: - rhel-7-server-rpms - rhel-7-server-extras-rpms - rhel-7-server-ose-3.11-rpms rhsm_pool_ids: "8a85f37c63842fef0166949e5f9c4be0" rhsm_method: "portal" rhsm_username: yourusername rhsm_password: yourpassword rhsm_autosubscribe: true
Overcloudをデプロイします。
$ openstack overcloud deploy \ --stack openshift \ --templates \ -r /home/stack/openshift_roles_data.yaml \ -n /usr/share/openstack-tripleo-heat-templates/network_data_openshift.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/openshift.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/openshift-cns.yaml \ -e /home/stack/openshift_env.yaml \ -e /home/stack/containers-prepare-parameter.yaml \ -e /home/stack/rhsm.yaml
確認
以下のようにデプロイしたOpenShift環境を確認することができます。
https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/14/html-single/installing_openshift_container_platform_on_bare_metal_using_director/#review_the_ocp_deployment
まとめ
ひと昔に比べてクラウドインフラを構築する敷居はDirectorを活用することでどんどん下がってきています。
Directorは内部でAnsibleを使いOpenStack、OpenShift、Ceph Storage、Gluster Storageをデプロイすることができます。
柔軟性を犠牲にすることなく高度なクラウドインフラをデプロイすることができるDirectorについて、お気軽に問い合わせ下さい。