著者: 伊藤 雅博, 株式会社日立製作所
はじめに
AWS上にOpenShift Container Platform (OCP) のプライベートクラスタを構築する手順を紹介します。プライベートクラスタには以下の特徴があります。
- クラスタからインターネットへの接続は可能だが、インターネットからの接続は不可
- ネットワークドメインはプライベートドメインのみを使用し、パブリックドメインは使用しない
なお、本稿で説明する手順はセルフマネージドのOCPが対象で、マネージドサービスであるROSA (Red Hat OpenShift Service on AWS) は対象外です。
記事一覧:
- AWSにおけるOpenShiftプライベートクラスタの構築(本稿)
- OpenShiftにStreams for Apache Kafka (Strimzi) をデプロイする
- Streams for Apache Kafka Console (Kafkaコンソール) をデプロイする
- Streams for Apache Kafka (Strimzi) の認証・認可
概要
構築環境
構築する環境の概要を以下に示します。
- プラットフォーム: AWS
- OpenShiftバージョン: 4.20
- ネットワーク要件:
- インターネットへの接続は許可、インターネットからの接続は不許可
- プライベートドメインを使用(パブリックドメインは準備不要)
- 3つのAvailability Zone (AZ) で冗長化
- OpenShiftクラスタ構成:
- Bootstrapノード (構築時のみ): 1台
- Controllerノード (Masterノード / Control plane): 3台
- Computeノード (Workerノード): 3台
- 管理用ノード(OpenShift構築用ノード 兼 OpenShiftクライアントノード):
- Managerノード: 1台
構築するVPCとOpenShiftクラスタの構成図を以下に示します。
- 公式ドキュメント: OpenShift Container Platform 4.20
ノード構成
OpenShiftクラスタ
OpenShiftクラスタの各ノードは、OCPのインストールプログラムが自動作成します。Bootstrapノードはインストール完了後に削除されるため、最終的に6台でクラスタを構成します。OSはRed Hat Enterprise Linux CoreOS (RHCOS) を使用します。
| ノード種別 | 台数 | OS | インスタンスタイプ | ボリュームタイプ |
|---|---|---|---|---|
| Bootstrap | 1 | RHCOS | - | - |
| Controller | 3 | RHCOS | m6i.xlarge (4 vCPU, 16 GiBメモリ) | gp3, 100 GB, 2000 IOPS |
| Compute | 3 | RHCOS | m6i.xlarge (4 vCPU, 16 GiBメモリ) | gp3, 200 GB, 2000 IOPS |
参考:
管理ノード
OCPのインストールプログラムを実行する管理ノードを1台用意します。インストール完了後は、OpenShiftクラスタにアクセスするためのクライアントノードとして使用します。
| ノード種別 | 台数 | OS | インスタンスタイプ | ボリュームタイプ |
|---|---|---|---|---|
| Manager | 1 | Amazon Linux 2023 | m6i.large (2 vCPU, 8 GiBメモリ) | gp3, 100 GB, 1000 IOPS |
OpenShift構築方法の概要
OpenShiftの構築は以下の方式で実施します。
- インストール方式:
installer-provisioned infrastructure (IPI)インストール - IPIインストールの種類: 既存VPCへのプライベートクラスタ構築
installer-provisioned infrastructure (IPI) の既存VPCへのプライベートクラスタ構築では、事前にインストール先のVPCを構築しておく必要があります。OCPのインストールプログラムは、そのVPC内にEC2インスタンスやELB、Route 53のプライベートホストゾーンなどを作成し、OpenShiftクラスタを構築します。
参考: 3.6. プライベートクラスターの AWS へのインストール
事前準備
Red HatのサイトおよびAWSコンソールから準備を実施します。
インストール媒体の取得
Red Hatのサイトにログインして、OCPのIPIインストールのページからインストールプログラムなどを取得します。
以下の3つのファイルをダウンロードします。
- OpenShift installer:
openshift-install-linux.tar.gz- OCPのインストールプログラム
- Command line interface:
openshift-client-linux.tar.gz- OCPクラスタにアクセスするためのCLIクライアント
- Pull secret:
pull-secret.txt- Red Hatコンテナレジストリの認証情報
プライベートVPCの構築
OCPクラスタをデプロイするプライベートVPCを作成します。
プライベートVPCの要件
- クラスタがインターネットへアクセス可能であること
- 各種AWSサービスのAPIにアクセスするため
- コンテナレジストリからコンテナイメージを取得するため
- クラスタがVPCに割り当てられたRoute 53のプライベートホストゾーンを使用して、内部DNSレコードを解決できること
プライベートVPCの作成
構築するVPCの構成図を以下に示します。
OCPクラスタの配置先となるプライベートサブネットと、インターネットアクセス用のパブリックサブネットを用意します。
プライベートサブネットからはパブリックサブネットのNAT Gateway経由でインターネットにアクセスします。これにより、インターネットからプライベートサブネット内のクラスタへはアクセスできません。
また、3つのAZにプライベートサブネットとパブリックサブネットを配置して冗長化することで、AZ障害に耐えられる構成とします。
このようなプライベートVPCは一般的な構成なので、AWSコンソールのVPC作成画面から、これらのVPCコンポーネントをまとめて作成できます。
作成するVPCコンポーネント:
- VPC Name:
ocp420-vpc- 任意の名前
- IPv4 CIDR:
172.26.0.0/16- 他のVPCと接続する場合は重複しないようにすること
- Subnet
- プライベートサブネット × 3AZ
- パブリックサブネット × 3AZ
- NAT Gateway: 各パブリックサブネットに配置し、Elastic IPを付与
- Internet Gateway: VPCに1個配置
- VPC DHCPオプション: クラスタの内部DNSレコード解決に必要
-
enableDnsSupport(DNS解決): 有効(デフォルト) -
enableDnsHostnames(DNSホスト名): 有効(デフォルト)
-
- Route Table: (デフォルトで自動作成)
- 下記のリソースマップのようなルートが自動的に構成されます
プライベートサブネットとパブリックサブネットの接続:
パブリックサブネットとInternet Gatewayの接続:
プライベートサブネットとS3用Gateway Endpointの接続:
(任意)VPCエンドポイントの作成
今回の構成では、VPCからS3以外のAWSサービスへのアクセスはインターネットを経由します。インターネットを経由させたくない場合は、該当サービスのVPCエンドポイントを使用する必要があります。今回は実施していません。
管理ノードの構築
VPCのいずれかのプライベートサブネット内に、管理用のEC2インスタンス(Managerノード)を作成します。この管理ノードはOCPインストールプログラムの実行と、構築後のクラスタ操作に使用します。
管理ノードのOSは任意ですが、OCPインストールプログラムとAWS CLIを使用できる必要があります。今回はAmazon Linuxを使用します。
管理ノード作成後のVPCの構成を以下に示します。
OpenShift用IAMユーザの準備
インストールプログラムの実行に使用するIAMユーザを作成します。このIAMユーザは、構築後のOCPクラスタからAWSサービスへアクセスする際にも利用します。
参考:
IAMユーザの作成
作成するIAMユーザに以下のポリシーをアタッチします。インストールプログラムがクラスタ構築時に各OCPコンポーネントへ認証情報を付与するために必要です。
- ユーザ名:
ocp420-install(任意の名前) - ポリシー:
AdministratorAccess
アクセスキーの作成
作成したIAMユーザのアクセスキーを作成します。ユースケースは コマンドラインインターフェイス (CLI) を選択します。作成したアクセスキーとシークレットキーを控えておきます。
プライベートクラスタの構築
管理ノードにログインして実施します。管理ノードにはAWS CLIがインストールされている必要があります。
IAMユーザの利用設定
管理ノードでAWS CLIを起動して、IAMユーザのアクセスキーとシークレットキーを設定します。インストールプログラムは、このIAMユーザを使用してAWSを操作します。
# 設定
aws configure
## AWS Access Key ID [None]:
## AWS Secret Access Key [None]:
## Default region name [None]:
## Default output format [None]:
# 確認
aws sts get-caller-identity
(任意)OCPノード用SSH鍵の生成
OCPの各ノードへのログインに使用するSSH鍵を事前に生成しておくことで、クラスタ構築後に各ノードへSSH接続が可能になります。これは任意ですが、SSH鍵が無い場合はノードにログインできないため、デバッグで困ることがあります。
# OpenShiftクラスタに属するノードへSSHするために使用する鍵を生成
ssh-keygen -t rsa -b 4096 -f ~/.ssh/ocp420
## Generating public/private rsa key pair.
## Enter passphrase (empty for no passphrase):
## Enter same passphrase again:
## Your identification has been saved in /home/ec2-user/.ssh/ocp420
## Your public key has been saved in /home/ec2-user/.ssh/ocp420.pub
インストールプログラムの配置
管理ノードに以下のファイルを配置しておきます。
- OpenShift installer:
openshift-install-linux.tar.gz- OCPのインストールプログラム
# インストールプログラムを解凍
tar -zxvf openshift-install-linux.tar.gz --one-top-level
# 確認
cd openshift-install-linux/
ls -l
## -rw-r--r--. 1 ec2-user ec2-user 706 Sep 27 13:48 README.md
## -rwxr-xr-x. 1 ec2-user ec2-user 630706360 Sep 27 13:48 openshift-install
インストール設定ファイルの手動作成
プライベートクラスタを構築するため、インストール設定ファイル install-config.yaml を手動で作成します。今回作成した設定ファイルを以下に示します。
apiVersion: v1
# 任意のドメイン名:
# Route 53のプライベートホストゾーン(クラスタ名.ドメイン名)を自動作成するため重複しないこと
baseDomain: ossc.hitachi.com
metadata:
# クラスタ名
name: ocp420
# Controllerノードの設定
controlPlane:
name: master
platform:
aws:
# インスタンスタイプ
type: m6i.xlarge
rootVolume:
iops: 2000
size: 100
type: gp3
# 台数
replicas: 3
# Computeノードの設定
compute:
- name: worker
platform:
aws:
# インスタンスタイプ
type: m6i.xlarge
rootVolume:
iops: 2000
size: 200
type: gp3
# 台数
replicas: 3
# 各ネットワークのCIDR(IPアドレスブロック)を指定:
# ネットワーク間、および到達可能な他のVPCと範囲が重複しないこと
networking:
# PodのIPアドレスブロック
clusterNetwork:
# デフォルト値
- cidr: 10.128.0.0/14
hostPrefix: 23
# ノードのIPアドレスブロック
machineNetwork:
# OpenShiftクラスタ用VPCのCIDRを設定
- cidr: 172.26.0.0/16
# ServiceのIPアドレスブロック
serviceNetwork:
# 他のVPCと重複しない範囲を指定
- 172.24.0.0/16
# 各ノードとロードバランサの配置先を指定
platform:
aws:
# AWSリージョン
region: ap-northeast-1
vpc:
# VPCのプライベートサブネットに配置
subnets:
# ocp420-subnet-private1-ap-northeast-1a
- id: subnet-0f7a55831a0a0b68f
roles:
- type: BootstrapNode
- type: ClusterNode
- type: ControlPlaneInternalLB
- type: IngressControllerLB
# ocp420-subnet-private2-ap-northeast-1c
- id: subnet-07c5c4ae7e854fbff
roles:
- type: ClusterNode
- type: ControlPlaneInternalLB
- type: IngressControllerLB
# ocp420-subnet-private3-ap-northeast-1d
- id: subnet-09ff3944ecbc74725
roles:
- type: ClusterNode
- type: ControlPlaneInternalLB
- type: IngressControllerLB
# 公開範囲:
# Internal を指定し、インターネットからアクセスできないプライベートクラスタをデプロイする
publish: Internal
# Cloud Credential Operator (CCO) モードの指定
# Mint モードを指定し、インストールユーザの認証情報から各コンポーネント用の認証情報を払い出す
credentialsMode: Mint
# ノード用のSSH公開鍵(~/.ssh/ocp420.pub)の中身を貼り付け
sshKey: xxxxxxxxxx
# Red Hatコンテナレジストリの認証情報
# Red Hat OpenShift Cluster Managerから取得したプルシークレット(pull-secret.txt)の中身を貼り付け
pullSecret: xxxxxxxxxx
参考:
- 3.6.4. インストール設定ファイルの手動作成
- 3.6.4.4. AWS のカスタマイズされた install-config.yaml ファイルのサンプル
- 第7章 AWS のインストール設定パラメーター
インストールの実行
インストール設定ファイルを配置
# インストールプログラムのディレクトリに移動
cd openshift-install-linux
# インストール作業用の空ディレクトリを作成
mkdir config
# インストール作業用ディレクトリに install-config.yaml を配置して確認
ls -l config
## -rw-rw-r--. 1 ec2-user ec2-user 5884 Nov 6 05:29 install-config.yaml
インストール実行
# クラスタのデプロイメントを初期化
./openshift-install create cluster --dir ./config --log-level=debug
インストール中に install-config.yaml は削除され、そこから生成されたファイル群に置き換わります。インストール完了まで45分ほどかかります。
インストール完了
クラスタのデプロイが正常に完了すると、kubeadmin ユーザの認証情報と、クラスタにアクセスするための指示が表示されます。認証情報は openshift-install-linux/config/.openshift_install.log にも出力されます。
・・・
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run
INFO export KUBECONFIG=/home/ec2-user/openshift-install-linux/config/auth/kubeconfig
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp420.ossc.hitachi.com
INFO Login to the console with user: "kubeadmin", and password: "XXXXX-XXXXX-XXXXX-XXXXX"
INFO Time elapsed: 40m59s
インストール完了後も、インストールプログラムと作成されたファイルは削除しないでください。これらはアンインストール(OCPクラスタ削除)の際に必要となります。
インストール後のVPC構成
OCPインストール完了後のVPCの構成図を以下に示します。Bootstrapノードはインストール中のみ存在し、インストール完了後は自動的に削除されます。
OpenShift CLIの構築
OCPクラスタにアクセスするためのCLIクライアントを構築します。
CLIのインストール
管理ノードに以下のファイルを配置しておきます。
- Command line interface:
openshift-client-linux.tar.gz- OCPクラスタにアクセスするためのCLIクライアント
# ファイルを解凍
tar -zxvf openshift-client-linux.tar.gz
# ocコマンドとkubectlコマンドを配置
sudo cp oc kubectl /usr/local/bin/
# 実行確認
oc version
## Client Version: 4.20.0
## Kustomize Version: v5.6.0
## Server Version: 4.20.0
## Kubernetes Version: v1.33.5
# 実行確認
kubectl version
## Client Version: v1.33.3
## Kustomize Version: v5.6.0
## Server Version: v1.33.5
CLIの認証情報を設定
OpenShift CLIの認証情報を設定します。
OCPインストール完了後、openshift-install-linux/config/auth/kubeconfig にクラスタのURLや kubeadmin ユーザの認証情報が格納されています。以下のとおり、このファイルのパスを KUBECONFIG 環境変数に設定します。
~/.bash_profile:
# kubeadmin 認証情報をエクスポート
export KUBECONFIG=~/openshift-install-linux/config/auth/kubeconfig
反映:
source ~/.bash_profile
CLIの動作確認
# 実行ユーザを確認
oc whoami
## system:admin
# 全Podの一覧を表示
oc get pods -A
OpenShift Webコンソールの使用
OpenShift WebコンソールのURLは、インストール時のログファイルまたは下記コマンドで確認できます。
# OpenShift Webコンソールのルート(エンドポイント)をリスト表示
oc get routes -n openshift-console | grep 'console-openshift'
## console console-openshift-console.apps.ocp420.ossc.hitachi.com console https reencrypt/Redirect None
OpenShift Webコンソールのエンドポイント(ELB)はプライベートサブネット内にあるため、ブラウザから直接アクセスできない場合はポートフォワードなどを使用する必要があります。
おわりに
本稿ではAWSにおけるOpenShiftプライベートクラスタの構築手順を紹介しました。次回はOpenShift上にRed Hat Streams for Apache Kafkaをデプロイする方法を紹介します。








