Red Hat Training
A Red Hat training course is available for OpenShift Container Platform
第2章 システムおよび環境要件
2.1. システム要件
以下のセクションでは、OpenShift Container Platform 環境内のすべてのホストについてのハードウェアの仕様およびシステムレベルの要件を示しています。
2.1.1. Red Hat サブスクリプション
まず、お使いの Red Hat アカウントに有効な OpenShift Container Platform サブスクリプションがなければなりません。これがない場合は、営業担当者にお問い合わせください。
2.1.2. ハードウェアの最小要件
システムの要件はホストのタイプによって異なります。
| |
| |
外部 etcd ノード |
|
Ansible コントローラー |
Ansible Playbook を実行するホストには、ホストあたり 75MiB 以上の空きメモリーがインベントリーで必要になります。 |
/var/ ファイルシステムのサイジング要件を満たすには、デフォルト設定に変更を加える必要があります。インストール時またはインストール後にこの設定を行う方法については、「Managing Storage in Red Hat Enterprise Linux Atomic Host」を参照してください。
システムの一時ディレクトリーは、Python の標準ライブラリーにある tempfile
モジュールで定義されるルールに基づいて決定されます。
OpenShift Container Platform は、x86_64 アーキテクチャー搭載のサーバーのみをサポートします。
コンテナーデーモンを実行する各システムにストレージを設定する必要があります。コンテナー化インストールの場合、マスターにストレージが必要です。また、デフォルトで Web コンソールがマスターのコンテナーで実行されますが、Web コンソールを実行するためにストレージがマスター上で必要になります。コンテナーはノードで実行されるため、ストレージは常にノード上で必要になります。ストレージのサイズは、ワークロード、コンテナーの数、実行されているコンテナーのサイズ、およびコンテナーのストレージ要件によって異なります。また、コンテナー化された etcd には設定済みのコンテナーストレージが必要です。
2.1.3. 実稼働環境レベルのハードウェア要件
テストまたはサンプル環境は最小要件で機能します。実稼働環境の場合、以下の推奨事項が当てはまります。
- マスターホスト
- 外部 etcd を含む可用性の高い OpenShift Container Platform クラスターにおいて、マスターホストには、上記の表にある最小要件のほかに、1000 Pod に対して 1 CPU コアと 1.5 GB のメモリーが必要になります。したがって、2000 Pod で構成される OpenShift Container Platform クラスターのマスターホストの推奨されるサイズとして、2 CPU コアと 16 GB の RAM に 2 CPU コアと 3 GB の RAM を追加した合計 4 CPU コアと 19 GB の RAM が最小要件として必要になります。
最低 3 つの etcd ホストと 1 つのロードバランサーが複数のマスターホスト間で必要になります。
パフォーマンスのガイダンスについては、「Recommended Practices for OpenShift Container Platform Master Hosts」を参照してください。
- ノードホスト
- ノードホストのサイズは、そのワークロードの予想されるサイズによって異なります。OpenShift Container Platform クラスターの管理者は、予想されるワークロードを計算し、オーバーヘッドの約 10 パーセントを追加する必要があります。実稼働環境の場合、ノードホストの障害が最大容量に影響を与えることがないよう、十分なリソースを割り当てるようにします。
詳しくは、「サイジングに関する考慮事項」と「Cluster Limits」を参照してください。
ノードで物理リソースを過剰にサブスクライブすると、Kubernetes スケジューラーが Pod の配置時に行うリソース保証に影響を与えます。Swap メモリーを無効にするために実行できる処置について確認してください。
2.1.4. Red Hat Gluster Storage ハードウェア要件
コンバージドモードまたはインデペンデントモードのクラスターで使用されるノードはストレージノードとみなされます。単一ノードは複数のグループに分割できませんが、ストレージノードはそれぞれ別個のクラスターグループに分類できます。ストレージノードの各グループについては、以下が当てはまります。
- 1 グループあたり 3 つ以上のストレージノードが必要です。
各ストレージノードには 8 GB 以上の RAM が必要です。これにより、Red Hat Gluster Storage Pod、その他のアプリケーションおよび基礎となる OS を実行できます。
- 各 GlusterFS ボリュームはストレージクラスターにあるすべてのストレージノードのメモリー (約 30 MB) も消費します。RAM の合計量は、コンカレントボリュームがいくつ求められているか、またはいくつ予想されるかによって決める必要があります。
各ストレージノードには、現在のデータまたはメタデータを含まない 1 つ以上の raw ブロックデバイスが必要です。それらのブロックデバイス全体は GlusterFS ストレージで使用されます。以下が存在しないことを確認してください。
- パーティションテーブル (GPT または MSDOS)
- ファイルシステムまたは未処理のファイルシステムの署名
- 以前のボリュームグループの LVM2 署名および論理ボリューム
- LVM2 物理ボリュームの LVM2 メタデータ
不確かな場合には、
wipefs -a <device>
で上記のすべてを消去する必要があります。
2 つのクラスター、つまりインフラストラクチャーアプリケーション (OpenShift Container レジストリーなど) のストレージ専用のクラスターと一般的なアプリケーションのストレージ専用のクラスターについて計画することをお勧めします。これには、合計で 6 つのストレージノードが必要となりますが、この設定は I/O およびボリューム作成のパフォーマンスへの潜在的な影響を回避するために推奨されます。
2.1.5. SELinux 要件
Security-Enhanced Linux (SELinux) をすべてのサーバーで有効にしてから OpenShift Container Platform をインストールする必要があります。そうでないと、インストーラーは失敗します。さらに、/etc/selinux/config ファイルで SELINUX=enforcing
および SELINUXTYPE=targeted
を設定します。
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
2.1.6. オプション: コアの使用についての設定
デフォルトで、OpenShift Container Platform マスターおよびノードは、それらが実行されるシステムで利用可能なすべてのコアを使用します。GOMAXPROCS
環境変数を設定することにより、OpenShift Container Platform で使用するコア数を選択することができます。GOMAXPROCS
環境変数の機能などの詳細については、Go Language ドキュメント を参照してください。
たとえば、以下を実行してからサーバーを起動し、OpenShift Container Platform が 1 つのコアでのみ実行されるようにします。
# export GOMAXPROCS=1
2.1.7. オプション: OverlayFS の使用
OverlayFS は、ファイルシステム上に別のファイルシステムを重ねる (オーバーレイする) ことができるユニオンファイルシステムです。
Red Hat Enterprise Linux 7.4 の時点で、OpenShift Container Platform 環境を OverlayFS を使用できるように設定するオプションがあります。古いバージョンの overlay
ドライバーのほかにも、overlay2
グラフドライバーが完全にサポートされています。ただし、Red Hat では、速度と実装の単純さを考慮し、overlay
ではなく overlay2
を使用することを推奨しています。
「Comparing the Overlay Versus Overlay2 Graph Drivers 」には、overlay および overlay2 ドライバーの詳細情報が記載されています。
Docker サービスの overlay2
グラフドライバーを有効化する方法については、Atomic Host ドキュメントの 「Overlay Graph Driver」セクションを参照してください。
2.1.8. セキュリティー警告
OpenShift Container Platform は、クラスター内のホストでコンテナーを実行し、ビルド操作やレジストリーサービスなど一部のケースでは特権付きコンテナーを使用して実行します。さらに、これらのコンテナーはホストの Docker daemon にアクセスし、docker build
および docker push
の操作を実行します。実質的に root アクセスが可能であるため、任意のイメージでの docker run
操作の実行については関連するセキュリティーリスクについてクラスター管理者が認識している必要があります。docker build
の操作についてはとくに注意が必要です。
特定のビルドをノードに割り当て、それらのノードのみにリスクを制限することで有害なコンテナーに関連する危険にさらされるリスクを制限できます。これを実行するには、『開発ガイド』の「特定のノードへのビルドの割り当て」のセクションを参照してください。クラスター管理者の場合は、「グローバルビルドのデフォルト設定およびオーバーライドの設定」のセクションを参照してください。
「SCC (Security Context Constraints)」を使用して、Pod が実行可能なアクションおよび、アクセス可能な機能を制御できます。Dockerfile の USER で実行するイメージを有効にする方法は、「Managing Security Context Constraints」 (ユーザーには cluster-admin 権限が必要) を参照してください。
詳細は、以下の記事を参照してください。
2.2. 環境要件
以下のセクションでは、OpenShift Container Platform 設定を含む環境の要件を定義します。これには、ネットワークの考慮事項や Git リポジトリーのアクセス、ストレージおよびクラウドインフラストラクチャープロバイダーなどの外部サービスへのアクセスなどの要件が含まれます。
2.2.1. DNS 要件
OpenShift Container Platform では、完全に機能する DNS サーバーが環境になければなりません。この場合、DNS ソフトウェアを実行する別個のホストを使用することが適しており、これによりプラットフォームで実行されるホストおよびコンテナーに対して名前解決を実行することができます。
各ホストの /etc/hosts ファイルにエントリーを追加するだけでは不十分です。このファイルはプラットフォームで実行されるコンテナーにはコピーされません。
OpenShift Container Platform の主要コンポーネントはコンテナーの内部で実行され、名前解決に以下のプロセスを使用します。
- デフォルトで、コンテナーはホストから DNS 設定ファイル (/etc/resolv.conf) を受信します。
- OpenShift Container Platform は Pod の最初のネームサーバーをノードの IP アドレスに設定します。
OpenShift Container Platform 3.2 の時点で、dnsmasq はすべてのマスターおよびノードで自動的に設定されます。Pod は DNS としてノードを使用し、ノードは要求を転送します。デフォルトで、dnsmasq はポート 53 でリッスンするようにノード上に設定されます。そのため、ノードはその他の種類の DNS アプリケーションを実行することができません。
NetworkManager はネットワークに自動的に接続するシステムの検出と設定を行うプログラムであり、dnsmasq を DNS IP アドレスで設定するためにノードで必要となります。
NM_CONTROLLED
はデフォルトで yes
に設定されます。NM_CONTROLLED
が no
に設定されている場合、NetworkManager のディスパッチスクリプトは関連する origin-upstream-dns.conf dnsmasq ファイルを作成せず、dnsmasq を手動で設定する必要があります。
同様に、ネットワークスクリプト (例: /etc/sysconfig/network-scripts/ifcfg-em1) で PEERDNS
パラメーターが no
に設定されている場合、dnsmasq ファイルは生成されず、Ansible のインストールは失敗します。PEERDNS
設定が yes
に設定されていることを確認してください。
以下はレコードのサンプルセットです。
master1 A 10.64.33.100 master2 A 10.64.33.103 node1 A 10.64.33.101 node2 A 10.64.33.102
適切に機能する DNS 環境がない場合には、以下に関連する障害が発生します。
- Ansible ベースの参照スクリプトによる製品のインストール
- インフラストラクチャーコンテナー (レジストリー、ルーター) のデプロイ
- OpenShift Container Platform web コンソールへのアクセス (IP アドレスのみではアクセスできないため)
2.2.1.1. ホストを DNS を使用するように設定する
環境内の各ホストが DNS サーバーのホスト名を解決するように設定されていることを確認します。ホストの DNS 解決の設定は、DHCP が有効にされているかどうかによって異なります。
- DHCP が無効にされている場合、ネットワークインターフェースを static (静的) に設定し、DNS ネームサーバーを NetworkManager に追加します。
- DHCP が有効にされている場合、NetworkManager ディスパッチスクリプトは DHCP 設定に基づいて DNS を自動的に設定します。
ホストが DNS サーバーで解決できることを確認するには、以下を実行します。
/etc/resolv.conf の内容を確認します。
$ cat /etc/resolv.conf # Generated by NetworkManager search example.com nameserver 10.64.33.1 # nameserver updated by /etc/NetworkManager/dispatcher.d/99-origin-dns.sh
この例では、10.64.33.1 が DNS サーバーのアドレスです。
/etc/resolv.conf に一覧表示されている DNS サーバーが OpenShift Container Platform 環境のすべてのマスターおよびノードの IP アドレスに対してホスト名を解決できることをテストします。
$ dig <node_hostname> @<IP_address> +short
例:
$ dig master.example.com @10.64.33.1 +short 10.64.33.100 $ dig node1.example.com @10.64.33.1 +short 10.64.33.101
2.2.1.2. DNS ワイルドカードの設定
オプションとして、ルーターが使用するワイルドカードを設定し、新規ルートが追加される際に DNS 設定を更新しなくてもよいようにします。
DNS ゾーンのワイルドカードは、最終的には OpenShift Container Platform ルーターの IP アドレスに解決される必要があります。
たとえば、有効期間 (TTL) の低い値が設定されていて、ルーターがデプロイされるホストのパブリック IP アドレスをポイントする cloudapps のワイルドカード DNS エントリーを作成します。
*.cloudapps.example.com. 300 IN A 192.168.133.2
仮想マシンが参照されるほとんどすべての場合では、ホスト名を使用する必要があり、使用するホスト名は各ノードの hostname -f
コマンドの出力と一致している必要があります。
各ノードホストの/etc/resolv.conf ファイルで、ワイルドカードエントリーを持つ DNS サーバーがネームサーバーとして一覧表示されていないこと、またはワイルドカードドメインが検索一覧に表示されていないことを確認してください。そうでない場合、OpenShift Container Platform が管理するコンテナーはホスト名を適切に解決できないことがあります。
2.2.2. ネットワークアクセス要件
共有ネットワークは、マスターとノードホスト間に存在する必要があります。標準クラスターインストールプロセスを使用して高可用性のために複数のマスターを設定する計画をしている場合、インストールのプロセスで 仮想 IP (VIP) として設定される IP を選択する必要もあります。選択した IP はすべてのノード間でルーティングできる必要があり、FQDN を使用して設定する場合は、すべてのノード上で解決する必要があります。
2.2.2.1. NetworkManager
NetworkManager はネットワークに自動的に接続するシステムの検出と設定を行うプログラムであり、dnsmasq を DNS IP アドレスで設定するためにノードで必要となります。
NM_CONTROLLED
はデフォルトで yes
に設定されます。NM_CONTROLLED
が no
に設定されている場合、NetworkManager のディスパッチスクリプトは関連する origin-upstream-dns.conf dnsmasq ファイルを作成せず、dnsmasq を手動で設定する必要があります。
2.2.2.2. firewalld のファイアウォールとしての設定
デフォルトのファイアウォールは iptables ですが、 新規のインストールには firewalld が推奨されます。 Ansible インベントリーファイル で os_firewall_use_firewalld=true
を設定することで、firewalld を有効にすることができます。
[OSEv3:vars] os_firewall_use_firewalld=True
この変数を true
に設定することで、必要なポートが開き、ルールがデフォルトゾーンに追加されます。これにより、firewalld が適切に設定されていることを確認できます。
firewalld のデフォルトの設定オプションを使用する際には設定オプションが制限され、これらをオーバーライドすることはできません。たとえば、ストレージネットワークを複数ゾーンのインターフェースでセットアップすることができますが、ノードが通信に使用するインターフェースはデフォルトゾーンになければなりません。
2.2.2.3. 必須ポート
OpenShift Container Platform のインストールは、iptables を使用して各ホストに内部のファイアウォールルール一式を自動的に作成します。ただし、ネットワーク設定でハードウェアベースのファイアウォールなどの外部ファイアウォールを使用する場合、インフラストラクチャーコンポーネントが、特定のプロセスまたはサービスの通信エンドポイントとして機能する特定ポートで相互に通信できることを確認する必要があります。
OpenShift Container Platform で必要な以下のポートがネットワーク上で開いており、ホスト間のアクセスを許可するよう設定されていることを確認してください。設定や使用状況によって、一部はポートはオプションになります。
表2.1 ノード間通信
4789 |
UDP |
別個のホストの Pod 間の SDN 通信に必要です。 |
表2.2 ノードからマスターへの通信
53 または 8053 |
TCP/UDP |
クラスターサービス (SkyDNS) の DNS 解決に必要です。3.2 よりも前のインストールまたは 3.2 にアップグレードした環境はポート 53 を使用します。新規インストールはデフォルトで 8053 を使用するため、dnsmasq が設定されることがあります。 |
4789 |
UDP |
別個のホストの Pod 間の SDN 通信に必要です。 |
443 または 8443 |
TCP |
ノードホストがマスター API と通信するために必要です。ノードホストがステータスをポストバックしたり、タスクを受信したりする際に使用します。 |
表2.3 マスターからノードへの通信
4789 |
UDP |
別個のホストの Pod 間の SDN 通信に必要です。 |
10250 |
TCP |
マスターは、 |
10010 |
TCP |
CRI-O を使用している場合は、このポートを開き、 |
表2.4 マスター間の通信
53 または 8053 |
TCP/UDP |
クラスターサービス (SkyDNS) の DNS 解決に必要です。3.2 よりも前のインストールまたは 3.2 にアップグレードした環境はポート 53 を使用します。新規インストールはデフォルトで 8053 を使用するため、dnsmasq が設定されることがあります。 |
2049 |
TCP/UDP |
NFS ホストをインストーラーの一部としてプロビジョニングする場合に必要です。 |
2379 |
TCP |
スタンドアロン etcd (クラスター化) が状態の変更を受け取るために使用されます。 |
2380 |
TCP |
etcd はスタンドアロン etcd (クラスター化) を使用する場合、リーダー選定とピアリング接続のためにこのポートがマスター間で開かれていることを要求します。 |
4789 |
UDP |
別個のホストの Pod 間の SDN 通信に必要です。 |
表2.5 外部からロードバランサーへの通信
9000 |
TCP |
|
表2.6 外部からマスターへの通信
443 または 8443 |
TCP |
ノードホストがマスター API と通信するために必要です。ノードホストがステータスをポストバックしたり、タスクを受信したりする際に使用します。 |
8444 |
TCP |
|
表2.7 IaaS デプロイメント
22 |
TCP |
インストーラーまたはシステム管理者が SSH で必要とします。 |
53 または 8053 |
TCP/UDP |
クラスターサービス (SkyDNS) の DNS 解決に必要です。3.2 よりも前のインストールまたは 3.2 にアップグレードした環境はポート 53 を使用します。新規インストールはデフォルトで 8053 を使用するため、dnsmasq が設定されることがあります。マスターホストの内部で開かれている必要があります。 |
80 または 443 |
TCP |
ルーターの HTTP/HTTPS 用です。ノードホスト、とくにルーターを実行しているノードで外部に開かれている必要があります。 |
1936 |
TCP |
(オプション) テンプレートルーターを実行して統計にアクセスする際に開かれている必要があります。統計をどのように公開する必要があるかによって、接続に対して外部または内部に開くことができます。この場合、追加の設定が必要になることがあります。詳しくは、以下の「注記」セクションを参照してください。 |
2379 および 2380 |
TCP |
スタンドアロン etcd 用です。マスターホストの内部で開かれている必要があります。2379 はサーバークライアント接続用です。2380 はサーバー間の接続用で、クラスター化された etcd がある場合にのみ必要となります。 |
4789 |
UDP |
VxLAN 用 (OpenShift SDN) です。ノードホストの内部で開かれている必要があります。 |
8443 |
TCP |
OpenShift Container Platform Web コンソール用で、API サーバーと共有します。 |
10250 |
TCP |
Kubelet 用です。ノード上で外部に開かれている必要があります。 |
注記
- 上記の例では、ポート 4789 は UDP (User Datagram Protocol) に使用されます。
- デプロイメントで SDN を使用している場合、レジストリーがデプロイされているのと同じノードからレジストリーにアクセスしているのでない限り、 Pod のネットワークはサービスプロキシー経由でアクセスされます。
- OpenShift Container Platform の内部 DNS は SDN 経由で受け取ることができません。クラウド以外のデプロイメントの場合、これはデフォルトで、マスターホストのデフォルトルートに関連付けられた IP アドレスに設定されます。クラウドデプロイメントの場合、これはデフォルトでクラウドメタデータで定義される最初の内部インターフェースに関連付けられた IP アドレスに設定されます。
-
マスターホストはポート 10250 を使用してノードに到達し、SDN を経由しません。デプロイメントのターゲットホストによって異なりますが、
openshift_public_hostname
の計算された値を使用します。 iptables ルールにより、ポート 1936 はアクセス不可能な状態になります。ポート 1936 を開くよう iptables を設定するには以下を使用してください。
# iptables -A OS_FIREWALL_ALLOW -p tcp -m state --state NEW -m tcp \ --dport 1936 -j ACCEPT
表2.8 集約ロギング
9200 |
TCP |
Elasticsearch API 用です。Kibana が表示用にログを取得できるようにインフラストラクチャーノードの内部で開かれている必要があります。ルートを使用して Elasticsearch に直接アクセスできるよう外部に開くこともできます。ルートは |
9300 |
TCP |
Elasticsearch のクラスター内での使用向けです。Elasticsearch クラスターのメンバーが相互に通信できるようにインフラストラクチャーノードで内部に開かれている必要があります。 |
2.2.3. 永続ストレージ
Kubernetes の永続ボリュームフレームワークにより、お使いの環境で利用可能なネットワークストレージを使用して、OpenShift Container Platform クラスターに永続ストレージをプロビジョニングできます。これは、アプリケーションのニーズに応じて初回 OpenShift Container Platform インストールの完了後に行うことができ、ユーザーは基礎となるインフラストラクチャーの知識がなくてもこれらのリソースを要求できるようになります。
「クラスターの設定』ガイドは、NFS、GlusterFS, Ceph RBD、OpenStack Cinder、AWS Elastic Block Store (EBS)、GCE Persistent Disks、および iSCSI を使用して永続ストレージを OpenShift Container Platform クラスターにプロビジョニングする方法についてのクラスター管理者向けの情報を提供しています。
2.2.4. クラウドプロバイダーの留意事項
OpenShift Container Platform をクラウドプロバイダーにインストールする場合に考慮すべき事柄がいくつかあります。
- Amazon Web Services の場合は、「Permissions」および「Configuring a Security Group」セクションを参照してください。
- OpenStack の場合は、「Permissions and the Configuring a Security Group」セクションを参照してください。
2.2.4.1. 検出された IP アドレスとホスト名の上書き
一部のデプロイメントでは、ユーザーがホストの検出されたホスト名と IP アドレスを上書きすることが必要です。デフォルト値を確認するには、openshift_facts
Playbook を実行します。
# ansible-playbook [-i /path/to/inventory] \ /usr/share/ansible/openshift-ansible/playbooks/byo/openshift_facts.yml
Amazon Web Services の場合は、「検出された IP アドレスとホスト名の上書き」のセクションを参照してください。
検出された共通の設定を確認してみましょう。それらが想定される内容と異なる場合にはそれらを上書きすることができます。
「通常インストール (Advanced installation)」トピックでは、利用可能な Ansible 変数を詳しく説明します。
変数 | 使用法 |
---|---|
|
|
|
|
|
|
|
|
|
|
2.2.4.2. クラウドプロバイダーのインストール後の設定
インストールプロセスの後に、AWS、OpenStack、または GCE 用に OpenShift Container Platform を設定することができます。