第18章 OpenStack の設定
18.1. 概要
OpenShift Container Platform は、OpenStack にデプロイする際に、OpenStack Cinder ボリュームをアプリケーションデータの永続ストレージとして使用など、OpenStack インフラストラクチャーにアクセスするように設定できます。
18.2. パーミッション
OpenShift Container Platform に OpenStack を設定するには、以下のロールが必要です。
member |
アセット (インスタンス、ネットワーキングポート、Floating IP、ボリュームなど) を作成するために、テナント member ロールが必要になります。 |
18.3. セキュリティーグループの設定
OpenStack に OpenShift Container Platform を インストールする際は、適切なセキュリティーグループがセットアップされていることを確認します。
セキュリティーグループにはいくつかのポートを設定しておく必要があり、それらがないとインストールは失敗します。また、インストールしようとしているクラスターの設定によっては、追加のポートが必要になる場合があります。セキュリティーグループの詳細、およびその適切な調整方法については、「必要なポート」を参照してください。
すべての OpenShift Container Platform ホスト |
|
etcd セキュリティーグループ |
|
マスターのセキュリティーグループ |
|
ノードのセキュリティーグループ |
|
インフラストラクチャーノード (OpenShift Container Platform ルーターをホストできるノード) |
|
CRI-O |
CRI-O を使用している場合は、tcp/10010 を開き、 |
マスターまたはルートの負荷分散のために外部のロードバランサー (ELB) を設定する場合は、ELB の Ingress および Egress のセキュリティーグループを設定することも必要になります。
18.4. OpenStack 変数の設定
必要な OpenStack 変数を設定するには、OpenShift Container Platform のマスターとノード両方のすべてのホストに、/etc/cloud.conf ファイルを以下の内容で作成します。
[Global] auth-url = <OS_AUTH_URL> username = <OS_USERNAME> password = <password> domain-id = <OS_USER_DOMAIN_ID> tenant-id = <OS_TENANT_ID> region = <OS_REGION_NAME> [LoadBalancer] subnet-id = <UUID of the load balancer subnet>
OS_
変数の値については OpenStack の管理者にお問い合わせください。この値は通常 OpenStack の設定で使用されます。
18.5. OpenStack についての OpenShift Container Platform マスターの設定
OpenStack は、OpenShift Container Platform のマスターとノードの各ホストに以下の 2 通りの方法で設定できます。
18.5.1. Ansible を使用した OpenStack についての OpenShift Container Platform の設定
OpenStack は、通常インストール (Advanced installation) の実行中に以下のパラメーターを使って設定することができます。これらはインベントリーファイルで設定できます。
-
openshift_cloudprovider_kind
-
openshift_cloudprovider_openstack_auth_url
-
openshift_cloudprovider_openstack_username
-
openshift_cloudprovider_openstack_password
-
openshift_cloudprovider_openstack_domain_id
-
openshift_cloudprovider_openstack_domain_name
-
openshift_cloudprovider_openstack_tenant_id
-
openshift_cloudprovider_openstack_tenant_name
-
openshift_cloudprovider_openstack_region
-
openshift_cloudprovider_openstack_lb_subnet_id
Ansible インベントリーファイルのパラメーター値に、#
, {
or }
などの特殊文字が含まれている場合、値をダブルエスケープ (double-escape) する必要があります (値を単一と二重引用符で囲みます)。たとえば、mypasswordwith###hashsigns
を変数 openshift_cloudprovider_openstack_password
の値として使用し、これを Ansible ホストインベントリーファイルで openshift_cloudprovider_openstack_password='"mypasswordwith###hashsigns"'
として宣言します。
例18.1 Ansible を使用した OpenStack の設定例
# Cloud Provider Configuration # # Note: You may make use of environment variables rather than store # sensitive configuration within the ansible inventory. # For example: #openshift_cloudprovider_openstack_username="{{ lookup('env','USERNAME') }}" #openshift_cloudprovider_openstack_password="{{ lookup('env','PASSWORD') }}" # # Openstack #openshift_cloudprovider_kind=openstack #openshift_cloudprovider_openstack_auth_url=http://openstack.example.com:35357/v2.0/ #openshift_cloudprovider_openstack_username=username #openshift_cloudprovider_openstack_password=password #openshift_cloudprovider_openstack_domain_id=domain_id #openshift_cloudprovider_openstack_domain_name=domain_name #openshift_cloudprovider_openstack_tenant_id=tenant_id #openshift_cloudprovider_openstack_tenant_name=tenant_name #openshift_cloudprovider_openstack_region=region #openshift_cloudprovider_openstack_lb_subnet_id=subnet_id
18.5.2. 手動による OpenStack についての OpenShift Container Platform マスターの設定
すべてのマスターでマスター設定ファイル (デフォルトは /etc/origin/master/master-config.yaml) を編集するか、または作成し、apiServerArguments
と controllerArguments
の各セクションの内容を更新します。
kubernetesMasterConfig: ... apiServerArguments: cloud-provider: - "openstack" cloud-config: - "/etc/cloud.conf" controllerArguments: cloud-provider: - "openstack" cloud-config: - "/etc/cloud.conf"
コンテナー化インストールをトリガーすると、/etc/origin と /var/lib/origin のディレクトリーのみがマスターとノードのコンテナーにマウントされます。したがって、cloud.conf は /etc/ ではなく /etc/origin/ になければなりません。
18.5.3. 手動による OpenStack についての OpenShift Container Platform ノードの設定
すべてのノードでノード設定ファイル (デフォルトは /etc/origin/node/node-config.yaml) を編集するか、または作成し、kubeletArguments
と nodeName
の各セクションの内容を更新します。
nodeName:
<instance_name> 1
kubeletArguments:
cloud-provider:
- "openstack"
cloud-config:
- "/etc/cloud.conf"
- 1
- ノードが実行される OpenStack インスタンスの名前 (仮想マシンの名前)。
現時点では、クラウドプロバイダーの統合を正常に機能させるため、nodeName
は Openstack のインスタンス名と一致していなければなりません。また、この名前は RFC1123 に準拠している必要もあります。
コンテナー化インストールをトリガーすると、/etc/origin と /var/lib/origin のディレクトリーのみがマスターとノードのコンテナーにマウントされます。したがって、cloud.conf は /etc/ ではなく /etc/origin/ になければなりません。
18.5.4. Ansible Playbook を使用した OpenShift Container Platform のインストール
OpenStack インストール Playbook は、テクノロジープレビュー機能のみとなっています。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) ではサポートされていません。これらは、機能的に完全でない可能性があり、Red Hat では実稼働環境での使用を推奨しません。テクノロジープレビュー機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様に機能性をテストしていただき、開発プロセス中にフィードバックをお寄せいただくことを目的としています。Red Hat テクノロジープレビュー機能のサポート対象範囲に関する詳しい情報は、https://access.redhat.com/support/offerings/techpreview/ を参照してください。
OpenShift Container Platform を既存の OpenStack インストールにインストールするには、OpenStack Playbook を使用します。詳細の前提条件を含む Playbook についての詳細は、OpenStack Provisioning readme ファイルを参照してください。
Playbook を実行するには、以下のコマンドを実行します。
$ ansible-playbook --user openshift \ -i openshift-ansible/playbooks/openstack/inventory.py \ -i inventory \ openshift-ansible/playbooks/openstack/openshift-cluster/provision_install.yml
18.6. 設定変更の適用
マスターおよびノードのすべてのホストで OpenShift Container Platform サービスを起動または再起動し、設定の変更を適用します。「OpenShift Container Platform サービスの再起動」を参照してください。
# systemctl restart atomic-openshift-master-api atomic-openshift-master-controllers # systemctl restart atomic-openshift-node
クラウドプロバイダーを不使用から使用に切り替えるとエラーメッセージが表示されます。クラウドプロバイダーを追加すると、ノードが hostname を externalID
として使用する (クラウドプロバイダーが使用されていなかった場合のケース) 代わりに、クラウドプロバイダーの instance-id
(クラウドプロバイダーによって指定される) の使用に切り替えるため、ノードの削除が試みられます。この問題を解決するには、以下を実行します。
- CLI にクラスター管理者としてログインします。
既存のノードラベルをチェックし、これらをバックアップします。
$ oc describe node <node_name> | grep -Poz '(?s)Labels.*\n.*(?=Taints)'
ノードを削除します。
$ oc delete node <node_name>
各ノードホストで OpenShift Container Platform サービスを再起動します。
# systemctl restart atomic-openshift-node
- 以前に使用していた各ノードのラベルを再度追加します。