サービス詳細
OpenShift on Nutanix ~AHV上でOpenShiftのUPIを検証してみた~ - Natic | Application Modernization Platform – 日商エレクトロニクス

OpenShift on Nutanix ~AHV上でOpenShiftのUPIを検証してみた~

07_openshift

本記事で紹介したいこと:

2021年8月、Red HatとNutanixの2社による戦略的パートナーシップがプレスリリースとして打ち出されました。長らくRHELがNutanix AHV上ではサポートされていない状況が続いていましたが、
RHEL/RHCOSの利用がAHV側でサポートされることにより、Nutanix上でも実用的なアプリケーションモダナイズの機運が高まっています。( ※ref ) 本記事では、当社で検証中のOpenShift on Nutanix環境の構築について説明します。

目次 Table of Contents:

  1. はじめに
  2. 構築前準備(インフラ整備)
  3. OpenShift 構築
  4. イメージレジストリ用PVC 作成
  5. まとめ

1. はじめに

こんにちは、NADPの兼田と申します。大好きなLinuxディストリビューションのRHELが、Nutanix AHV上でサポートされると初めて伺った際は、とても感動いたしました。そのため検証環境の構築には真っ先に立候補いたしております。この環境については、RedHat社より、国内パートナーでは初めて構築された環境とお墨付きを頂いており、Red Hat x Nutanixのパートナーシップ戦略への一早い追従へ、わずかばかりながら関わることが出来、うれしく感じております。
本記事の内容については、Red Hat社のドキュメント(※1)を参考に、当社環境でOpenShiftをUPIインストールした際のパラメータのうち、開示可能なものを記載しております。合わせて、セキュリティ観点から詳細な手順・実装は割愛させていただいております。

早速ですが、以下が全体の概要図となります。2021年12月現在、Nutanix上にOpenShiftを構築するには(仮想マシンですが)ベアメタル UPIの手順が必要となります。ただし、インストールについては今後のロードマップにてPrismでのIPIが提供されると発表されています。環境に関しては、エンタープライズのオンプレ環境で利用されるDNS・LBは冗長されていることがほとんどですが、本環境では検証用のため踏み台(Bastion)サーバへ1台ずつ同居させる形をとりました。
また、本環境全体にryka-ocp.nadp-openshiftというドメインを付与します。概要図は運用時を想定して記載しているため、構築時は別途Bootstrapノードが必要となります。この環境はインターネットへ直接通る経路は提供されておらず、外への通信はこちらの基盤で用意されたプロキシを通ることになります。Nutanixについては、HPEのDX360を利用しています。

redhat-openshift
Bootstrap(図中未記載)、Master、Workerの各ノードのついては、以下の最小要件を満たす形でAHV上にVMを作成します。
また、各VMは仮想化支援機能が有効化されている必要があります。こちらの手順(※2)が参考になります。

踏み台 ( Bastion )についてはOpenShift環境とは別のものになるため、特に要件はありません。本番環境であれば独立したDNS/LBが用意されており、VM上に改めて用意する必要がないためです。今回はRHELの開発者向けサブスクリプションが余っていたので、RHELを使用しました。firewalld/selinuxの設定はディストリビューション依存のため、割愛させていただきます。

2. 構築前準備(インフラ整備)

初めにネットワーク構成を確認します。

02_network

検証環境の都合上、各VMが持つIPをサービス提供するセグメントと分けることが出来ず、LB(踏み台)と横並びになっていますが、本番環境であればNAT/FWを間に差し込み、通信フローを制御することが望ましいです。詳細に関しては後述のLB構築をご確認ください。

2-1. DNS(DHCP同居)サーバ構築

踏み台サーバ上にdnsmasqを用いてDNSとDHCPサーバを構築します。BINDとdhcpdの組み合わせでも構いません。要件上、各ノードがFQDNによって名前解決が出来れば、IPアドレスを固定する必要はありませんが、管理・運用の都合上、VMが持つNICのMACアドレスに対してIPアドレスを固定で割り振るよう、ノード台数分/etc/dnsmasq.confの設定をします。

dhcp-host=<VMのMACアドレス>,master0,ryka-ocp.nadp-openshift,AAA.BBB.CCC.72

各VMが持つNICのMACアドレスは、Nutanix Prism上で確認できます。

Mac

また、OpenShiftで作成したサービスは、OpenShiftのRouteを経由して、ryka-ocp.nadp-openshiftのサブドメインとしてアクセスポイントが用意されます。dnsmasqの場合、ryka-ocp.nadp-openshift以下のドメインにはすべてLB(踏み台サーバ)のIPアドレスを応答するよう、似非ワイルドカードレコードの設定を投入します。


address=/ryka-ocp.nadp-openshift/AAA.BBB.CCC.70

その他、DHCPで配布したいNW情報を設定します。


dhcp-option=option:router,AAA.BBB.CCC.253


dhcp-option=option:dns-server,AAA.BBB.CCC.70


dhcp-option=option:netmask,255.255.255.0

