第18章 OpenStack の設定
18.1. 概要
OpenShift Container Platform は、OpenStack にデプロイする場合に、アプリケーションデータ用にOpenStack Cinder ボリュームを永続ストレージとして使用するなど、OpenStack インフラストラクチャーにアクセスするように設定できます。
18.2. パーミッション
OpenShift Container Platform に OpenStack を設定するには、以下のロールが必要です。
- メンバー
- インスタンス、ネットワーキングポート、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 通りの方法で設定できます。
- Ansible の使用
master-config.yaml ファイルと適切なノード設定マップを手動で変更します。
=== Ansible を使用した OpenStack についての OpenShift Container Platform の設定
クラスターのインストール時に、OpenStack は以下のパラメーターを使用して設定できます。これらのパラメーターは、インベントリーファイルで設定可能です。
-
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 を使用した 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.1. 手動による 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.2. 手動による OpenStack についての OpenShift Container Platform ノードの設定
適切なノード設定マップを編集して、kubeletArguments と nodeName セクションの内容を更新します。
nodeName:
<instance_name> 1
kubeletArguments:
cloud-provider:
- "openstack"
cloud-config:
- "/etc/cloud.conf"- 1
- ノードホストの OpenStack インスタンス名 (RFC1123 に準拠)
nodeName は OpenStack インスタンス名と一致しない場合に、クラウドプロバイダーの統合は機能しません。
コンテナー化インストールをトリガーすると、/etc/origin と /var/lib/origin のディレクトリーのみがマスターとノードのコンテナーにマウントされます。したがって、cloud.conf は /etc/ ではなく /etc/origin/ になければなりません。
18.6. 設定変更の適用
マスターおよびノードのすべてのホストで OpenShift Container Platform サービスを起動または再起動し、設定の変更を適用します。「OpenShift Container Platform サービスの再起動」を参照してください。
# master-restart api # master-restart 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
- 以前に使用していた各ノードのラベルを再度追加します。
18.6.1. 動的に作成した OpenStack PV のゾーンラベルの設定
管理者は、動的に作成された OpenStack PV のゾーンラベルを設定できます。このオプションは、OpenStack Cinder ゾーン名がコンピュートゾーン名などに一致しない場合、Cinder ゾーンが 1 つだけで、コンピュートゾーンが多数ある場合に有用です。管理者は、動的に Cinder ボリュームを作成してから、ラベルをチェックできます。
PV のゾーンラベルを表示します。
# oc get pv --show-labels NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE LABELS pvc-1faa6f93-64ac-11e8-930c-fa163e3c373c 1Gi RWO Delete Bound openshift-node/pvc1 standard 12s failure-domain.beta.kubernetes.io/zone=nova
デフォルトの設定が有効になっています。oc get pv --show-labels コマンドは、failure-domain.beta.kubernetes.io/zone=nova ラベルを返します。
ゾーンラベルを無効にするには、cloud.conf ファイルに以下を追加して更新します。
[BlockStorage] ignore-volume-az = yes
マスターサービスの再起動後に作成された PV にはゾーンラベルがありません。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.