Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第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 ホスト

  • インストーラー/Ansible を実行しているホストの tcp/22

etcd セキュリティーグループ

  • マスターの tcp/2379
  • etcd ホストの tcp/2380

マスターのセキュリティーグループ

  • tcp/8443 from 0.0.0.0/0
  • 3.2 よりも前にインストールされた環境、または 3.2 にアップグレードされた環境向けのすべての OpenShift Container Platform ホストの tcp/53
  • 3.2 よりも前にインストールされた環境、または 3.2 にアップグレードされた環境向けのすべての OpenShift Container Platform ホストの udp/53
  • 3.2 を使ってインストールされた新しい環境向けのすべての OpenShift Container Platform ホストの tcp/8053
  • 3.2 を使ってインストールされた新しい環境向けのすべての OpenShift Container Platform ホストの udp/8053

ノードのセキュリティーグループ

  • マスターの tcp/10250
  • ノードの udp/4789

インフラストラクチャーノード (OpenShift Container Platform ルーターをホストできるノード)

  • tcp/443 (0.0.0.0/0)
  • tcp/80 (0.0.0.0/0)

CRI-O

CRI-O を使用している場合は、tcp/10010 を開き、oc exec および oc rsh 操作を実行できるようにします。

マスターまたはルートの負荷分散のために外部のロードバランサー (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) を編集するか、または作成し、apiServerArgumentscontrollerArguments の各セクションの内容を更新します。

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) を編集するか、または作成し、kubeletArgumentsnodeName の各セクションの内容を更新します。

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

クラウドプロバイダーを不使用から使用に切り替えるとエラーメッセージが表示されます。クラウドプロバイダーを追加すると、ノードが hostnameexternalID として使用する (クラウドプロバイダーが使用されていなかった場合のケース) 代わりに、クラウドプロバイダーの instance-id (クラウドプロバイダーによって指定される) の使用に切り替えるため、ノードの削除が試みられます。この問題を解決するには、以下を実行します。

  1. CLI にクラスター管理者としてログインします。
  2. 既存のノードラベルをチェックし、これらをバックアップします。

    $ oc describe node <node_name> | grep -Poz '(?s)Labels.*\n.*(?=Taints)'
  3. ノードを削除します。

    $ oc delete node <node_name>
  4. 各ノードホストで OpenShift Container Platform サービスを再起動します。

    # systemctl restart atomic-openshift-node
  5. 以前に使用していた各ノードのラベルを再度追加します。