OpenShiftクラスタは、構築の最中に内部で生成された証明書を用いて各ノードの疎通を行います。この証明書は有効期限が24時間と短いため、日付・時刻がノード間で大幅にずれていないことが求められます。DHCPオプションでRHCOSのchronycにNTPサーバ指定させることが出来るため、以下のオプションも追加することを強く推奨します。(構築が途中で止まり、Red Hatサポートにログを解析してもらうまで原因が不明だったハマりポイントです。)


dhcp-option=option:ntp-server,<NTPサーバのIPアドレス>

上記の設定が完了したら、踏み台サーバからnslookup/digを用いて名前解決が出来るか確認をして完了です。問い合わせるリストについてはRed Hat社のドキュメントに記載があります。

 

2-2. LB構築

踏み台サーバ上にhaproxyを用いてLBを構築します。フロントエンドとバックエンドの設定は、以下のイメージです。FWを利用する場合は、フロントエンドの要件に従って設計することが望ましいです。
(Red Hat社のドキュメントにTCP/UTPポートの要件が記載されています。)

RH

Bootstrapについては、OpenShift構築の手順内でバックエンドから削除します。(運用時に残っていると、ラウンドロビンでアクセスされてしまいます。)

2-3.  Webサーバ構築

踏み台サーバ上にNginxを用いてWebサーバを構築します。後述するIgnitionファイルを格納するサーバですので、HTTPでプレーンテキストを提供できる環境であればNginx以外のものを用いてもかまいません。

2-4.   その他

クラスタ管理にSSHを用いる場面や、クラスタ構築に自己証明書を作る場面があるため、ssh-keygenを用いて秘密鍵を作成しておきます。
また、OpenShiftのインストーラ、RHCOSのインストーラisoファイル、Pullシークレットが記載されたファイルをあらかじめ保存しておきます。
Create an OpenShift cluster | Red Hat OpenShift Cluster Manager (※3)
RHCOSのインストーラisoファイルに関しては、あらかじめPrismのImage Serviceに追加しておくとスムーズです。

setting

3. OpenShift 構築

本題です。前述のインフラ整備に不備がなければ、作業量自体はそこまで多くありません。多くの作業が自動で進むため、問題発生時の切り分け用にあらかじめインストールの流れを説明いたします。

instlall

  1. 初めにBootstrapノードが生成されます。Bootstrapノードを含むすべてのノードは、RHCOSインストールイメージとIgnitionファイルより、自身がどのノードで何の設定が必要かを把握します。
    Bootstrapノードはクラスタ生成用に各種マニフェストファイルのレンダリングを実施し、コンテナとしてMaster/Wokerノードが参照するMachineConfigを提供する仕組みを持ちます。
    そのため、Bootstrapノードの起動が完了すると、シングルノードクラスタとして一時的な
    Kubernetes環境がノード上に作成されています。
  2. 続いてMasterノードが生成されます。Webサーバ上のIgnitionファイルから読み込んだ情報をもとに自身を設定後、OpenShiftクラスタのMasterノードとして動作するようになります。
    この時点でMasterノードはioへアクセスし、クラスタを構成するコンテナイメージをPullします。同時にBootstrapノードがレンダリングしたファイルを引継ぎ、Workerノードがクラスタへ参加する際にMasterノードからMachineConfigを提供します。
  3. 最終的にWorkerノードが起動します。この時点でMasterノードはクラスタのControl Planeとして動作しているため、Workerノードの起動完了後はMasterノードの管理下に置かれます。

Ignitionファイルの作成には、前述のOpenShiftインストーラを使用します。初めにクラスタ全体で使用されるinstall-config.yamlファイルを作成し、その後マニフェストファイルに変換します。マニフェストファイルはinstall-config.yamlファイルから生成されたクラスタ全体の設定が定義されたファイルとなります。マニフェストファイルから最終的なIgnitionファイルを生成し、Webサーバへ格納します。
Ignitionファイルは、マニフェストファイルからノードの役割毎に生成されるため、Bootstrap、
Master、Worker用の3ファイルが生成されます。

今回はプロキシを経由する構成ですが、install-config.yamlファイルにはプロキシの設定も入れ込んでおく必要があります。

  • httpProxy
  • httpsProxy
    プロキシがSSLの終端をしない場合は記載が不要かと思いきや、HTTPS通信時に用いるプロキシを指定するフィールドとなります。当社環境ではHTTPプロキシしか提供されていないため記載しないで構築したところ、ioからのPullに失敗し、クラスタ構築が止まりますのでご注意ください。
  • noProxy
    プロキシを使用しないでアクセスする必要があるドメイン・L2セグメントを記載します。
    当然*.ryka-ocp.nadp-openshift宛ての通信は外部に抜けられてもアクセスできないため、プロキシ経由の構成では記載が必須となります。また、理由は不明ですがIPアドレスでの内部通信も外抜けしようとするものがあったため、本環境があるL2セグメント(AAA.BBB.CCC.0/24)も併記しなければ、クラスタ構築に失敗してしまいました。

httpsProxy、noProxyの設定に関しては、サポート問い合わせにて解決できました。

