SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

エンタープライズに必要な機能を強化! Kubernetesベースのコンテナアプリ開発基盤「OpenShift」を試してみよう

本番環境でのアプリケーション実行

 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です。このサービスプリンシパルに必要な権限を付与できます。

  1. Azureのリソースの制限緩和
  2. Azure DNSの設定
  3. サービスプリンシパルの設定

 事前準備の詳細な手順については、公式サイトを参照してください。

 (1)と(2)については、申請や設定後有効になるまでに時間がかかる場合がありますので、事前に作業しておくとよいでしょう。

 また、(3)で指定したサービスプリンシパル設定のうち、次の値が以降のOpenShiftクラスターのインストールで必要になります。各自でメモに控えておいてください。

  • AzureのサブスクリプションID
  • テナントID
  • サービスプリンシパルID
  • サービスプリンシパルIDのパスワード

 これらの作業を行うにあたり、必要に応じてVisual Studio CodeAzure 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]ボタンをクリックして、クリップボードにはりつけておきましょう。

pullsecret
pullsecret

 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はインストール実行時に消去されるので、同じ環境を試したいときは、バックアップを取っておくとよいでしょう。

install-config.yaml
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 WebConsole
OpenShift WebConsole

サンプルアプリを動かしてみよう

 OpenShiftでは、デフォルトでさまざまなDeveloper Catalogが用意されています。 Developer Catalogには、アプリケーション実行のベースとなるコンテナーのイメージとテンプレートが含まれています。Developer CatalogはJavaやPythonなどの言語ごとのひな形やCI/CD環境構築のためのものなどすぐに利用できるものが数多く用意されているので、試してみるとよいでしょう。

 ここでは、Node.js+Mongo DBの構成で動作するWebアプリケーションを動かしてみます。OpenShiftのコンソールで[</> Developer]→[+Add]→[From Catalog]をクリックし、テンプレートリストを表示します。

Developer Catalog
Developer Catalog

 .NET、Apacheなど、すでにさまざまなテンプレートが用意されているのが分かります。ここでは[Node.js + MongoDB]を選んでみましょう。必要な項目をカスタマイズしてデプロイします。自分でコンテナイメージやDeploymentConfigなどの用意をしなくてもすぐにアプリケーションがデプロイできるのが分かります。

Developer Catalog
Developer Catalog

 OpenShift WebConsoleはグラフィカルなGUIでクラスター内のアプリケーションの状況がわかるのが特徴です。たとえば、[Topology]タブをクリックすると、アプリケーションの構成情報が可視化できます。次の図では、フロントでNode.jsが動作し、バックエンドでMongo DBが動作するWebアプリケーションの情報を確認している様子です。PodやBuildの情報、外部のネットワークに接続するためのServiceやRoutesの定義も分かります。

Developer Catalog
Developer Catalog

 OpenShift WebConsoleは、ブラウザ上でYAMLファイルの編集も可能です。

Developer Catalog
Developer Catalog

おわりに

 今回の記事では、OpenShiftをはじめて利用する開発者にむけてOpenShiftの概要と開発ツール、開発マシンでのローカル実行、インストーラーを使ってAzure上でOpenShiftクラスター構築などをひととおりご紹介しました。

 コンテナベースの可搬性の高いアプリケーションをオンプレ・クラウドなど任意の環境で動かすことができるOpenShiftは、Kubernetesをベースとしており、本記事ではすべてを紹介しきれませんが、開発者がコードを書くことに集中できるよう便利な機能が数多くあります。

 詳細なOpenShiftの情報は、公式サイトのドキュメントを参考にしてください。

 より技術的にも詳しく知りたい方は、Red Hat Developer Programに参加するとよいでしょう。Red Hat Developer Programでは開発者むけのさまざまなリソースを提供しており、1年間有効な"Red Hat Developer Suite"のサブスクリプションが付与されるので、詳しく勉強したい方におすすめです。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

阿佐 志保(アサ シホ)

金融系シンクタンクなどで銀行/証券向けインフラエンジニア、製造業向けインフラエンジニアとして従事。都市銀行情報系基盤システム構築やシステム統廃合、証券会社向けバックオフィスシステムの共通基盤開発プロジェクトを経験。結婚・出産を経て現在は、日本マイクロソフトで法人向けにクラウド導入支援やプリセールスな...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

小島 啓史(コジマ ヒロフミ)

レッドハットにてパートナー企業を担当するプリセールスエンジニアです。Linux/自動化/コンテナを中心としたRed Hatのソリューションを推進すべく、製品セミナー/導入提案/技術情報発信などを実施しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11814 2019/11/15 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー