本番環境でのアプリケーション実行
OpenShiftのコンセプトは、開発者はコードを書くことに集中できるよう設計されているところにあります。そのため書いたコードを手元の開発用PCでも自社データセンター内のインフラでも、パブリッククラウド上のスケーラブルなクラスターでも同じように動作するのが特徴です。
OpenShiftの利用形態
Red Hatでは、利用スタイルに合わせて5つの利用形態を提供しています。
OpenShift Container Platform
OpenShift Container Platformは、Red Hat Enterprise LinuxがサポートするインフラストラクチャにOpenShift環境を提供します。これにより、オンプレミスのデータセンター、パブリッククラウド、プライベートクラウドと場所を問わずに、どこでも同じように動作させることが可能となります。インストーラーが提供されていますので、利用者がダウンロードして自分でクラスターを構築して利用します。
OpenShift Dedicated
OpenShift Dedicatedは、Red Hatが管理するシングルテナントのエンタープライズKubernetesクラスターを提供するサービスです。主に企業向けで、管理者権限による環境設定はネットワークの設定やセキュリティ設定などいくつかの項目に制限されますが、インフラストラクチャの構築やバージョンアップの手間を省くことができます。利用するには別途Red Hat社との契約が必要です。
Azure Red Hat OpenShift
Azureでは、OpenShift Container Platformをフルマネージドサービスとして提供しています。このAzure Red Hat OpenShiftは、Azureが提供するPaaSサービスの1つで、Azure上にOpenShift Container Platformを構築できるだけでなく、運用・管理をサービスとして提供します。OpenShift Dedicatedとの違いは、コマンドでのワーカーノードのスケーリングなどができるため、スケーラブルなアプリケーション実行基盤を作りたい場合に向いています。利用するにはAzureのアカウントが必要です。
OpenShift Online
OpenShift Onlineは、ブラウザから申し込むだけでOpenShiftが利用できるサービスです。管理者権限によるOpenShift環境の設定変更はほぼできませんが、もっとも手軽に始められるので、まずは無償試用を試してみるとよいでしょう。
OKD
オープンソースのOpenShiftです。コミュニティベースで開発が進められているOpenShiftで、だれでも無償で利用できます。オープンソースの醍醐味はだれでも開発に参加できることあります。GitHubで開発が進んでいますので、ぜひ参加してみてください。
AzureでのOpenShiftクラスターの構築
2019年10月にGAされたOpenShift 4.2では、実行環境をプロビジョニングするためのインストーラーが提供されました。このインストーラーを使うとコマンド1つで以下の環境にOpenShiftクラスターを構築できます。これをIPI(Installer-Provisioned Infrastructure)インストールと呼び、執筆時点では以下の環境をサポートしています。
- Amazon Web Services
- Google Cloud Platform
- Microsoft Azure
- Red Hat OpenStack Platform
本記事では、インストーラーを使ったIPIインストールによる手軽なクラスター構築を説明します。エンタープライズシステムでの利用用途の多いパブリッククラウドAzure上でOpenShiftクラスターを構築する例を紹介しますが、基本的な流れはAWSやGCPなどでも同じです。
Tips:プロキシ内部などの環境でインフラの構成変更が必要なときは
インストーラーを使ってクラスター構築する場合は、インストールプロセスを実行するコンピューターを含むすべてのマシンがコンテナーのイメージをプルし、テレメトリーデータをRed Hatに送信するため、直接インターネットにアクセスできる必要があります。インターネットアクセスができない場合はインストーラではなく、利用者がプロビジョニングした環境にOpenShiftを手動でインストールしてください。このように、自分でインフラを作ってOpenShift 4をインストールする手順をUPI(User-provisioned infrastructure)と呼びます。UPIインストールを行うことで、プロキシ内部にクラスターを配置したり、制限付きのネットワークインストールを実行したりできます。制限付きネットワークインストールでは、クラスターのインストールに必要なイメージをダウンロードし、それらをミラーレジストリに配置し、そのデータを使用してクラスターをインストールできます。
事前準備
Azure上にOpenShiftをインストールする際は、多くの仮想マシン(vCPU)を利用します。そのため、デフォルトのAzureサブスクリプションに対して利用できるリソース制限を緩和する必要があります。また、名前解決のために必要なAzure DNSの設定やサービスプリンシパルを作成します。なお、サービスプリンシパルとは、Azureのリソースを操作するアプリケーションのためのIDです。このサービスプリンシパルに必要な権限を付与できます。
- Azureのリソースの制限緩和
- Azure DNSの設定
- サービスプリンシパルの設定
事前準備の詳細な手順については、公式サイトを参照してください。
(1)と(2)については、申請や設定後有効になるまでに時間がかかる場合がありますので、事前に作業しておくとよいでしょう。
また、(3)で指定したサービスプリンシパル設定のうち、次の値が以降のOpenShiftクラスターのインストールで必要になります。各自でメモに控えておいてください。
- AzureのサブスクリプションID
- テナントID
- サービスプリンシパルID
- サービスプリンシパルIDのパスワード
これらの作業を行うにあたり、必要に応じてVisual Studio CodeやAzure CILなどをインストールしておくと便利です。
SSHキーの作成
クラスターでインストールのデバッグするためインストールプログラムとインストールプログラムの両方にSSHキーを設定する必要があります。
このSSHキーを使用して、マスターノードにSSH接続できます。クラスターを構築すると、キーがcoreユーザーの~/.ssh/authorized_keysリストに追加されます。
次のコマンドは、openshift_rsaという名前でSSHキーを作成する例です。
$ ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/openshift_rsa
次に、ssh-agentバックグラウンドタスクとしてプロセスを開始します。
$ eval "$(ssh-agent -s)"
最後に、次のコマンドでSSHキーを追加します
$ ssh-add ~/.ssh/openshift_rsa
これでSSHキーの作成は完了です。
インストールプログラムの入手
OpenShiftのインストールプログラムはOpenShift Infrastructure Providersからダウンロードできます。ここから「Azure」のものをダウンロードし、解凍します。
なお、ダウンロードにはRed Hatアカウントが必要です。
ここで、インストール時に必要となるPull Secretをダウンロードします。このPull Secretは、OpenShiftのインストールに必要なコンポーネントのコンテナーイメージを提供するQuay.ioへの認証で使用します。ファイルをダウンロードするか、[Copy Pull Secret]ボタンをクリックして、クリップボードにはりつけておきましょう。
Pull Secretの形式は以下のようになっています。
{
"auths": {
"cloud.openshift.com": {
"auth": "xxxx"
},
"quay.io": {
"auth": "xxxx",
"email": "username@domain.com"
},
"registry.connect.redhat.com": {
"auth": "xxxx",
"email": "username@domain.com"
},
"registry.redhat.io": {
"auth": "xxxx",
"email": "username@domain.com"
}
}
}
クラスターの構築
準備が整ったら、インストーラーをつかってクラスターを構築します。次のコマンドを実行しましょう。--dirオプションでインストールのログや設定などの出力先を指定しましょう。次の例ではazureというディレクトリ配下に出力する例です。
$ ./openshift-install create install-config --dir=azure
インストーラーを実行すると、プロンプトが表示されるので必要な項目を入力します。
まず、事前準備で確認したインストールするAzureのサブスクリプションIDを入力します。
? azure subscription id [? for help]
次に、インストールするAzureのテナントIDを入力します。
? azure tenant id [? for help]
作成したサービスプリンシパルIDとパスワードを入力します。
? azure service principal client id [? for help] ? azure service principal client secret [? for help]
ここまで実行すると、Azureのプロファイル情報がホームディレクトリ上の~/.azure/osServicePrincipal.jsonに保存され、次回以降インストーラーを実行する際はこの情報が参照されます。プロファイルを変更したい場合は、osServicePrincipal.jsonを編集するか、またはいったん削除して再作成してください。
つづいて、ssh-agentプロセスが使用するSSHキーを指定します。
? SSH Public Key [Use arrows to move, type to filter, ? for more help] /path/.ssh/id_rsa.pub /path/.ssh/openshift_rsa.pub
ターゲットとするプラットフォームとして[azure]を選択します。
? Platform [Use arrows to move, type to filter, ? for more help] aws > azure gcp openstack
クラスターをデプロイするリージョンを選択します。なお、選択したリージョンで事前準備にて説明したとおりAzureの仮想マシン(vCPU)のサブスクリプション上限が解除されている必要があります。
? Region [Use arrows to move, type to filter, ? for more help] francesouth (France South) germanynorth (Germany North) germanywestcentral (Germany West Central) > japaneast (Japan East) japanwest (Japan West) koreacentral (Korea Central) koreasouth (Korea South)
クラスターをデプロイするベースドメインを選択します。クラスター用に作成したAzure DNSゾーンが表示されます。
? Base Domain [Use arrows to move, type to filter, ? for more help] asa-system.work > asa.yokohama asa-flower.shop
クラスターのわかりやすい名前を入力します。任意の名前が設定可能です。
? Cluster Name [? for help] ocp42
OpenShift Infrastructure Providersページから取得したプルシークレットを貼り付けます。
? Pull Secret [? for help] xxxxx
ここでコマンドが完了し、指定したディレクトリ配下にインストールするOpenShiftクラスターの構成情報の詳細がinstall-config.yamlというファイルに書き出されるので確認しましょう。
$ ls azure install-config.yaml
このinstall-config.yamlを確認すると次のような情報が含まれます。たとえばOpenShiftのワーカーノードの台数はcompute.replicas、ワーカーノードに使用する仮想マシンのスペックはcompute.platformに指定します。またクラスタのネットワーク構成もカスタイマイズ可能です。
指定できるパラメータの詳細については、公式サイト
install-config.yamlのカスタマイズを参照してください。なお、install-config.ymlはインストール実行時に消去されるので、同じ環境を試したいときは、バックアップを取っておくとよいでしょう。
apiVersion: v1
baseDomain: sample.com
compute:
- hyperthreading: Enabled
name: worker
platform: {}
replicas: 3
controlPlane:
hyperthreading: Enabled
name: master
platform: {}
replicas: 3
metadata:
creationTimestamp: null
name: ocp42
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
machineCIDR: 10.0.0.0/16
networkType: OpenShiftSDN
serviceNetwork:
- 172.30.0.0/16
platform:
azure:
baseDomainResourceGroupName: dns
region: japaneast
pullSecret: '{"auths":{"cloud.openshift.com":{"auth":"xxx","email":"xx@yy"},"registry.connect.redhat.com":{"auth":"xxx","email":"xx@yy"},"registry.redhat.io":{"auth":"xxx","email":"xx@yy"}}}'
sshKey: |
ssh-rsa xxxxx
デフォルトでは、3つのMasterノードと3つのWorkerノードからなるHAクラスターが構築されます。MasterノードとWorkerノードは、指定されたリージョンのアベイラビリティーゾーンに分散されます。
Workerノードは、コンテナアプリケーションに適したRed Hat Enterprise Linux(RHEL)CoreOSがインストールされ、コンテナランタイムはCRI-Oです。RHEL CoreOSはSELinuxがデフォルトで有効になっています。
Masterノードも、RHEL CoreOSで動作し、クラスターがマシンを構成できるようにするCoreOS Ignitionと呼ばれるブートプロビジョニングツールが含まれています。またOSの更新は、コンテナイメージに埋め込まれたrpm-ostreeリポジトリとして提供されており、更新情報を含むコンテナイメージがOpenShift上にデプロイされると、展開されてディスクに書き込まれます。OpenShiftは、クラスター上の他のアプリケーションと同様にオペレーティングシステムを管理し、プラットフォーム全体を最新の状態に保ちます。
確認ができたら次のコマンドでインストールします。インストールが完了するまでに約50分かかりますので、ここでコーヒーブレイク☕を入れましょう。
$ ./openshift-install create cluster --dir=azure/ --log-level=info
クラスターへのログイン
クラスターの構築が完了すると、Webコンソールへのリンクやkubeadminユーザーの資格情報など、クラスターにアクセスするための指示が表示されます。
$ ./openshift-install create cluster --dir=azure/ --log-level=info INFO Consuming "Install Config" from target directory INFO Creating infrastructure resources... INFO Waiting up to 30m0s for the Kubernetes API at https://api.ocp42.sample.com:6443... INFO API v1.14.6+2e5ed54 up INFO Waiting up to 30m0s for bootstrapping to complete... INFO Destroying the bootstrap resources... INFO Waiting up to 30m0s for the cluster at https://api.ocp42.sample.com:6443 to initialize... INFO Waiting up to 10m0s for the openshift-console route to be created... INFO Install complete! INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/<path>/ocp4.2/azure/auth/kubeconfig' INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp42.sample.com INFO Login to the console with user: kubeadmin, password: XXXXX-XXXXX-XXXXX-XXXXX
ブラウザを開き、コマンドの実行結果Access the OpenShift web-console hereで出力されたURLにアクセスします。
ここでログイン画面表示されるので、UsernameとPasswordにコマンド実行結果Login to the console with user: kubeadmin, password: XXXXX-XXXXX-XXXXX-XXXXXで出力された値を入力します。
ログインに成功すると、OpenShiftの管理画面が表示されます。
サンプルアプリを動かしてみよう
OpenShiftでは、デフォルトでさまざまなDeveloper Catalogが用意されています。 Developer Catalogには、アプリケーション実行のベースとなるコンテナーのイメージとテンプレートが含まれています。Developer CatalogはJavaやPythonなどの言語ごとのひな形やCI/CD環境構築のためのものなどすぐに利用できるものが数多く用意されているので、試してみるとよいでしょう。
ここでは、Node.js+Mongo DBの構成で動作するWebアプリケーションを動かしてみます。OpenShiftのコンソールで[</> Developer]→[+Add]→[From Catalog]をクリックし、テンプレートリストを表示します。
.NET、Apacheなど、すでにさまざまなテンプレートが用意されているのが分かります。ここでは[Node.js + MongoDB]を選んでみましょう。必要な項目をカスタマイズしてデプロイします。自分でコンテナイメージやDeploymentConfigなどの用意をしなくてもすぐにアプリケーションがデプロイできるのが分かります。
OpenShift WebConsoleはグラフィカルなGUIでクラスター内のアプリケーションの状況がわかるのが特徴です。たとえば、[Topology]タブをクリックすると、アプリケーションの構成情報が可視化できます。次の図では、フロントでNode.jsが動作し、バックエンドでMongo DBが動作するWebアプリケーションの情報を確認している様子です。PodやBuildの情報、外部のネットワークに接続するためのServiceやRoutesの定義も分かります。
OpenShift WebConsoleは、ブラウザ上でYAMLファイルの編集も可能です。
おわりに
今回の記事では、OpenShiftをはじめて利用する開発者にむけてOpenShiftの概要と開発ツール、開発マシンでのローカル実行、インストーラーを使ってAzure上でOpenShiftクラスター構築などをひととおりご紹介しました。
コンテナベースの可搬性の高いアプリケーションをオンプレ・クラウドなど任意の環境で動かすことができるOpenShiftは、Kubernetesをベースとしており、本記事ではすべてを紹介しきれませんが、開発者がコードを書くことに集中できるよう便利な機能が数多くあります。
詳細なOpenShiftの情報は、公式サイトのドキュメントを参考にしてください。
より技術的にも詳しく知りたい方は、Red Hat Developer Programに参加するとよいでしょう。Red Hat Developer Programでは開発者むけのさまざまなリソースを提供しており、1年間有効な"Red Hat Developer Suite"のサブスクリプションが付与されるので、詳しく勉強したい方におすすめです。
