type
status
date
slug
summary
tags
category
icon
password
书籍
OpenShift コンテナプラットフォームのインストール
目標
- OpenShiftをインストールし、クラスターを構成する。
目的
- インストールのためにサーバーを準備する。
- インストール手順を実行して、OpenShiftクラスターを構築および構成する。
- インストール後の作業を実行し、クラスターの構成を確認する。
セクション
- インストールのためのサーバー準備(ガイド付き演習)
- Red Hat OpenShift Container Platformのインストール(ガイド付き演習)
- インストール後の作業実行(ガイド付き演習)
ラボ
なし
インストールの準備
目標
このセクションが終了した時点で、受講者はインストールのためにサーバーを準備できるようになります。
インストール概要
- Red Hat OpenShift Container Platformは、RPMパッケージとコンテナイメージの組み合わせで提供されます。
- RPMパッケージはRed Hatの標準リポジトリ(Yumリポジトリ)からサブスクリプションマネージャを使用してダウンロードされ、コンテナイメージはRed Hatのプライベートコンテナレジストリから取得されます。
インストールの方法
OpenShiftのインストールには2つの方法があります:
- クイックインストール(Quick Installation):シンプルなクラスター設定に使用されます。少数の質問に答えることでインストールが始まります。
- 高度なインストール(Advanced Installation):複雑なインストールに使用され、Ansible Playbooksを用いて自動化します。
OpenShift 3.9以降、クイックインストール方式は廃止され、高度なインストール方式が推奨されるようになりました。このコースでは高度なインストール方式を使用します。
Ansibleの役割
Ansibleはオープンソースの自動化プラットフォームで、複数のサーバーを一貫した方法でカスタマイズおよび構成するために使用されます。Ansible Playbooksは、サーバーの望ましい構成を宣言するために使用され、サーバーが宣言された状態にない場合に構成が調整されます。Ansibleは「冪等性(idempotence)」を持ち、何度実行しても最終的な構成が変わりません。
OpenShiftのインストールにはAnsible Playbooksとロールが使用され、これらは
atomic-openshift-utils
パッケージに含まれています。インストール前の準備
OpenShiftをインストールするには、クラスターのホストサーバーを準備する必要があります。インストールが始まる前に以下の準備を行います:
- パスワードレスSSHの設定: リモートの全てのマシンにおいて、ユーザーアカウントのパスワードなしSSH接続を設定します。また、リモートユーザーがrootでない場合、そのユーザーにはsudo権限を設定します。
- 通信確認:
マスターサーバーとノードサーバー間で通信ができることを確認します。
ping
コマンドを使用して、ホスト間の通信ができるかどうかを確認します。
- ワイルドカードDNSゾーンの設定:
OpenShiftルーターコンポーネントが動作するノードのIPアドレスに解決するワイルドカードDNSゾーンを設定する必要があります。
ping
やdig
コマンドで確認します。
ワイルドカードDNSゾーンとは、特定のドメインに対するすべてのサブドメインを一括して指定できるDNSの設定です。たとえば、
*.example.com
というワイルドカードDNSゾーンを設定すると、foo.example.com
やbar.example.com
など、example.com
のすべてのサブドメインに対して同じIPアドレスやサービスを割り当てることができます。OpenShiftのようなクラスタ環境では、動的に増減するサービスに対応するため、ワイルドカードDNSを使って、サブドメインをすべて一つのIPアドレス(通常はルーターのIPアドレス)に解決させることがあります。これにより、個別にDNSレコードを管理する必要がなくなり、運用が簡便になります。
- サーバーの準備: サーバーはRed Hat Enterprise Linux 7.3、7.4、または7.5である必要があります。各ホストはRed Hat Subscription Management(RHSM)を使用して登録され、OpenShift Container Platformのサブスクリプションに紐付けられます。
- 必須リポジトリの有効化:
必要なリポジトリが有効になっていることを確認します。
rhel-7-server-rpms
以外にも、rhel-7-server-extras-rpms
やrhel-7-server-ansible-2.4-rpms
などを有効にします。
Ansibleのインストール
- リポジトリの有効化:
subscription-manager
コマンドを使用して、Ansibleのリポジトリを有効化します。
- Ansibleのインストール:
リポジトリを有効化した後、
yum
コマンドを使ってAnsibleをインストールします。
Ansible Playbooksの使用
Ansible Playbooksは、構成タスクを自動化するために使用されます。PlaybookはYAML形式で書かれ、複数のプレイ(tasksの集まり)を含みます。各プレイは指定されたホストグループに対してタスクを実行します。
Ansible Playbookの例:
- 最初のプレイ「Install a File」では、
workstations
ホストグループの各サーバーに対して/tmp/sample.txt
というファイルをコピーします。
- 2番目のプレイ「Hello OpenShift Enterprise v3.x」では、
OSEv3
ホストグループのサーバーにhello
ロールを適用します。
Ansibleインベントリファイル
インベントリファイルは、実行するプレイブックに関連するホストグループを定義します。以下のように、各ホストグループを定義し、それぞれのホストに必要な設定を行います。
- ワークステーションホストグループの定義
workstations
というホストグループを定義する。- このホストグループには
workstation.lab.example.com
という 1 台のホストが含まれる。
- ホスト変数の定義
- ホストごとに変数(ホスト変数)を定義できる。
- ホスト変数の値は、同じ名前のグループ変数よりも優先される。
- 例として、
master.lab.example.com
のhello_message
変数の値は"I am an OSEv3 master."
となる。
- ホストグループの入れ子構造
- ホストグループは、他のホストグループを含むことができる。
- ホストグループ名に
:children
を付けると、その後のリストにあるグループがメンバーとなる。 - 例えば、
OSEv3
グループには、指定された 4 つのホストグループのいずれかに所属するホストが含まれる。
- グループ変数の定義
- ホストグループ名に
:vars
を付けると、その後のリストがグループ変数として定義される。 - グループに属するすべてのホストに、この変数が適用される。
- 例えば、ある Playbook の
hello
ロールがhello_message
変数を使用する場合、OSEv3
グループに属する全ホストでこの変数を定義する必要がある。
Ansible Playbook の実行
このクラスでは、関連する Playbook のファイルはプロジェクトディレクトリ内に整理されています。シンプルな Playbook プロジェクトには、次のようなファイルやディレクトリが含まれます:
- インベントリファイル
- playbooks ディレクトリ(Playbook の数が少ない場合は省略可能)
- ansible.cfg ファイル(Ansible のコマンドラインツールの動作をカスタマイズするための設定ファイル)
- SSH の設定を定義
- Playbook のデフォルトのインベントリファイルを指定
このクラスでは、
ansible.cfg
ファイルは次のような設定になっています:この設定により、Ansible は各タスクの実行時に SSH を使用して student ユーザーで接続し、その後 root ユーザーに昇格 します。
また、インベントリファイルは
ansible.cfg
と同じディレクトリにある inventory
ファイルを使用します。Playbook の実行方法
このプロジェクト構成では、Playbook の実行が簡単になります。
ターミナルでプロジェクトのルートディレクトリに移動し、以下のコマンドを実行すると Playbook が実行されます:
異なるインベントリファイルを使用して Playbook を実行する場合 は、
-i
オプションを指定します:環境の準備
Playbook を実行する前に、以下の条件を満たしていることを確認してください:
- パスワードなしの SSH 接続が設定されていること
- すべてのリモートマシンのユーザーアカウントで、パスワードなしで SSH 接続できるように設定する必要があります。
- リモートユーザーが
root
ではない場合、パスワードなしでsudo
が実行できるように権限を付与する必要があります。 - クラス環境では、
student
ユーザーがこの要件を満たしています。
- マスターとノード間で通信できること
- マスターとノードが相互に通信できることを確認してください。
ping
コマンドを使用すると、接続が可能かどうかをテストできます:
このようにして、環境を適切に準備したうえで Ansible Playbook を実行できます。
ワイルドカード DNS ゾーンの設定と OpenShift の事前準備
ワイルドカード DNS ゾーンの設定
- OpenShift のルーターコンポーネントが動作するノードの IP アドレスに、ワイルドカード DNS ゾーンが解決される必要があります。
- これを確認するには、
ping
またはdig
コマンドを使用し、ドメイン内に存在しないホスト名を指定して実行します。
- 例えば、クラス環境では
apps.lab.example.com
というワイルドカードドメインが OpenShift 上で稼働するすべてのアプリケーションに使用されます。
- ワイルドカード DNS ゾーンの設定について
- RHCSA (Red Hat Certified System Administrator) または同等のスキルを持つシステム管理者であれば、サーバーの設定を行い、ほとんどの要件を満たすことができます。
- ただし、ワイルドカード DNS ゾーンの設定には、DNS サーバー管理に関する高度な知識が必要なため、経験豊富なシステム管理者の支援が必要になる可能性があります。
- OpenShift のルーターは OpenShift ノード上で動作するため、適切なノードの IP アドレスで DNS を設定する計画を立てる必要があります。
OpenShift の高度なインストール方法と事前要件
OpenShift の高度なインストール方法では、追加の事前要件が必要です。
クラス環境では、これらの要件を満たすために Ansible Playbook が用意されています。この Playbook を実行すると、次の要件を満たすことができます。
1. OpenShift クラスタの OS 要件
- 各 OpenShift Container Platform クラスタのマシンは Red Hat Enterprise Linux 7.3、7.4、または 7.5 を使用すること。
2. サブスクリプションの登録
- 各 OpenShift クラスタホスト(マスターおよびノード)は、Red Hat Subscription Management (RHSM) に登録されている必要があります(RHN Classic は使用しない)。
- 各ホストには、有効な OpenShift Container Platform のサブスクリプションが付与されていること。
3. 必要なリポジトリの有効化
- 必要なリポジトリのみを有効化 し、それ以外は無効にすること。
- 有効にするリポジトリ:
- 標準の RHEL リポジトリ:
rhel-7-server-rpms
- 追加のリポジトリ:
- これらのリポジトリは、OpenShift Container Platform のインストールに必要なパッケージを提供します。
- すべてのマスターおよびノードに対して、この設定を適用する必要があります。
4. 必要なパッケージのインストール
各 OpenShift ホストに、以下の基本パッケージをインストールします。
atomic-openshift-utils
パッケージ- 高度なインストール方法では、Ansible Playbook やその他のインストールユーティリティ を利用するため、
atomic-openshift-utils
をインストールする必要があります。
5. Docker のインストールと設定
- 各 OpenShift ホストに
docker
をインストールし、適切に設定すること。
- デフォルトの Docker 設定
- デフォルトでは、Docker デーモンは thin pool を loopback デバイス上で使用 してコンテナイメージを保存します。
- 本番環境での推奨設定
- Red Hat OpenShift の本番環境では、loopback デバイスではなく thin pool 論理ボリュームを使用する必要があります。
- thin pool を loopback で使用する → ファイルベースの仮想ディスクを使う(デフォルト・簡単だが遅い)
- thin pool を LVM で設定する → 物理ディスクを使う(本番環境向き・高速・安定)
docker-storage-setup
コマンドを使用して、適切なストレージをセットアップします。- 詳細な Docker ストレージの設定方法については、Red Hat OpenShift の公式ドキュメント を参照してください。
thin pool を loopback とは?
1. thin pool とは?
thin pool(シンプロビジョニングプール) は、LVM(Logical Volume Manager) の一部として提供される シンプロビジョニング の技術です。
シンプロビジョニングを使用すると、実際の物理ストレージよりも大きな仮想ストレージを作成 でき、必要に応じてストレージを動的に割り当てることができます。
Docker では、
devicemapper
ストレージドライバーを使用する場合に thin pool を利用してコンテナイメージやレイヤーを管理します。ホストの準備タスクの実行
クラス環境では、OpenShift Container Platform のインストール前に必要な準備作業を 自動化する Ansible Playbook (
prepare_install.yml
) が提供されています。この Playbook を実行すると、インストールの事前準備が完了します。
この Playbook を実行することで、Red Hat OpenShift Container Platform をインストールするための環境が整います。
注意事項
prepare_install.yml
ファイルは、クラス環境専用に作成されたカスタム Playbook です。この Playbook は、公式のリポジトリやパッケージには含まれていません。
この
prepare_install.yml
Playbook を実行すると、以下の処理が実行されます:- Docker デーモンがインストールされる。
- Docker デーモンのストレージが適切に設定される。
- 各ノードがプライベートレジストリの証明書を信頼できるように設定される。
- OpenShift に必要な基本パッケージがインストールされる。
参考資料
- DO407: Automation with Ansible I
- OpenShift Container Platform インストール & 設定ガイド
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/19fd7ae8-88e2-8007-b242-fee296691a81
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章