install-config.yamlを作成、マニフェストファイル、Ignitionファイルを作成し、Webサーバへ格納した後は、各VMをBootstrap、Master、Workerの順番で起動していきます。
VMの起動時は、あらかじめPrismのイメージサービスに登録しておいたRHCOSのインストールイメージをブートデバイスに設定し、ISOブートを実行します。コンソールが表示されたら、
以下コマンドでRHCOSをディスクへインストールします。

sudo coreos-installer install -–ignition-url=<Ignitionファイルを格納したURL> /dev/sda -–insecure-ignition 

インストール後は手動で再起動する必要がありますが、ISOブートにならないよう shutdown -> PrismでISOをでタッチ -> Prismでパワーオン、とするとよいでしょう。

また、インストール中は踏み台サーバ上でOpenShiftインストーラのログ収集コマンドを実行しておくとよいです。

./openshift-install --dir=bare-metal wait-for bootstrap-complete --log-level=debug

“It is now safe to remove the bootstrap resources”が表示されたら、インストールは完了となります。
LBのバックエンドからBootstrapを削除し、シャットダウンしましょう。

クラスタの構築が完了したあとは、クラスタへログインし、マシンのCSR認証を行います。その後、クラスタ構築の完了を確認します。

クラスタのログインにはocコマンドを使用しますが、その際必要となるKUBECONFIGファイルは、
Ignitionファイルが格納されていたディレクトリに保存されています。exportで環境変数に追加して使用します。

マシンのCSR認証に関しては、Workerノード起動から時間がかかるため、ocコマンドで状況を見ながら実施します。

クラスタ構築は、clusteroperatorがすべてAVAILABLEとなっていることを確認します。その後、以下のコマンドで最終的なインストールの完了チェックをします。

./openshift-install --dir=bare-metal wait-for install-complete --log-level=debug

“Install complete!”の表示を確認します。また、このコマンドでkubeadminのパスワードも表示されるため、OpenShiftのWebコンソールにアクセスすることも可能となります。

4. イメージレジストリ用PVC 作成

OpenShiftの構築は完了しましたが、この時点ではコンテナイメージを保存する領域がないためコンテナのPullができません。各プロジェクトで作成されるPV(PersistentVolume)とは別に、システムとしてコンテナイメージを保持するイメージレジストリを作成・追加します。

こちらはNutanix社が手順をまとめているため、内容を参照することが出来ます。
openshift/docs/install/manual at main · nutanix/openshift (github.com) (※4)

もしくは、Red Hat社が公開している動画でも手順が確認できます。

How to deploy Red Hat OpenShift to Nutanix AOS – YouTube (※5)

動作確認として、Red Hat社から提供されているOPEN トレーニングに記載されていたラボを実施し、正常に動作していることが確認できました。
(イベント内で実施したパイプラインデモに関しても、OPENのトレーニングのシナリオを参考にさせていただきました。)

5.まとめ

Nutanix上でのOpenShift構築についてご紹介させていただきました。一部省略しながらの説明となりましたが、ハマりポイントやブートストラップの流れなどはまだ情報も少ないため、参考になるかと思います。繰り返しになりますが、ロードマップ上では来年時点でNutanix Calmのマーケットプレイスへ登録、と発表されているため、UPIでのインストールは今後珍しいものとなる可能性がありますが、アプリケーションを支えるインフラレイヤーから一気通貫で構築ナレッジを持っているのは当社の強みであると言えます。

本検証を通して、オンプレで使われることを想定したNutanixが、クラウドのような柔軟性に富んだ基盤であり、実際に手を動かすことでNutanix社の目指すハイブリッドクラウド時代の一端を実感することができました。AWSやAzure上でのOpenShiftも非常に有用ですが、オンプレでOpenShiftを利用する場合はNutanixが適していると言えます。コンテナのようにポータビリティのある技術が、クラウド/オンプレと場所を問わず行き来する世界ももうすぐかもしれません。

—————————————————————————————————

参照一覧:

( ※ref ) NutanixのアーキテクトがNutanixの未来を語る リンクはこちら

Nutanix HCI上でRed Hat OpenShiftをはじめよう リンクはこちら

(※1)Installing a cluster on bare metal  Installing a cluster on bare metal – Installing on bare metal | Installing | OpenShift Container Platform 4.6

(※2)How To enable nested virtualization on AHV?   How To enable nested virtualization on AHV? | Nutanix Community

(※3)https://console.redhat.com/openshift/create  注意:こちらへのアクセスにはまずRedHatアカウントへのログインが必要です。

(※4)Red Hat OpenShift Container Platform Manual Installation on Nutanix AOS (AHV) openshift/docs/install/manual at main · nutanix/openshift (github.com)

(※5)Youtube動画 How to deploy Red Hat OpenShift to Nutanix AOS How to deploy Red Hat OpenShift to Nutanix AOS – YouTube

—————————————————————————————————

記事担当者::アプリケーション事業推進部 SoEアーキテクト課 兼田 涼

投稿日:2021/12/24