特集・ブログ

ブログ

2021年12月28日

【てくさぽBLOG】Azure Stack HCIを導入してみた Vol.1 -Azure Stack HCI構築編-

こんにちは。 てくさぽBLOGメンバーの宮里です。 今回はAzure Stack HCIの検証をしてみたので3回シリーズで検証で得られた知見をお伝えします。 (さらに…)

2021年12月21日

【てくさぽBLOG】IBMソフトウェア(Passport Advantage)ライセンスのまとめ [2022年12月版]

※この記事は2022年12月26日時点の情報をもとに作成しています *  *  *  *  *  * こんにちは。てくさぽBLOGメンバーの佐野です。 継続してお問い合わせの多い、IBMソフトウェア(Passport Advantage:以下 PA)のライセンス体系について説明します。全網羅的ではなく代表的なもののみ説明するので、載っていない製品や課金体系については個別にお問い合わせください。 目次 IBMソフトウェア(PA)のライセンスとソフトウェア・サブスクリプション&サポート 課金体系 まとめ お問い合わせ IBMソフトウェア(PA)のライセンスとソフトウェア・サブスクリプション&サポート IBMソフトウェアを利用するために必要な権利は「ライセンス」「製品サポート」の2つに大別されます。 ライセンス:ソフトウェアを使用する権利 製品サポート:製品に対する各種問い合わせ、トラブル対応、バージョン・アップの権利 製品サポートは「IBMソフトウェア・サブスクリプションおよびサポート」(以下 SS&S)ともいいます。ライセンスと SS&S には、それぞれ以下の種類があります。 ライセンス 永久ライセンス:Perpetual License(買い切り型ライセンス) 期間限定ライセンス:Term License(期間使用型ライセンス) SS&S 継続SS&S:製品サポートを継続する場合に必要 新規SS&S:SS&Sの契約を停止した(空白期間が生じた)製品サポートを再開する場合に必要 永久ライセンスを購入すると対象ソフトウェアを永久的に使用できます。また、1年間の SS&S が付加されているので、1年目は製品サポートを受けられます。なお、SS&S の購入は1年単位です。 2年目以降は、継続SS&S を購入することで製品サポートを継続して受けられます。(図1-A)継続SS&S を購入しない場合、製品サポートに空白期間が生じたのちに再開する際には新規SS&S を購入する必要があります。(図1-B) 図1:2年目以降のSS&S購入による違い 期間限定ライセンスは以下が提供されます。 指定された期間に対してのソフトウェア使用権(ライセンス) 指定された期間中の製品サポート(SS&S) 期間限定ライセンスにはライセンスとSS&Sが必ず含まれるため、契約期間中に製品サポートも受けられる点が永久ライセンスと異なります。また、期間限定ライセンスは以下の種類があります。 サブスクリプションライセンス(Subscription License) 月額ライセンス(Monthly License) 期間限定ライセンス(Fixed Term License) それぞれの特徴は以下に記載の通りです。 各ライセンスの特徴 サブスクリプションライセンス(Subscription License) 契約期間:12か月から60か月 最短期間:12か月 途中解約:不可 製品サポート(SS&S):あり 月額ライセンス(Monthly License) 契約期間:1か月から60か月 最短期間:1か月 途中解約:30日前に書面で通知 製品サポート(SS&S):あり 期間限定ライセンス(Fixed Term License) 契約期間:12か月の固定期間 最短期間:12か月の固定期間 途中解約:30日前に書面で通知 製品サポート(SS&S):あり スモールスタートするプロジェクトや PoCプロジェクトにおいて期間限定ライセンスを採用することで、"初期投資を抑えることができる" や "必要なくなったら停止ができる" といったメリットがあります。特に、DXの実装段階においてはプロジェクトを素早く立ち上げ、効果がなければやめるという進め方が多くなります。このようなケースでは期間限定ライセンスのご利用が適しています。 一方、長期利用をする場合に期間限定ライセンスを採用することは永久ライセンスと比べてコスト増となることが多くなります。 プロジェクトの特徴や特性に合わせて期間限定ライセンス/永久ライセンスを選択し、最適なものを選びましょう。 課金体系 IBMソフトウェアの課金体系は「Passport Advantage / Passport Common License Types & Definitions」(IBMサイト/英語)にも記載がありますが、なんだか堅苦しい記述になっているのでざっくり解説をします。 課金体系は大きく「ユーザー課金」「サーバー課金」「その他」の3種類に分類できます。製品によってはユーザー課金とサーバー課金を組み合わせて買う必要があります。 具体的にもう少し詳しくみていきましょう。 ユーザー課金 Authorized User(許可ユーザー) 許可ユーザーは名前の通り、ソフトウェアを利用するユーザー数に応じた課金単位です。「どのPCからアクセスするか」ではなく、利用者個人に紐付きます。例えば、あるユーザーが PC だけでなく iPhone からアクセスをしても1ライセンスです。 図2:「許可ユーザー」におけるライセンスの数え方 Authorized User Single Install(許可ユーザー・シングルインストール) この課金単位は少し特殊です。考え方は許可ユーザーとほぼ同じですが、ユーザーと利用するサーバーを紐付ける必要があります。 具体例を挙げて説明します。 例えば、サーバーAとサーバーBの2台を稼働させ、サーバーAには管理者、ユーザー1、ユーザー2の3人がアクセスします。サーバーBにはユーザー1とユーザー2がアクセスをします。Authorized User の考え方ではユーザー数とイコールになるので3ライセンスとなりますが、Authorized User Single Install では "サーバーA:3ライセンス / サーバーB:2ライセンス =合計5ライセンス" の購入が必要となります。 この課金単位を利用している代表的な製品は Db2 v11.1以前のバージョンです。最新の Db2 では後述の Virtual Processor Core課金が使われこのカウント方法は使われないため、ご注意ください。 図3:「許可ユーザー・シングルインストール」におけるライセンスの数え方 Concurrent User(同時接続ユーザー) 同時接続ユーザーの場合は、サーバーなどに一時点で同時に接続しているユーザー数分のライセンスとなります。たとえ10ユーザーいたとしても、同時に利用しているのが2ユーザーなのであれば2ライセンスとなります。 代表的な製品としては、SPSS がこの課金単位での購入が可能です。 図4:「同時接続ユーザー」におけるライセンスの数え方 User Value Unit(ユーザー・バリュー・ユニット) ユーザー・バリュー・ユニット(UVU)でのユーザー数のカウントは Authorized User と同じ考えですが、製品によって以下のポイントが異なる場合があります。 ユーザーの種類(例:社内ユーザー、社外ユーザー) 総ユーザー数に応じた階段式の係数(例:1,000ユーザーまでは係数1、1,001から5,000ユーザーまでは係数0.8、それ以降は係数0.6、など) 製品によってカウント方法や上記の係数などが異なるので、UVU課金単位の製品を購入する場合には IBMサイトのライセンスインフォメーション(英語)から対象製品を検索するか、個別に取引先にご確認ください。 代表的な製品としては、IBM Security Verify Access(旧 ISAM、TAM)があります。 図5:「ユーザー・バリュー・ユニット」におけるライセンスの数え方 サーバー課金 Install(インストール) インストール課金単位はソフトウェアをインストールしたマシン数に対する課金です。1台に導入するのであれば数量は1で、利用するユーザー数は関係ありません。 代表的な製品としては、IBM Security Guardium Key Lifecycle Manager がこの課金単位です。 図6:「インストール課金」の場合 Processor Value Unit(プロセッサー・バリュー・ユニット:PVU) 課金単位に関する問い合わせで一番数が多いのが、この PVU課金です。 PVU課金では、利用する CPU に応じた係数が決まっています。係数表は「Processor Value Units (PVUs)」(IBMサイト/英語)に掲載されています。この表の係数を元に、コア数を掛け算した数量のライセンス購入が必要となります。 例えば、Intel Xeon E5-2609v4 であれば最大2ソケットマシンにしか搭載できないので、先の PVU表からコアあたりの PVU値は 70PVU となります。この CPU は 8コアCPU であるため、1CPUサーバーの場合には "70PVU / コア×8コア / CPU×1CPU =560PVU" となります。 Intel CPU の場合、4ソケットマシンには100PVU、4ソケットを超えると 120PVU と、係数が変わるので、数量を確定するためには何ソケットサーバーなのかを調べておく必要があります。 図7:PVUはCPUに応じた係数に総コア数を乗じて算出する。 気を付けないといけないのは、サーバー更改や仮想化統合をする場合です。 割り当てコア数は変わっていなくても、物理サーバーのソケット数が変わることで PVU値が上がってしまうケースがあるので注意が必要です。また、新しい CPU は搭載しているコア数の最小数がどんどん増えているので、「現行機は2コアで稼働しているけれど更改後は4コアで稼働(=不足分の追加ライセンスが必要)」なんてこともよくあります。 多くの IBMソフトウェア製品がこの課金単位を利用しています。 Managed Virtual Server(管理対象仮想サーバー) 管理対象仮想サーバー課金単位はインストール課金と同じ考え方です。数量はソフトウェアを導入する仮想サーバー数をカウントします。 下図の場合には2台の仮想サーバーにソフトウェアを導入するので、2ライセンスとなります。なお、仮想環境ではなく物理サーバーが対象の場合には1ライセンスとしてカウントします。 この課金単位を使っている代表的な製品は、Instana や Turbonomic ARM があります。 図8:「管理対象仮想サーバー課金単位」はソフトウェアを導入する仮想サーバーを数える。 Virtual Processor Core(仮想プロセッサーコア) 仮想プロセッサーコア(VPC)課金単位は仮想サーバーに割り当てられたコア数(仮想環境の場合)、もしくは物理サーバーに搭載しているコア数(物理サーバーの場合)をカウントします。 PVU課金と違って CPUソケット数や種類による係数はなく、単純にコア数をカウントするだけなので環境を選びません。 この課金単位を使うのは、IBM Db2 Standard Edition や IBM Cloud Pakシリーズです。PVU課金のようにプラットフォームの影響を受けないので、計算がシンプルなのが特徴です。 図9:「VPC課金単位」は単純にコア数を数える。 その他 Client Device(クライアント・デバイス) クライアント・デバイス課金単位は、対象をサーバーではなく一般的なユーザーが利用するような端末に限定する課金体系です。 例えば、パソコンやスマートフォンなどが対象です。サーバーを対象とする場合には別の課金単位を用意している場合がほとんどです。 図10:「クライアント・デバイス課金単位」はパソコンやスマートフォンなどが対象 Resource Value Unit(リソース・バリュー・ユニット:RVU) RVU課金単位は、製品によって「何を課金対象とするのか」が変わる厄介な課金単位です。 例えば、Netcool OMNIbus では監視対象機器の物理台数が RVU数となります。似たような製品で、Tivoli Monitoring では監視対象のコア数が RVU数とカウントされます。 製品によってカウント方法が異なるので、RVU課金の場合は何をカウント対象とするのかを個別の製品ごとに確認が必要です。カウント対象を把握するにはIBMサイトのライセンスインフォメーション(英語)で対象製品を検索するか、個別に取引先にご確認ください。 図11:「RVU課金単位」はカウント対象が製品ごとに異なる。 まとめ IBMソフトウェアのライセンス体系と課金体系に関して簡単な解説をしました。 従来は一度構築したシステムを長期間使用することが多く、永久ライセンス(所有)にメリットがありましたが、昨今の IT環境の変化の速さやデータ量の増加、システムのライフサイクルの短期化などの背景から、期間限定ライセンスを採用することでメリットを享受できます。 期間限定ライセンスも選択肢に入れていただくことで、ご利用になる環境に最適なライセンスを選択できるようになります。ご不明な点がございましたら、以下の窓口までお問い合わせください。 お問い合わせ この記事に関するお問い合わせは、以下のメールアドレスまでご連絡ください。 エヌアイシー・パートナーズ株式会社E-Mail:voice_partners@niandc.co.jp   .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:30px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#dceefe; text-align:center; border:2px solid #51aafd; color:#FFFFFF; font-size:16px; font-weight:normal; border-radius:16px; -webkit-border-radius:16px; -moz-border-radius:16px; transition: all 0.5s ease; } .btn_A a:hover{ background:#FFFFFF; color:#51aafd; margin-left:0px; margin-top:0px; border:2px solid #51aafd; box-shadow:0px 0px 0px 0px #FFFFFF inset; } .btn_B{ height:30px; } .btn_B a{ display:block; width:100%; height:100%; text-decoration: none; background:#085399; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; font-weight:normal; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #085399 ; transition: all 0.5s ease; } .btn_B a:hover{ background:#085399; color:#999999; margin-left:0px; margin-top:0px; border:1px solid #FFFFFF; box-shadow:0px 0px 0px 4px #085399 ; } .btn_CTA{ height:30px; margin-bottom:40px; width:450px; } .btn_CTA a{ display:block; width:100%; height:100%; text-decoration: none; background:#6200f5; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #6200f5; transition: all 0.5s ease; } .btn_CTA a:hover{ background:#bf94ff; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #bf94ff; } figure{ text-align:center; } figcaption{ font-size:80%; }

2021年11月18日

【てくさぽBLOG】IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた

こんにちは。 てくさぽBLOGメンバーの村上です。 本ブログは、IBM Power Virtual Server をトライしてみた内容や感想をご紹介するブログです。 シリーズ化していますので、まずインデックスのご紹介をします。   インデックス ・IBM Power Virtual ServerでAIX環境を作ってみた ・IBM Power Virtual ServerのAIX環境にSWを導入してみた  ・IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1) ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2) ・IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた ←今回 今回は、Power Virtual ServerのAIX環境を IBM Cloud の x86環境と接続する方法をご紹介します。   セクション 以下の1)~6)のセクションに分けてご紹介します。 1)  接続イメージの説明 2)  Direct Link Connect の説明 3)  Direct Link Connect の作成 4)  Caseを利用した接続依頼 5)  VSI for VC の作成 6)  AIX環境とx86環境の接続確認 最後に お問い合わせ 検証はAIXのインスタンスで行いましたが、IBM i のインスタンスでも同等の手順で操作を行うことができます。 利用したクライアント端末(私のPC)は、Windows10 pro バージョン2004(検証当時)です。   1) 接続イメージ の説明 Power Virtual Server のAIX環境と IBM Cloud の x86環境 はロケーションが異なる別のサービスで、ネットワークは直接つながっていません(2021年11月時点)。 そこで、お互いの環境を接続する方法が IBM Cloud から提供されています。 Direct Link Connect を利用する方法です。 今回は、上記の図の青色の線「Direct Link Connect」 を作成し、オレンジ色のubuntuサーバ(仮想サーバ・インスタンス(VSI))とAIXサーバを接続することが目的です。IBM Cloud環境の「仮想プライベート・クラウド(VPC)」と「仮想サーバ・インスタンス(VSI)」は未作成だったので、新規に作成し手順もブログ内に残しました。   2) Direct Link Connect の説明 Direct Link Connect と Power Virtual Server は全く別のサービスですので、Direct Link Connect は新規に作成する必要があります。 Direct Link Connect は IBM Cloud のポータルから作成(契約)します。 1)でも記載した通り、Power Virtual Server は IBM Cloud の x86環境と異なるコロケーションサイトを利用しており、ネットワークも直接つながっていません。そのため、Direct Link Connect を 契約し設定することで x86環境と接続することが可能となります。 Direct Link Connect には、従来からある「Classic」と新しく提供が開始された「2.0」があり、どちらも無料で利用できるので、今回は新機能が充実している「2.0」を利用します Direct Link Connect 利用条件(IBM Cloud 柔らか層本20211124版 p.85より) ・1データセンターあたり、10Gbps ポート x 2回線(HA) まで無料 ・Global routing を利用しても追加費用は不要 ・Direct Link Connect の申請時、「Network Provider」は「IBM Power Virtual Server」を選択すること(「3) Direct Link Connect の作成」 でも触れます)   3) Direct Link Connect の作成 では早速、Direct Link Connect を作成します。 ・IBM Cloud にログインし、左上にある「ナビゲーション・メニュー」→「相互接続性(Interconnectivity)」を選択します。   相互接続性(Interconnectivity) の画面に移動しました。 ・「Direct Link」を選択します。 ・「Direct Linkの注文」を選択します。 ・「Direct Link Connect」を選択します Direct Link Connect の構成パラメーターを選択する画面に移動しました。 ・「リソース」情報は以下を入力・選択します。 > Direct Link 名:tok-powervs(任意の文字列) > リソース・グループ:Default ここから、Direct Link Connect の構成パラメータを設定していきます。 ・「ゲートウェイ」では以下の順番で選択します。 > ジオグラフィー:APAC > 市場:Tokyo > タイプ:すべて > サイト:Tokyo 4 > 経路指定:ローカル(グローバルを選択すると別リージョンへ接続可能) プロバイダー:IBM POWER VS 速度は、50Mbps~10Gbps まで8種類から選択可能です。どの速度でも金額は変わりません。IBM推奨は1Gbps以上です。 ・速度とポート(1つ)を選択します。 > 速度:1Gbps(10Gbpsにしようかと思いましたが、何となく遠慮してみました) > ポート:SL-TOK04-POWERIAASLITE-1-1-(ASR1) ※ 選択するポートは「速度範囲」が当てはまるものを選びます。今回は、どのポートでも当てはまりますので一番上のポートを選びました。 ・「請求処理」で「従量制」を選択します。 ・「BGP」は以下の通り選択および入力します > BGPピアリング・サブネット:「IPの手動選択」を選択 > 範囲:「169.254.0.0/16」を選択(169.254.0.0/16 から) > 自分のIPv4 CIDR:「169.254.0.2/30」を選択 > IBM IPv4 CIDR:「169.254.0.1/30」を選択 > BGP ASN:「64999」を入力 ※ BGPピアリングは「169.254.0.0/16 」から範囲を指定します。今回は特に決めごともないので自由に設定しました。 ※ BGP ASNは Direct Link Connect の構成ガイドにある通り、「64999」を指定します。 ・「接続」は初期状態のまま変更しません。 ここまで入力が出来たら構成パラメータの設定は完了です。 ・画面の右側に表示されるサマリーを確認し「作成」ボタンをクリックします。 Direct Link Connect の作成が受け付けられたメッセージが出力されます。 暫く待つと Direct Linkの「状況」が「構成中」→「プロビジョン済み」に代わります。作成したDirect Link名「tok-powervs」 をクリックし詳細画面を表示します。 下記の詳細情報は「4) Caseを利用した接続依頼」で利用しますので、このまま表示させておくかコピペしておきます。 Direct Link Connect の作成が完了しました!   4) Caseを利用した接続依頼 次に、Power Virtual Server のAIX環境とDirect Link Connect の情報を紐付けるための作業を行います。この作業は、IBM Cloud のWEBポータル画面やIBM Cloud CLI 、API からは実施できません。Case を利用して、IBMのSEさん(?) へ接続のリクエストを出します。 Caseとは、IBMのサポートコミュニティの「問い合わせ」のことです ・IBM Cloud のWEBポータル画面の右上にある「サポート」をクリックします。 ・「Caseの作成」をクリックします。 ・「リソース」を選択します。 ・「Caseの作成」画面で以下を選択し「次へ」をクリックします。 > トピック:「Power Virtual Server」をプルダウンから選択 > 名前:「Power Virtual Server-g5」にチェックを入れる 下記の画面に移動したら、依頼内容を記載することができます。 Caseに依頼する情報は、「3) Direct Link Connect の作成」の最後に表示した詳細情報を利用し、以下のように記載しました。Case は英語で記載する必要があります。 実は、日本語でCaseを依頼してしまったことがあったのですが(英語で記入することをすっかり忘れていました)、担当SEさんが丁寧に英語に翻訳してくださって「質問はこういう意味であっていますか?」と返信が来ました。優しいです。 Caseの記載方法はQiitaのブログを参考にさせてもらっています。 サブジェクト:PowerVS : Direct Link 2.0 Request  説明: <Inquiry regarding Direct Link Connect for PowerVS> I ordered Direct Link Connect from IBM Cloud portal and its provisioning has finished. The detail information is as follows. Please proceed at Power VS side to establish Direct Link Connect. Thanks. --- Data creaged : Tue,Mar 2,2021,13:49:39 JST Resource group : Default Provider : IBM POWER VS Routing : Local Speed : 1 Gbps Billing : Metered User CIDR : 169.254.0.2/30 IBM CIDR : 169.254.0.1/30 BGP ASN : 64999 IBM ASN : 13884 Port : SL-TOK04-POWERIAASLITE-1-1-(ASR1) Location : Tokyo 4 Service key : (「サービス・キー」にある値を記載します) BGP status : Idle VLAN : 3921Connected VLAN : CIDR public-192_168_187_32-29-VLAN_2032 : 192.168.187.32/29 ・記載が完了したら「Caseの作成」ページの一番下にある「次へ」をクリックします。 ・記載した内容を確認し「Caseの送信」をクリックします。 下記のメッセージが出力されたらCaseによる申請が完了しています。   数日後・・サポート・センターよりPower Virtual Server 側の接続が完了されたお知らせが来ました。 依頼内容を間違えてしまったのと少しのんびりやっていたので、接続完了まで5日くらいかかりました。Advanced Supportに入っていないので、対応はクイックではない印象ですが、Caseの担当SEさんより私の方がのんびり返信しているので問題ないです。 修正がなければ、2日程度時間を用意していれば確実に接続してもらえそうです。 IBM CloudのWEBポータル画面ではBCPのステータスが「確立済み」になっていました。 Direct Link Connect とPower Virtual Server の接続が完了しました!   5) VSI for VPC の作成 Direct Link Connect がPower Virtual Server と接続できたので、IBM Cloud の x86環境とちゃちゃっと接続したいところではありますが、実はまだ仮想プライベート・クラウド(VPC)もIBM Cloud のx86環境(仮想サーバインスタンス(VSI)) もありません。。 そのため、この検証のためにx86環境を作っていきます。画面ショットを取得していない部分は文字のみで説明しています。 ・「ナビゲーションメニュー」から「VPCインフラストラクチャー」を選択します。 > 左のメニューから「VPC」を選択し、「作成」をクリックします。 ・「新規仮想プライベート・クラウド」の画面で以下のように入力・選択します。 > 名前:tok-vpc(任意の名前でOK) > リソース・グループ:Default(変更なし) > タグ:(記載なしのまま) > Region:「東京」にチェック > デフォルト・セキュリティー・グループ:「SSHを許可」「Pingを許可」にチェック > クラシック・アクセス:「クラシック・リソースへのアクセスを有効にします」は無効 > デフォルトのアドレス接頭部:「各ゾーンのデフォルト接頭部の作成」にチェック ・「サブネット」の項目では「サブネットの追加」をクリックします。 ・画面の左に「VPC用の新規サブネット」が表示されるので以下の情報を入力し「保存」をクリックします。 > 名前:tok-vpc-subnet(任意の名前) > ゾーン:「東京1」(東京1~3まで選択できます) > リソース・グループ:Default(初期値のまま) > タグ:(記載なしのまま) > IP選択範囲 >> アドレス接頭部:10.244.128.0/18 >> アドレスの数:256 >> IP範囲:10.244.1.0/24 > ルーティング・テーブル:(記載なしのまま) > サブネット・アクセス制御リスト:(記載なしのまま) > パブリック・ゲートウェイ:「接続済み」にチェック 保存が完了したらVPCの作成承認画面になりますので「仮想プライベート・クラウドの作成」をクリックしVPCを作成します。 仮想プライベート・クラウド(VPC)の作成が完了しました!   続いて、VPCの中に仮想サーバ・インスタンス(VSI)を作成します。 ・「カタログ」に「virtual server」と入力するとリストに「Virtual Server for VPC」が出てくるので選択します。 「VPC用の新規仮想サーバ」の作成画面になります。 ・「詳細」では以下の通り入力・選択します。 > 名前:tok-test-vsi(任意の名前でOK) > リソース・グループ:Default > タグ:(記載なしのまま) > ロケーション:東京1(東京1~3が選択できます) > 仮想サーバのタイプ:パブリック >    プロセッサー・アーキテクチャー:x86 ・「オペレーティング・システム」と「プロファイル」は以下を選択しました。 (SSH鍵はAIXインスタンス作成時に作ったものを利用します) ・「配置グループ」「ブート・ボリューム」「データ・ボリューム」は初期値のままとします。 ・「ネットワーキング」では以下を選択します。 > 仮想プライベート・クラウド:tok-vpc (先ほど作成したVPC) ・「ネットワーク・インターフェース」は初期値のままとします。 ここまで入力と選択ができたら左画面に出力されているサマリーを確認し「仮想サーバ・インスタンスの作成」をクリックしてVSIを作成します。 下記のような表示となります。 「状況」が「稼働中」になったら作成完了です(2分くらいで稼働中になりました)。 仮想サーバ・インスタンス(VSI)の作成が完了しました!   次に、VSIをインターネット経由でアクセスできるようにするために、浮動IPアドレスを作成して割り当てます。浮動IPは、フローティングIPとも呼ばれています。 ・IBM Cloud ポータル画面の左上にある「ナビゲーション・メニュー」→「VPCインフラストラクチャー」→「浮動IP」を選択します。 ・「VPC用の浮動IP」の画面で「作成」をクリックします。 左画面に「浮動IPの予約」画面が出力されます。 ・「浮動IPの予約」画面では以下を選択・入力します。 > 浮動IP名:tok-test-vsi-ip(任意の名前でOK) > リソース・グループ:Default > タグ:(記載なし) >ロケーション:「東京3」を選択 > バインドするインスタンス:「tok-test-vsi」を選択(作成したVSI) > ネットワーク・インターフェース:「en0」を選択 すべての設定ができたら「IPの予約」をクリック 浮動IPが割り振られました。 私のPCから作成した浮動IPに疎通できるか確認します。 疎通ができました。 浮動IPの設定が完了しました!   6)AIX環境とx86環境の接続確認 いよいよ、Direct Link Connect と VPC を接続します。 ・「ナビゲーションメニュー」→「相互接続性(Interconnectivity)」→「Direct Link」で「Direct Link」の画面を表示します。 ・左の3つの点をクリックし「接続の追加」を選択します。 ・「接続の追加」で以下を選択・入力し「追加」をクリックします。 > 接続の作成:アカウントに新規接続を追加します。 > ネットワーク接続:VPC > 地域:東京 > 使用可能な接続:tok-vpc > 接続の名前:tok-powervs(任意の名前) 以下のメッセージが出力されます。 2分程度経つと、状況が「作動可能」になります。 これで、VPC と Direct Link Connect がつながりました。 AIX環境とx86環境間でPing疎通ができるかの確認を行います。 ・AIXインスタンスにログインし、VSI環境にpingを投げます。 AIX環境とx86環境が疎通できました! AIXサーバからVSIのubuntuサーバにssh でログインできることも確認できました。   今回で Power Virtual Server のブログは終了です。 検証を通して沢山の新しい知識を培うことができ、とても充実した機会でした!   最後に 2021年は多くのお客様が、Power Systems のオンプレミス更改の考え方を見直すと同時に、 クラウド化を本格的に検討されました。 特に、中小企業のお客様は、クラウド化を選択することで得るメリットがお客様ご自身の負担やストレスを減らす手助けになられたように感じます。 2021年10月から、Power Virtual Server は安価な新ネットワークサービスが開始になったり、IBM i  のライセンス移行オファリングが始まったりと、ユーザの目線に立った新機能が続々登場しています。 より身近なクラウドになってきました。 さて、2022年はアフターコロナが訪れるでしょうか。 海外旅行に行きたいです。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年09月17日

【てくさぽBLOG】IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2)

こんにちは。 てくさぽBLOGメンバーの村上です。 本ブログは、IBM Power Virtual Server をトライしてみた内容や感想をご紹介するブログです。 シリーズ化していますので、まずインデックスのご紹介をします。   インデックス ・IBM Power Virtual ServerでAIX環境を作ってみた ・IBM Power Virtual ServerのAIX環境にSWを導入してみた  ・IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1) ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2) ←今回 ・IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた 今回は、AIX環境のバックアップ手順のご紹介です。 検証環境で2種類のバックアップ方法を試しましたので、Part.1 とPart.2(本ブログ)に分けてご紹介しています。 本ブログでは 「AIX環境をバックアップしてみた Part.2」として、FlashCopy によるバックアップ手順をご紹介します。   セクション 以下の1)~4)のセクションに分けてご紹介します。 1)  FlashCopy の説明 2)  IBM Cloud CLI 導入 3)  FlashCopy によるバックアップの事前準備 4)  FlashCopy の実施 検証はAIXのインスタンスで行いましたが、IBM i のインスタンスでも同等の手順で操作を行うことができます。 利用したクライアント端末(私のPC)は、Windows10 pro バージョン2004です。 1) FlashCopy の説明 Power Virtual Server で実装する FlashCopy  は以下の仕様となっています(IBM Cloud 柔らか層本 20210915版より)。 説明 ・IBM Cloud で提供されており、外部ストレージ装置のコピーを実施する ・バックアップ/リストアの時間が大幅に削減できる ・NWデータ転送量を削減できる 主な用途 ・データベース領域のバックアップ(容量が大きいものにおススメ) ・VM全体のバックアップ 対象 rootvg を含む任意のボリューム 保管場所 外部ストレージ装置 取得時の LPAR停止有無 不要 ※ ファイルの整合性担保のためにバックアップ前にはアプリの静止、LPAR停止が推奨される 制約事項 など ・リストア時はアプリ静止、LPAR停止が推奨 ・GUIは未実装であり、API呼び出しでのみ実行可能(2021年9月 時点) ・FlashCopy 先のストレージは無償で利用可能 ・インスタンス削除と同時にFlashCopy データも消失する FlashCopyとは、「Snapshot 」「Clone 」「Point in time Copy」とも呼ばれ、ある一時点のボリュームのコピーを作成する機能です。コピー元とコピー先は異なるLUN(ストレージのボリューム単位)を使用することができ、バックアップ手法として利用されています。 FlashCopy 先のディスクは課金されず無料で利用することができますが、バックアップデータの実体をWEBインターフェースの画面で確認することはできません。また、インスタンスを削除するタイミングで FlashCopy のデータも消失するため、バックアップデータはICOSなどへのデータのエクスポートが推奨されています。 2) IBM Cloud CLI 導入 FlashCopy を実施する前に、実施環境(ローカルPC)の準備を行います。 Power Virtual Server の FlashCopy は「IBM Cloud API 」を利用します。残念ながらWEBインターフェース画面では FlashCopy 機能が提供されていません(2021年9月時点)。 FlashCopy の実行は「IBM Cloud API 」で行いますが、Power Virtual Server へのログインやFlashCopy に必要なパラメータ取得などで 「IBM Cloud CLI 」も利用します。 IBM Cloud API とは 仮想サーバを簡単にデプロイおよび構成するために利用されるAPI(アプリケーション・プログラム・インターフェイス) :利用する場合、モジュールとしてのインストールは不要 IBM Cloud CLI とは IBM Cloud のリソースを管理するためのCLI(コマンド・ライン・インターフェイス) :利用する場合、モジュールとしてのインストールが必要 「IBM Cloud CLI 」を利用するためには、ローカルPCに「IBM Cloud CLI」のモジュールをインストールする必要があります。 では、IBM Cloud CLI のインストール作業を行っていきます。 ・WEBブラウザーを利用して、GitHub の IBM Cloud リポジトリーにアクセスします。 ・IBM Cloud CLI を導入するPCのOSを選択します(私のPCは下記のピンク色で囲んだOS)。 IBM Cloud CLI のインストーラーがローカルPC内にダウンロードされました。 ※ 上記は2021年1月時点のバージョンで、2021年9月時点の最新版は v2.0.3 です。 ・ローカルPC内にダウンロードしたインストーラーをダブルクリックして起動します。 「IBM Cloud CLI の インストール・ウィザード」が表示されます。 ・「Next」をクリックします 「License Agreement 」の画面が表示されます ・「I accept the terms in the license agreement」にチェックを入れます ・「Next」をクリックします 「Ready to Install the Program」の画面が表示されます。 ・「Install」をクリックします 「The installation completed successfully」のメッセージでインストールが正常に終了した画面が表示されます。 ・「Finish」をクリックします IBM Cloud CLI のインストールが完了です! IBM Cloud CLI が正常にインストールされていることを確認します。 これ以降の作業では、CUI を利用して検証を行います。CUI は Windows標準搭載の「Windows PowerShell」を利用します。(※画面ショットの 固有の値はマスキングします) ・Windows PowerShell を起動し IBM Cloud CLI のバージョン確認コマンドを入力します。 > ibmcloud -v 上記の通り、IBM Cloud CLI  1.3.0 でした。私のPC内の IBM Cloud CLI は、2021年1月頃に導入したので、かなりバージョンが古くなっているようです。 ・IBM Cloud CLIのバージョンアップを行います。 > ibmcloud update →「今すぐ更新しますか?[Y/n]」で「Y」を入力 自動でIBM Cloud CLI のインストーラーが立ち上がります。 ・インストールウィザードの画面で「Next」→「Finish」と進めます ・インストールウィザードが終了したらIBM Cloud CLI のバージョンを確認します。 > ibmcloud -v IBM Cloud CLI  2.0.3 にUpdateできていることが確認できました。 次に、Power Virtual Server 専用のプラグイン(power-iaas/pi )を導入します。IBM Cloud CLI で Power Virtual Server を操作するためには、専用のプラグインが必要になるためです。 ・ibmcloud コマンドでプラグインの一覧を表示します > ibmcloud plugin repo-plugins -r "IBM Cloud" ・「power-iaas/pi」が「未インストール」になっていることを確認し「power-iaas/pi」を導入します。 > ibmcloud plugin install power-iaas プラグインが導入出来ました。 ・導入したプラグインのバージョンを確認します > ibmcloud plugin list 「状況」欄に「更新が使用可能です」と出力されている場合、プラグインのバージョンが古くなっています。 ・プラグインをUpdateします > ibmcloud plugin update 最新バージョンにUpdateでき、「状況」が空欄になりました。 IBM Cloud CLI の準備は完了です! 3) FlashCopy によるバックアップの事前準備 FlashCopy を実施する前にFlashCopyに必要なパラメーターを用意します(パラメータは IBM Cloud API Docs の「Create a PVM instance snapshot」に記載されています)。 単純に出力できないパラメーターは変数に代入していきます。 FlashCopy に必要なパラメーター(変数)は以下となります。 内容 パラメーター/ 変数 ①IBM Cloud へログイン  - ②認証情報 A.  $TOKEN : IBM Cloud IAM アクセストークン B.  $CRN:Cloud Resource Name ③Pathのパラメータ C.  $CLOUD_INSTANCE_ID :Cloud Instance ID D.  $PVM_INSTANCE_ID:PVM Instance ID ④Bodyのパラメータ ・name ・description E.  $VOL_ID:Volume ID それでは、上記の①~④の順番で、パラメータ(変数)を取得していきます。 ① IBM Cloud へログイン ・IBM Cloud へログインします(対話式コマンドでログインを行います)。 >  ibmcloud login   →「Email」にIBM Cloud ログインIDを入力  →「Password」にIBM Cloud ログイン時のパスワードを入力  →「アカウント選択」で利用するアカウントが複数ある場合はアカウントNo.を選択 IBM Cloud にログインができました。 ② 認証情報 の取得 ②では、Power Virtual Server の認証情報を取得します。 Power Virtual Server で IBM Cloud API を利用するためには、すべてのリクエストに 「IBM Cloud IAM アクセストークン」 と 「CRN※」が必要で、これは認証情報と呼ばれます。 ※ CRN:Cloud Resource Name の略。Power Virtual Server のインスタンスID と テナントIDが含まれたもの。 A. IBM Cloud IAM アクセストークンの取得 ・IBM Cloud CLI を利用しアクセストークンを出力します。 > ibmcloud iam oauth-tokens ・必要なストリングをjsonを利用して抽出し、結果を「$TOKEN 」変数に入れます。 > $TOKEN = (ibmcloud iam oauth-tokens --output JSON | ConvertFrom-Json ).iam_token IBM Cloud IAM アクセストークンのパラメータ変数「$TOKEN」 が取得できました。 B. CRNの取得 ・IBM Cloud CLI を利用しCRNを出力します。 > ibmcloud pi service-list ・出力したCRN ID のストリングを抜き出し「$CRN」変数に代入します。 > $CRN = ( ibmcloud pi service-list --json | ConvertFrom-Json).crn 「$CRN」が取得できました。 ③ Pathのパラメータ取得 ③では、FlashCopy の実行文の Path 部分に設定するパラメータを取得します。 C.  Cloud Instance ID の取得 Cloud Instance ID を取得するためには「テナント ID」が必要です。「テナント ID」は「IBM Cloud のアカウントID」のことで、以下の通り、IBMCloud のWEB画面でも確認できます(https://cloud.ibm.com/account/settings)。 上記で確認できるIDをIBM Cloud CLI とAPI で取得します。 ・IBM Cloud CLI を利用し「$TENANT_ID」変数に IBM Cloud アカウントID(テナントID)を代入します。 > $TENANT_ID = (ibmcloud account show --output JSON | ConvertFrom-Json ).account_id ・IBM Cloud API を利用し、テナント状況「$TENANT_STATE」変数を作成します。 $TENANT_STATE = ( ` >> curl.exe -X GET ` >>    https://tok.power-iaas.cloud.ibm.com//pcloud/v1/tenants/$TENANT_ID ` >>   -H "Authorization: $TOKEN" ` >>   -H "CRN: $CRN" ` >>   -H "Content-Type: application/json"  ` >> | ConvertFrom-Json ) ・「$TENANT_STATE 」の「cloudInstances」キーに「cloudInstanceID」が含まれているため(上記のピンク色で囲んだ値)、この値を「$CLOUD_INSTANCE_ID」変数に代入します。 > $TENANT_STATE.cloudInstances > $CLOUD_INSTANCE_ID = ( $TENANT_STATE.cloudInstances).cloudInstanceID 「$CLOUD_INSTANCE_ID」 が取得できました。   D.  PVM Instance ID の取得 PVM Instance ID は、Power Virtual Server のインスタンスID のことです。下記の通り、IBM Cloud のWEB画面からも確認できます。 ・IBM Cloud CLI を利用してインスタンス情報を取得し結果を「$INSTANCE」変数に代入します。 > $INSTANCE = ( ibmcloud pi instances --json | ConvertFrom-Json ) ・「$INSTANCE」変数の「Payload.pvmInstances」キーの配下「pvmInstanceID」キーの値を「$PVM_INSTANCE_ID」変数に代入します。 >$PVM_INSTANCE_ID = ( $INSTANCE.Payload.pvmInstances.pvmInstanceID) 「$PVM_INSTANCE_ID」 が取得できました。 ④ Body のパラメータ取得 ④では、FlashCopy 実行文の Body 部分に設定するパラメータを取得します。 「name」と「description」は任意の値で構いません。 ・ name   :   test ・ description   :   snapshot-test と設定することにしました。 E.  Volume ID の取得 ややこしいのですが、Volume ID は Volume Name を指しています。実際に、Volume ID というパラメーターもあるので間違えないように注意が必要です。Volume ID は、以下の通りWEB画面でも確認できます。 ・IBM Cloud CLIを利用してインスタンス名をリストし、インスタンスに紐づくボリュームを調べます。 > ibmcloud pi instances > ibmcloud pi instance-list-volumes AIX72-test ・上記のピンク色で囲んだ値を「$VOL_ID」変数に代入します。 > $VOL_ID =(ibmcloud pi instance-list-volumes AIX72-test --json |ConvertFrom-Json ).Payload.volumes.name 「$VOL_ID」 が取得できました。 4) FlashCopy の実施 すべてのパラメータが取得できたので、いよいよ(やっと) FlashCopy を実行します。 ・念のため、3)で取得したパラメータ(変数)がきちんと出力されるか確認します。 FlashCopy の実行文は IBM Cloud API Doc に記載がある以下の文です。この実行文を例に、上記の取得したパラメーター(変数)を当てはめて FlashCopy を実行します。 curl -X POST   https://us-east.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/ ${CLOUD_INSTANCE_ID}/ pvm-instances/{pvm_instance_id}/snapshots      -H 'Authorization: Bearer <>'      -H 'CRN: crn:v1...'      -H 'Content-Type: application/json'      -d '{            "name": "VM1-SS",           "description": "Snapshot for VM1",           "volumeIDs":["VM1-7397dc00-0000035b-boot-0"]            }' 上記の実行文の通り、色々と試してみましたが、Body の部分( -d 以降) が PowerShell ではうまく実行できません。 そのため、Qiitaのブログを参考にさせていただき、Body は変数に当てはめて FlashCopy を実行しました(他の部分もかなり参考にさせていただいているブログです!)。 ・FlashCopy 実行文のBody の部分のみ変数に当てはめます。 > $BODY = '{"name": "test", "description": "snapshot-test","volumeIDs": ["' + $VOL_ID + '"] }' ・IBM Cloud API を利用して、FlashCopy を実行します。 > ( $BODY | curl.exe -X POST ` >> https://tok.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/ $CLOUD_INSTANCE_ID/pvm-instances/$PVM_INSTANCE_ID/snapshots ` >> -H "Authorization: $TOKEN" ` >> -H "CRN: $CRN" ` >> -H "Content-Type: application/json" ` >> -d `@- ) FlashCopy が完了しました! ・FlashCopy が正常に完了していることを IBM Cloud API を利用して確認します。(参考「Get all snapshots for this PVM instance」) > curl.exe -X GET ` >> https://tok.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/ $CLOUD_INSTANCE_ID/pvm-instances/$PVM_INSTANCE_ID/snapshots ` >> -H "Authorization: $TOKEN" ` >> -H "CRN: $CRN" ` >> -H "Content-Type: application/json" 上記のピンク色で囲んだ値が FlashCopy の結果を示しています。 「percentComplete」が「100」、「status」が「available」であれば、FlashCopy が成功しています。 FlashCopy が成功していることを確認できました! この後、AIX環境に変更を加えて、取得したFlashCopy のデータのリストアを行い、変更前の状態に戻っているところまで確認しましたが、長くなりましたのでブログはここで終了します。 リストアは「Restore a PVM Instance snapshot」を参考にし、今回のバックアップ手順で取得したパラメータを利用すると簡単に実行できました。 次のブログでは、IBM Cloud IA環境との接続手順をご紹介します。↓ ☆準備中です☆【やってみた】IBM Power Virtual Server AIX環境と IBM Cloud IA環境を接続してみた   最後に 今回の検証は、IBM Cloud API Docs や Qiita に投稿されているブログ を参考にさせていただきました。 Part.1 のImage Capture を利用したバックアップ方法と比べると、今回は慣れないAPIを利用したこともあり調査にとても時間が掛かりました。また、バックアップ処理自体はあっという間でも事前準備にも時間を取られました。 そのため、スピードを求められる開発環境や検証環境には、Image Capture の利用がおすすめです。 実際の運用に組み込むとしたら、FlashCopyでしょうか。 OS、ストレージ、データベース、アプリケーション。バックアップ対象も方法も様々で、バックアップ方法のドキュメントを読んでもイメージが湧かないことがよくありますが、実際に検証をしてみることで、イメージが湧き、メリットやデメリットを捉えることができるので、お客さまにも伝えやすくなります。 今後も時間を見つけ、こつこつ検証をしていきたいと思います。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年09月07日

【てくさぽBLOG】WebSphere Hybrid Editionを導入してみた Vol.3 -アプリ導入編-

こんにちは。 てくさぽBLOGメンバーの岡田です。 IBM WebSphere Hybrid Edition(以下 WSHE)の導入をAzure上で検証してみた3回シリーズの3回目になります。 本記事ではWSHEで利用可能なアプリケーションのうち、Transformation AdvisorとCloud Foundry Migration Runtimeの導入検証を行いました。 WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編- WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編- WebSphere Hybrid Editionを導入してみた Vol.3 -アプリ導入編- *本編 1.WSHEで利用できるアプリケーション WSHEではWebsphere以外に4つのアプリケーションを利用できます。今回はこのうちTransformation Advisor(以下 TA)とCloud Foundry Migration Runtime(以下 CFMR)の2つを導入してみました。 それぞれのアプリケーションを簡単に説明します。 TA: オンプレミスで稼働しているJava EEアプリケーションやメッセージング環境をコンテナ環境へ移行・モダナイズできるかを簡単に調査・レポートできるツールです。WebSphereだけでなくWebLogic / Tomcat等のJavaEE環境、IBM MQも分析可能です。 CFMR: Cloud Foundry アプリケーションを OpenShift 上で変更せずに実行することができる機能です。Cloud Foundryを利用していた管理者・開発者・ユーザーはこれまでのCloud Foundryと同様に利用できます。   2.事前準備 検証を行うにあたり、以下を用意しました。 ・踏み台サーバー兼NFSサーバー・・・今回はAzure上にRHEL8の仮想サーバーを作成し、リモートからこのサーバーに接続して作業しました。Persistent VolumeがTAの前提環境として必要になるため、今回は作業用サーバー上でNFSサーバーを起動し、OpenshiftのワーカーノードからNFSマウントできることまで事前に確認しました。 ・IBM ID ・・・ ライセンス・キーの入手に必要です。 ・TA用プロジェクト・・・今回は”ta"という名前で事前にOpenshift Webコンソールにて作成しました。作成手順は以下になります。 (1)Openshift Webコンソールにて、Home-Projectsを選択します。画面右にある「Create Project」ボタンをクリックします。 (2)名前(Name)に「ta」と入力して「Create」ボタンをクリックします。 (3)Projectsのリストに作成した「ta」があることを確認します。 3.導入検証実施 IBM Cloud Pak CLI (cloudctl)を使用してコマンドラインから導入します。 以下の手順で導入を実施しました。 (1)ライセンス・キーの入手 以下のサイトにIBM IDでログインし、ライセンス・キーを入手します。ライセンス・キーが表示されたら「キーのコピー」をクリックして、ライセンス・キーを控えておきます。 https://myibm.ibm.com/products-services/containerlibrary   (2) cloudctl ツールのダウンロードとインストール ・cloudctlコマンドをダウンロードします。 $ curl -L https://github.com/IBM/cloud-pak-cli/releases/latest/download/cloudctl-linux-amd64.tar.gz -o cloudctl-linux-amd64.tar.gz   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                  Dload  Upload   Total   Spent    Left  Speed 100   155  100   155    0     0    593      0 --:--:-- --:--:-- --:--:--   596 100   635  100   635    0     0   1306      0 --:--:-- --:--:-- --:--:--  1306 100 12.2M  100 12.2M    0     0  6794k      0  0:00:01  0:00:01 --:--:-- 11.2M $ ・ダウンロードしたファイルを解凍し、パスの通っているディレクトリに移動し、実行できることを確認します。 $ tar zxvf ./cloudctl-linux-amd64.tar.gz cloudctl-linux-amd64 $ sudo mv ./cloudctl-linux-amd64 /usr/local/bin/cloudctl [sudo] xxx のパスワード: $ which cloudctl /usr/local/bin/cloudctl $ cloudctl NAME: cloudctl - A command line tool to interact with IBM Cloud Platform Common Services and IBM Cloud PrivateUSAGE: [environment variables] cloudctl [global options] command [arguments...] [command options](以下、省略) (3)WebSphere Hybrid EditionのCASE アーカイブをダウンロード TAとCFMRの両方のプログラムが含まれているCASE(ContainerApplication Software for Enterprises)アーカイブをダウンロードします。コマンド出力がすべて”Success”となっていることを確認します。 $ cloudctl case save --case https://github.com/IBM/cloud-pak/raw/master/repo/case/ibm-websphere-hybrid-1.0.0.tgz --outputdir ./wshe-case Downloading and extracting the CASE ... - Success Retrieving CASE version ... - Success Validating the CASE ... Validating the signature for the ibm-websphere-hybrid CASE... - Success Creating inventory ... - Success Finding inventory items - Success Resolving inventory items ... Parsing inventory items Validating the signature for the ibm-cfmr CASE... Validating the signature for the ibm-transadv CASE... - Success (4)CASEアーカイブの検証 ・CP_USER および CP_APIKEY 環境変数を設定 $ export CP_USER=cp $ export CP_APIKEY=<ライセンス・キー> ・oc クライアントを使用して、クラスターにログイン $ oc login -u kubeadmin -p <パスワード> https://api.nicpwhecluster.xxx.com:6443 Login successful.You have access to 59 projects, the list has been suppressed. You can list all projects with 'oc projects'Using project "ta". $ ・CASE アーカイブを検証し、ライセンスを表示 これ以降のcloudctlのコマンドはroot権限で実行しています。最後に”CASE launch script completed successfully OK”と出力されていることを確認します。 # cloudctl case launch --case wshe-case/ibm-websphere-hybrid-1.0.0.tgz --inventory installProduct --action initialize --args "--viewLicense" Welcome to the CASE launcher Attempting to retrieve and extract the CASE from the specified location [?] CASE has been retrieved and extracted Attempting to validate the CASE [?] CASE has been successfully validated Attempting to locate the launch inventory item, script, and action in the specified CASE [?] Found the specified launch inventory item, action, and script for the CASE Attempting to check the cluster and machine for required prerequisites for launching the item Checking for required prereqs...(途中省略)Kubernetes RBAC Prerequisite Verbs Result Reason *.*/ * trueUser permissions result: OK [?] Cluster and Client Prerequisites have been met for the CASE Running the CASE installProduct launch script with the following action context: initialize Executing inventory item installProduct, action initialize : launch.sh [?] CASE launch script completed successfully OK # (5)インストール構成ファイルを解凍し、確認 tgzファイルを解凍し、展開されたファイルを確認します。 # cloudctl case launch --case wshe-case/ibm-websphere-hybrid-1.0.0.tgz --inventory installProduct --action initialize --args "--acceptLicense" Welcome to the CASE launcher Attempting to retrieve and extract the CASE from the specified location [?] CASE has been retrieved and extracted Attempting to validate the CASE [?] CASE has been successfully validated Attempting to locate the launch inventory item, script, and action in the specified CASE [?] Found the specified launch inventory item, action, and script for the CASE Attempting to check the cluster and machine for required prerequisites for launching the item Checking for required prereqs...Prerequisite Result Client docker CLI must meet the following regex: version (1[7-9]|[2-9][0-9]). false Client podman CLI must meet the following regex: version 1.([4-9]|[1-8][0-9]|9[0-9]). trueRequired prereqs result: OK Checking user permissions...Kubernetes RBAC Prerequisite Verbs Result Reason *.*/ * trueUser permissions result: OK [?] Cluster and Client Prerequisites have been met for the CASE Running the CASE installProduct launch script with the following action context: initialize Executing inventory item installProduct, action initialize : launch.sh [?] CASE launch script completed successfully OK # ls -al ./wshe-case/ total 824 drwxr-xr-x. 3 root root 4096 Mar 5 08:15 . dr-xr-x---. 7 root root 198 Mar 9 05:04 .. drwxr-xr-x. 2 root root 6 Mar 5 08:15 charts -rw-r--r--. 1 root root 32 Mar 5 08:15 ibm-cfmr-1.0.0-charts.csv -rw-r--r--. 1 root root 10274 Mar 5 08:15 ibm-cfmr-1.0.0-images.csv -rw-r--r--. 1 root root 223820 Mar 5 08:15 ibm-cfmr-1.0.0.tgz -rw-r--r--. 1 root root 32 Mar 5 08:15 ibm-transadv-2.4.1-charts.csv -rw-r--r--. 1 root root 4216 Mar 5 08:15 ibm-transadv-2.4.1-images.csv -rw-r--r--. 1 root root 506537 Mar 5 08:15 ibm-transadv-2.4.1.tgz -rw-r--r--. 1 root root 32 Mar 5 08:15 ibm-websphere-hybrid-1.0.0-charts.csv -rw-r--r--. 1 root root 1195 Mar 5 08:15 ibm-websphere-hybrid-1.0.0-images.csv -rw-r--r--. 1 root root 67571 Mar 5 08:15 ibm-websphere-hybrid-1.0.0.tgz# (6)cloudctl CASE インストーラーを実行 最後に”CASE launch script completed successfully OK”と出力されていることを確認します。 # cloudctl case launch --case wshe-case/ibm-websphere-hybrid-1.0.0.tgz --inventory installProduct --action install --args "--acceptLicense" Welcome to the CASE launcher Attempting to retrieve and extract the CASE from the specified location [?] CASE has been retrieved and extracted Attempting to validate the CASE [?] CASE has been successfully validated Attempting to locate the launch inventory item, script, and action in the specified CASE [?] Found the specified launch inventory item, action, and script for the CASE Attempting to check the cluster and machine for required prerequisites for launching the item Checking for required prereqs...Prerequisite Result openshift Kubernetes version must be >=1.17.0, <1.19.0 true Kubernetes node resource must match a set of expressions defined in prereqs.yaml true Client docker CLI must meet the following regex: version (1[7-9]|[2-9][0-9]). false Client podman CLI must meet the following regex: version 1.([4-9]|[1-8][0-9]|9[0-9]). trueRequired prereqs result: OK Checking user permissions...Kubernetes RBAC Prerequisite Verbs Result Reason *.*/ * trueUser permissions result: OK [?] Cluster and Client Prerequisites have been met for the CASE Running the CASE installProduct launch script with the following action context: install Executing inventory item installProduct, action install : launch.shStarting Install ***************************************************************Login To Cluster... okstdout: Using provided cluster configuration. Logged in as kube:admin.Get Cluster Server Address... okstdout: https://api.nicpwhecluster.xxx.com:6443Save Cluster Server Address... okCheck Cluster Version... okstdout: OpenShift 4.5.31 detected.Check Cluster Administrator Role... okstdout: yesGet Authorization Endpoint... okstdout: https://oauth-openshift.apps.nicpwhecluster.xxx.com/oauth/authorizeSave Authorization Endpoint... okGet Default Cluster Subdomain... okstdout: apps.nicpwhecluster.azure-cloudpak-nicptest.comSet Cluster Subdomain... okCheck Entitled Registry Variables... okGet Existing Operator Subscriptions... okstdout: { "other": {} }Set Subscriptions Properties... okSwitch To Transformation Advisor Project... donestdout: Switched to ta project.Populate Transformation Advisor Operator Configuration... doneCreate Pull Secret... donestdout: secret/wshe-pull-secret createdInstall Transformation Advisor Operator... donestdout: operatorgroup.operators.coreos.com/ta created subscription.operators.coreos.com/wshe-transadv createdConfigure Transformation Advisor Service Account... donestdout: clusterrole.rbac.authorization.k8s.io/cluster-admin added: "system:serviceaccount:ta:ta-operator"stderr: Warning: ServiceAccount 'ta-operator' not foundAdd Security Context Constraints To User... donestdout: securitycontextconstraints.security.openshift.io/anyuid added to: ["system:serviceaccount:ta:default"]Check for Transformation Advisor Operator... okGet wshe-transadv ClusterServiceVersion... Retrying... (1 of 51) Retrying... (2 of 51) okstdout: ta-operator.v2.3.4Check ta-operator.v2.3.4 ClusterServiceVersion... Retrying... (1 of 51) Retrying... (2 of 51) Retrying... (3 of 51) Retrying... (4 of 51) Retrying... (5 of 51) Retrying... (6 of 51) Retrying... (7 of 51) Retrying... (8 of 51) okSwitch To Cloud Foundry Migration Runtime Project... donestdout: Created cfmr-operator project.Create Pull Secret... donestdout: secret/wshe-pull-secret createdConfigure Cloud Foundry Migration Runtime Service Account... donestdout: clusterrole.rbac.authorization.k8s.io/cluster-admin added: "system:serviceaccount:cfmr-operator:wshe-ibmcfmrprod-ibm-cfmr-serviceaccount" clusterrole.rbac.authorization.k8s.io/self-provisioner added: "system:serviceaccount:cfmr-operator:wshe-ibmcfmrprod-ibm-cfmr-serviceaccount"stderr: Warning: ServiceAccount 'wshe-ibmcfmrprod-ibm-cfmr-serviceaccount' not found Warning: ServiceAccount 'wshe-ibmcfmrprod-ibm-cfmr-serviceaccount' not foundAdd Security Context Constraints... donestdout: securitycontextconstraints.security.openshift.io/restricted added to: ["system:serviceaccount:cfmr-operator:wshe-ibmcfmrprod-ibm-cfmr-serviceaccount"]Install Cloud Foundry Migration Runtime Operator... donestdout: customresourcedefinition.apiextensions.k8s.io/ibmcfmrprods.cfmr.ibm.com created serviceaccount/cfmr-operator created clusterrole.rbac.authorization.k8s.io/cfmr-operator created clusterrolebinding.rbac.authorization.k8s.io/cfmr-operator created deployment.apps/cfmr-operator createdCheck for Cloud Foundry Migration Runtime Operator... Retrying... (1 of 51) Retrying... (2 of 51) Retrying... (3 of 51) Retrying... (4 of 51) Retrying... (5 of 51) okstdout: All cfmr-operator pods are running and are ready.Switch To Cloud Foundry Migration Runtime Project... donestdout: Switched to cfmr-operator project.Get Default Pull Secret... skippedSet Project Pull Secret... skippedPopulate Cloud Foundry Migration Runtime Custom Resource... doneInstall Cloud Foundry Migration Runtime Resource... donestdout: ibmcfmrprod.cfmr.ibm.com/wshe-ibmcfmrprod createdWait for Cloud Foundry Migration Runtime Install... Retrying... (1 of 301) Retrying... (2 of 301) Retrying... (3 of 301) (途中省略) Retrying... (79 of 301) Retrying... (80 of 301) Retrying... (81 of 301) Retrying... (82 of 301) Retrying... (83 of 301) okstdout: The wshe-ibmcfmrprod-ibm-cfmr job has completed successfullystderr: + NAMESPACE=cfmr-operator + LABEL_QUERY=release=wshe-ibmcfmrprod + sleep 10 ++ oc -n cfmr-operator get job -l release=wshe-ibmcfmrprod -o 'jsonpath={range .items[*]}{@.metadata.name}{end}' + JOBS=wshe-ibmcfmrprod-ibm-cfmr + for JOB_ENTRY in $JOBS ++ oc -n cfmr-operator get job wshe-ibmcfmrprod-ibm-cfmr -o 'jsonpath={.status.active}' + JOB_ACTIVE= ++ oc -n cfmr-operator get job wshe-ibmcfmrprod-ibm-cfmr -o 'jsonpath={.status.failed}' + JOB_FAILED= ++ oc -n cfmr-operator get job wshe-ibmcfmrprod-ibm-cfmr -o 'jsonpath={.status.succeeded}' + JOB_SUCCEEDED=1 + '[' -n '' ']' + '[' -n '' ']' + '[' -n 1 ']' + echo 'The wshe-ibmcfmrprod-ibm-cfmr job has completed successfully' + exit 0Get Cloud Foundry Migration Runtime UI Route... donestdout: xx.xx.xx.xx(外部IPアドレス) set_fact... ok Switch To Transformation Advisor Project... done stdout: Switched to ta project. Get Default Pull Secret... skipped Set Project Pull Secret... skipped Generate Certificate and Create Transformation Advisor Secret... done stdout: Secret transformation-advisor-secret already exists Load Generated Transformation Advisor Certificate... ok Populate Transformation Advisor Custom Resource... done Load Transformation Advisor Custom Resource... ok Customize Transformation Advisor Custom Resource... done Check Transformation Advisor Custom Resource... ok msg: All assertions passed Install Transformation Advisor Custom Resource... done stdout: transadv.charts.ta.cloud.ibm.com/ta created Check For Transformation Advisor UI... Retrying... (1 of 51) Retrying... (2 of 51) Retrying... (3 of 51) Retrying... (4 of 51) Retrying... (5 of 51) Retrying... (6 of 51) Retrying... (7 of 51) Retrying... (8 of 51) ok stdout: All ui pods are running. Check For Transformation Advisor Database... Retrying... (1 of 26) Retrying... (2 of 26) Retrying... (3 of 26) Retrying... (4 of 26) Retrying... (5 of 26) ok stdout: All couchdb pods are running. Check For Transformation Advisor Server... Retrying... (1 of 51) Retrying... (2 of 51) Retrying... (3 of 51) Retrying... (4 of 51) Retrying... (5 of 51) Retrying... (6 of 51) Retrying... (7 of 51) Retrying... (8 of 51) Retrying... (9 of 51) Retrying... (10 of 51) Retrying... (11 of 51) ok stdout: All server pods are running. Annotate Transformation Advisor Deployments... done stdout: deployment.apps/ta-ew7tae-couchdb patched deployment.apps/ta-ew7tae-server patched deployment.apps/ta-ew7tae-ui patched Get Transformation Advisor UI Route... done stdout: ta-apps.apps.nicpwhecluster.azure-cloudpak-nicptest.com set_fact... ok Mark Installation Complete... done Install successful ************************************************************* Installation complete. The IBM Transformation Advisor UI is available at: https://ta-apps.apps.nicpwhecluster.xxx.com The IBM Cloud Foundry Migration Runtime UI is available at: https://ui.xx.xx.xx.xx.nip.io [?] CASE launch script completed successfully OK # コマンド出力の最後にTAとCMFRそれぞれのアクセスするURLが表示されますのでメモしておきます。 (7)接続確認 TA:以下のURLにWebブラウザでアクセスしてページが表示されることを確認します。 https://ta-apps.apps.nicpwhecluster.xxx.com CMFR:こちらも同様に以下のURLにアクセスしてページが表示されることを確認します。 https://ui.<外部IPアドレス>.nip.io これで導入検証は完了です。   補足 以上が導入検証を実施した際の内容となりますが、現在は一部手順が更新されています。TAとCFMRは個別で導入するようにマニュアルが更新されています。これから導入される方は以下のマニュアルを確認の上、実施してみてください。 https://www.ibm.com/docs/en/websphere-hybrid?topic=installation   最後に いかがでしたでしょうか。WindowsアプリやLinuxのrpmパッケージのインストールのようには簡単ではないので、すこし難しいかなと感じました。cloudctlコマンドとCASEの利用はTA、CFMRそれぞれ単体の導入でも同様に行いますので、その際にこの記事が参考になればと思います。 ここまでお読みいただきありがとうございました。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年08月17日

【てくさぽBLOG】IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1)

こんにちは。 てくさぽBLOGメンバーの村上です。 本ブログは、IBM Power Virtual Server をトライしてみた内容や感想をご紹介するブログです。 シリーズ化していますので、まずインデックスのご紹介をします。   インデックス ・IBM Power Virtual ServerでAIX環境を作ってみた ・IBM Power Virtual ServerのAIX環境にSWを導入してみた  ・IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた  ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1) ←今回 ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2) ・IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた 今回は、AIX環境のバックアップ手順のご紹介です。 検証環境で2種類のバックアップ方法を試しましたので、Part.1(本ブログ)とPart.2に分けてご紹介いたします。   Power Virtual Server バックアップ方法 Power Virtual Server の AIX インスタンスでは、以下の4種類のバックアップ方法が推奨されています。 ※技術寄りな人が最初に読む_IBMCloud柔らか層本 を参照(情報は20210811版より抜粋) 取得方法 提供方法 取得対象 Image Capture IBM Cloud で提供される 任意のVolumeGroup Flash Copy IBM Cloud で提供される 任意のVolumeGroup mksysb / savevg AIX OS標準でサポートされる方式 任意のVolumeGroup バックアップ・ソフトウェア利用 お客さまが別途ソフトウェアを購入 OS領域以外のデータ領域 上記の表の太字にしていない「mksysb / savevg」と「バックアップ・ソフトウェア利用」のバックアップ方法は、オンプレミス環境で頻繁に利用されているのでイメージが付きやすいと思います。 そのため、IBM Cloud の機能で提供されている「Image Capture」と「Flash Copy」のバックアップ方法を試すことにしました。 今回は 「AIX環境をバックアップしてみた Part.1」として、Image Capture によるバックアップ取得手順と、そのバックアップデータを IBM Cloud Object Storage に保管する手順をご紹介します。   セクション 以下の1)~4)のセクションに分けてご紹介します。 1)  Image Capture の説明 2)  Image Capture によるバックアップ取得 3)  IBM Cloud Object Storage の準備 4)  IBM Cloud Object Storage への保管 準備工程にかかる時間は別として、2) の「 Image Capture によるバックアップ取得」は数十秒(バックアップ容量が20GB(USEDは13GB))、4) の「IBM Cloud Object Storage への保管」は約17分程度(圧縮後のデータ容量が6.6GB)でした。 検証はAIXのインスタンスで行いましたが、IBM i のインスタンスでも同等の手順で操作を行うことができます。 利用したクライアント端末(私のPC)は、Windows10 pro バージョン2004です。   1) Image Capture の説明 Image Capture  は Power Virtual Server の WEBインターフェース画面で簡単に実行することができます。 <Image Capture とは> 説明 ・IBM Cloud で提供され、LPARのOVAイメージ(※)が出力される ・OVAイメージを使って別のインスタンスのデプロイが可能となる 主な用途 ・移行 ・複製(マスターイメージの管理) ・遠隔地保管 対象 rootvg を含む任意のボリューム 保管場所 ・Image Catalog ・IBM Cloud Object Storage 取得時の LPAR停止有無 不要 ※ ファイルの整合性担保のためにLPARを停止することが推奨される 制約事項 など ・手順を検証した上でバックアップとしても運用可能 ・サービス内の同時実行数は「1」 ・合計のボリュームサイズは最大10TB ・Flash Copy に比べると時間がかかる (※) OVAイメージとは、Open Virtual Appliance の略で、仮想サーバの構成や状態を丸ごとデータとしてファイルに写し取ったデータ形式のことです。 本来、Image Capture は移行や複製を目的とするようなのですが、制約事項に記載した通り、手順を確立する必要はあるもののバックアップとして利用できそうです。 また、制約事項に「Flash Copy より時間はかかる」とありますが、AIXユーザは mksysb や savevg の長時間バックアップに慣れているので、Flash Copy のような高速バックアップに比べて時間がかかる、くらいなら問題ないと感じます。   2) Image Capture によるバックアップ取得 前置きの説明が長くなりましたが、ここからは実際のバックアップ取得の手順となります。 IBM Cloud にログインし、インスタンスの詳細画面を表示します。 (インスタンスの詳細画面の表示方法は以前のブログに記載しています 【やってみた】IBM Power Virtual Server のAIX環境にSWを導入してみた  ) ・「サーバ詳細」の右上に表示されている「VMアクション」のプルダウンをクリックし、「取り込んでエクスポート」をクリックします。 「AIX72-test の取り込みおよびエクスポート」画面が表示されます。 ・バックアップ対象ボリュームを選択します。 ・エクスポート先は「イメージ・カタログ」を選択します。 ・「カタログ・イメージ名」に任意の名前を入れます。「AIX72_CP」という名前にしました。 ・「取り込んでエクスポート」をクリックします。この操作がバックアップ実行ボタンです。   バックアップが進行しているメッセージが出力されます。 上記のメッセージのように「completed」が表示されたらバックアップが完了です。 取得したバックアップデータを確認します。 ・WEBインターフェース画面の左ペインの「ブート・イメージ」をクリックします。 ・「ブートイメージ」のリストに、先ほどバックアップを取得した「AIX72_CP」がリストアップされていることを確認します。 ※「AIX72_CP」の上に表示されている「7200-05-01」は、インスタンス「AIX72-test」作成時にできるイメージです。   以上で、簡単にバックアップが取得できました! 通常は数十分かかるようなバックアップが1分もかからずに実行できたので驚きました。 次のセクションでは、取得したバックアップを別の場所(IBM Cloud Object Storage)にエクスポートします。   3) IBM Cloud Object Storage の準備 2) で取得したバックアップをIBM Cloud Object Storageにエクスポートする前に、IBM Cloud Object Storage のサービスを作成する必要があります(IBM Cloud Object Storage は、これ以降、ICOS と記載します)。 バックアップをICOS上にエクスポートすることで、Power Virtual Server のサービスが削除された後もバックアップデータを残しておくことができます。 ICOS には無料のライトプランが以下の条件で提供されており、今回は以下の条件に当てはまるのでライトプランを利用します。 ・1サービス、1ICOS ・最大25GBのストレージ容量 ・最大20,000 GET 要求/月 ・最大2,000 PUT 要求/月 ・最大10GB/月 のデータの取得 ・最大5GBのパブリック・アウトバウンドライト・プラン・サービスは、非アクティブで 30 日経過すると削除されます。 では、ICOSの環境を準備します。 (ICOSの準備は手順が少し長いですが、難しくないので ぜひお付き合いください) ・IBM Cloud のWEB画面右上の「カタログ」をクリックします。 ・検索バーに「object」と入力し、一番上にリストされる「Object Storage」を選択します。 以下の様に、ICOS のサービス作成画面が表示されます。 ・「リソースの構成」の「サービス名」の欄に任意のサービス名を記載します。今回は「COS-TEST」という名前にしました。 ・ライトプランなので金額が無料であることを確認し「作成」をクリックします。 ICOS サービスが作成できると下記の画面が表示されます。 ICOSサービスは、以下の通り、リソース・リストで確認でき、「ストレージ」のプルダウン以下にリストされます。 次は、「COS-TEST」内にバケットを作成します。 ・リソース・リストにリストされた「COS-TEST」をクリックします。 ・「バケットを作成」をクリックします。 ・「バケットのカスタマイズ」をクリックします。 「カスタム・バケット」の画面に移動します。 ・「固有のバケット名」に任意の名称を入れます。今回は「cos-test-2021」としました。 ・「回復力」は初期状態の「Regional」を選択したままとします。 ・「ロケーション」は「jp-tok」を選択します。 ・「ストレージ・クラス」は初期状態の「Smart Tier」を選択したままとします。 ・その他の項目は初期状態のままとし、画面の一番下にスクロールして「バケットの作成」をクリックします。 バケットが作成できました。 このバケットにアクセス・ポリシーを設定します。 ・上記の画面で「cos-test-2021」をクリックします。 ・左ペインに表示される「アクセス・ポリシー」をクリックします。 ・「ユーザを選択」のプルダウンから権限を付与するユーザを選択します。 ・「このパケットの役割」は初期状態の「ライター」を選択します。 ・「アクセス・ポリシーの作成」をクリックします。 アクセス・ポリシーの設定が完了すると以下が出力されます。 ICOSサービス資格情報を生成します。 ・左ペインより「サービス資格情報」を選択し、「サービス資格情報」の画面上に表示される「新規資格情報」をクリックします。 「資格情報の作成」の画面となります。 ・「HMAC資格情報を含める」を「オン」にします。 ・内容を確認して「追加」をクリックします。 サービスの資格情報が生成されました。 ・「cos_hmac_keys」の情報は、ICOSへバックアップデータをエクスポートする際に利用するのでコピペしておきます。 ICOSの準備が完了しました。 さて、次はバックアップイメージのエクスポート作業です。   4) IBM Cloud Object Storage への保管 2)で取得したバックアップイメージを、3) で作成したICOSのバケット内にエクスポートします。 ・2)で取得したバックアップイメージを表示します。 ・ブート・イメージ「AIX72_CP」の右側にある上矢印のマークをクリックします。これがエクスポートのボタンです。 「AIX72_CPを Cloud Object Storage にエクスポート」の画面が表示されます。 ・「リージョン」は「jp-tok」を選択します。 ・「バケット名」は3)で作成した「cos-test-2021」を入力します。 ・「HMACアクセス鍵」には、3) の手順でコピーしたサービス資格情報を入力します。 ・「HMAXシークレット・アクセス鍵」にも、3) の手順でコピーしたサービス資格情報を入力します。 ・すべての内容を確認し「エクスポート」をクリックします。 エクスポートの進捗は、ポップアップで画面に表示されます(すぐにポップアップが消えてしまい画面ショットは取れませんでした・・)。 バックアップイメージのエクスポートが完了したら、以下のようにICOSの「オブジェクト」画面にオブジェクトが追加されます。 バックアップイメージのエクスポートが完了しました! 6.6GB のバックアップイメージがエクスポートされたことが分かります。 (OVAイメージは自動で圧縮されていました) エクスポートは約17分程度で完了しました。約6.6MB/秒 の転送速度です。 ICOSはIBM Cloud の x86側のサービスを利用しているのもあり、転送速度はちょっと遅いですね。 転送速度を上げるためには、Aspera の利用を検討してみてもよいかもしれません(利用する際は別料金です)。 ICOSを初めて利用する際はICOSの準備に少し手間がかかりましたが、バックアップイメージのエクスポートはとても簡単でした!   次のブログでは、AIXインスタンスのバックアップ手順 Part.2をご紹介しています。 【やってみた】IBM Power Virtual Server のAIX環境をバックアップしてみた Part.2   最後に 実は、Power Virtual Server のバックアップの検証は2021年2月に完了していました。 本ブログを書くタイミングで、久しぶりにPower Virtual Server を触ってみると、ちょこちょこと仕様(画面の見え方など)が変わっていることに気づきまして、検証をやり直しました。 さすが、更新が頻繁に入っているPower Virtual Server ですね。 (情報発信は時間を置かずにすぐにやらないといけませんね!) 最新情報を逃さないよう、頻繁にチェックしていきたいと思います。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年07月06日

【てくさぽBLOG】WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編-

こんにちは。 てくさぽBLOGメンバーの岡田です。 IBM WebSphere Hybrid Edition(以下 WSHE)の導入をAzure上で検証してみた3回シリーズの2回目になります。 本記事では前回実施したAzure上にインストールしたOpenShift4.5環境に、WebSphere Liberty Coreをインストールしていきます。 WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編- WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編- *本編 WebSphere Hybrid Editionを導入してみた Vol.3 -ツール編- 1.WSHEというソフトウェアが無い? そもそもWSHEとはどのようなソフトウェアなのでしょうか。 分かりづらいですが、WSHEライセンスを購入してもWSHEというソフトウェアが利用できるわけではありません。WSHEライセンスは以下のWebSphere ApplicationServer関連の主要な製品をまとめたものです。 WebSphere Application Serverは,従来型のWebSphere traditionalおよび,コンテナ環境にも対応したWebSphere Libertyの二種類のランタイムがあります。今回は、WebSphere Libertyランタイムをインストールしてみます。                                          2.作業用サーバーを用意する 今回、Azure上に構築したRHEL8サーバーに以下を導入します。*個々のインストール手順は省略 ocコマンド podmanコマンド helmコマンド 3.WebSphere Libertyのインストール ここからは、Azure上のRHEL8サーバーにログインして行います。 (1)統合OCPレジストリーへのアクセス権を付与する ・OCPにログインします。 oc login -u kubeadmin -p  <パスワード> https://api.nicpwhecluster.xxx.com:6443 ・oc get nodesでノードのホスト名を確認します。 $ oc get node NAME STATUS ROLES AGE VERSION nicpwhecluster-h8lq5-master-0 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-master-1 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-master-2 Ready master 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-1 Ready worker 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-2 Ready worker 4d23h v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-3 Ready worker 4d23h v1.18.3+e574db2 ・今回はマスターノードの1つ「nicpwhecluster-h8lq5-master-0」で実行します。クラスタから内部経路を使ってレジストリにアクセスします。 $ oc debug nodes/nicpwhecluster-h8lq5-master-0 Starting pod/nicpwhecluster-h8lq5-master-0-debug ... To use host binaries, run `chroot /host` Pod IP: 10.0.0.7 If you don't see a command prompt, try pressing enter. sh-4.2# ・ノード上でocやpodmanなどのツールにアクセスできるように次のコマンドを実行します。 sh-4.2# chroot /host sh-4.4# ・アクセストークンを使用して、コンテナイメージ・レジストリにログインします。 sh-4.4# oc login -u kubeadmin -p <パスワード> https://api.nicpwhecluster.xxx.com:6443 The server uses a certificate signed by an unknown authority. You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n): yLogin successful.You have access to 58 projects, the list has been suppressed. You can list all projects with 'oc projects'Using project "default".Welcome! See 'oc help' to get started. sh-4.4# sh-4.4# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000 WARNING! Using --password via the cli is insecure. Please consider using --password-stdin Login Succeeded! sh-4.4# ・動作確認します。レジストリdocker.ioからイメージをローカルに持ってきます。 sh-4.4# podman pull docker.io/hello-world Trying to pull docker.io/hello-world... Getting image source signatures Copying blob 0e03bdcc26d7 done Copying config bf756fb1ae done Writing manifest to image destination Storing signatures bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b sh-4.4# ・取得できたか確認します。 sh-4.4# podman images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> e62c0ee30db5 3 weeks ago 505 MB quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> b920241dcb5e 3 weeks ago 331 MB quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> 14b9f9be4696 3 weeks ago 312 MB (途中省略) quay.io/openshift-release-dev/ocp-v4.0-art-dev <none> 088760d6a49a 3 weeks ago 912 MB docker.io/library/hello-world latest bf756fb1ae65 13 months ago 20 kB sh-4.4# ・レジストリに対してpodman pushを実行します。 sh-4.4# podman tag docker.io/hello-world image-registry.openshift-image-registry.svc:5000/openshift/hello-world sh-4.4# podman push image-registry.openshift-image-registry.svc:5000/openshift/hello-world Getting image source signatures Copying blob 9c27e219663c done Copying config bf756fb1ae done Writing manifest to image destination Storing signatures sh-4.4# (2)統合OCPレジストリーのエクスポーズ ・DefaultRoute を 「True」にします。 $ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge config.imageregistry.operator.openshift.io/cluster patched (no change) $ ・podmanでログインします。 $ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}') $ echo $HOST default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com $ $ oc whoami -t M3Dbj0zF2oK68yG21jf7WTV37XeWR8EKRagF62QJOL0 $ $ podman login -u kubeadmin -p <パスワード> --tls-verify=false $HOST Login Succeeded! (3)SecurityContextConstraints (SCC) の定義 ・https://github.com/IBM/charts/tree/master/stable/ibm-websphere-liberty内の記載から以下の赤枠箇所の内容を含んだyamlファイルを作成します。今回はibm-websphere-liberty-scc.yamlという名前で作成しました。 ・oc applyコマンドでibm-websphere-liberty-scc を定義します。 $ oc apply -f ./ibm-websphere-liberty-scc.yaml securitycontextconstraints.security.openshift.io/ibm-websphere-liberty-scc created (4)プロジェクトwlp-sample作成 Websphere Liberty用にプロジェクトを作成します。今回は、Webコンソールから「wlp-sample」という名前で作成します。 (5)コンテナ・イメージのビルド ・server.xmlの用意 https://github.com/WASdev/ci.docker/blob/master/ga/latest/full/server.xml内の、36行あるserver.xmlの内容をコピーし、ファイルserver.xmlを作成します。 ・以下の内容のDockerファイルを作成します。 FROM ibmcom/websphere-liberty:19.0.0.12-full-java8-ibmjava-ubi COPY --chown=1001:0? server.xml /config/ RUN installUtility install --acceptLicense defaultServer ・コンテナ・イメージをビルドします。 $ podman build -f ./Dockerfile -t mylibertyapp:1.0 STEP 1: FROM ibmcom/websphere-liberty:19.0.0.12-full-java8-ibmjava-ubi Getting image source signatures Copying blob 58e1deb9693d done Copying blob 78afc5364ad2 done Copying blob 3325260754e7 done Copying blob 4427719dd2c9 done Copying blob c059e0bc6ac9 done Copying blob 0169ad963667 done Copying blob 6195cb089ab9 done Copying blob 9f87c21e1265 done Copying blob 725fc7f0231d done Copying blob 0331a4de6fdc done Copying blob bdab1c39af4a done Copying blob f5b53ae0ca41 done Copying config ce3acc7fda done Writing manifest to image destination Storing signatures STEP 2: COPY --chown=1001:0 server.xml /config/ fbd6f3d9cba9a7a72ac7a0dc3e3011b6400fdb2fd3e21fa34959dfe1925af803 STEP 3: COPY --chown=1001:0 SampleWebApp.war /config/dropins/ d64e1ce4931688a84d354446fbd4fa9f4744ef65cdcb187f830a2c9ea114dff8 STEP 4: RUN installUtility install --acceptLicense defaultServer Checking for missing features required by the server ... The server does not require any additional features. No features were installed.Start product validation... Product validation completed successfully. STEP 5: COMMIT mylibertyapp:1.0 515b092feddf7a2ebb165bbdab187bbfd54bf3bf09b55651b990b7da5b76f767 $ ・作成されたイメージを確認します。 $ podman images | grep myliberty localhost/mylibertyapp     1.0      515b092feddf      28 seconds ago     738 MB $ (6)Buildしたコンテナイメージを統合OCPレジストリーにpush ・まず統合OCPレジストリーへログインします。 $ podman login default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com -u kubeadmin -p 75tT5caixaa_Mm7K6HiVT6xvbyFWeoHf1Dp1soB-21Y --tls-verify=false Login Succeeded! $ ・ビルドしたイメージに統合OCPレジストリーのホスト名とプロジェクトを示す名前を付与します。 実行したらpodman imagesコマンドで確認します。 $ podman tag mylibertyapp:1.0 default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp:1.0 $ podman images | grep myliberty localhost/mylibertyapp 1.0 515b092feddf 5 minutes ago 738 MB default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp 1.0 515b092feddf 5 minutes ago 738 MB $ ・統合OCPレジストリーへコンテナ・イメージを登録(push)します。 $ podman push default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp:1.0 --tls-verify=false Getting image source signatures Copying blob 995a5e8c59d9 done Copying blob 9e4e9b467e1d done Copying blob 18bd03b00625 done Copying blob 33037ee11bc5 done Copying blob 1d7ab3c032a8 done Copying blob da31cc4e7dec done Copying blob eeb6d8f926af done Copying blob 1228a4ab5ec0 done Copying blob 1235447b1b10 done Copying blob 60d1e32eff28 done Copying blob 6ab8cd79d784 done Copying blob 86b23fed23f4 done Copying blob 597be5f3fcff done Copying blob 7dd002d4a36c done Copying blob 6a5e24c477f6 done Copying config 515b092fed done Writing manifest to image destination Copying config 515b092fed done Writing manifest to image destination Storing signatures $ ・コンテナ・イメージが統合OCPレジストリーにpushされたことを確認します。 $ oc get imagestream NAME IMAGE REPOSITORY TAGS UPDATED mylibertyapp default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp 1.0 55 seconds ago$ oc describe imagestream mylibertyapp Name: mylibertyapp Namespace: wlp-sample Created: About a minute ago Labels: <none> Annotations: <none> Image Repository: default-route-openshift-image-registry.apps.nicpwhecluster.xxx.com/wlp-sample/mylibertyapp Image Lookup: local=false Unique Images: 1 Tags: 11.0 no spec tag* image-registry.openshift-image-registry.svc:5000/wlp-sample/mylibertyapp@sha256:bc6bc8fac41fd59b42d37e02888a3348f057c5caa0d8b41fd74d9e9f4aabdab4 About a minute ago $ (7)SCCをサービス・アカウントに付与(grant) ・(3)で作成したibm-websphere-liberty-sccをWebSphere Libertyが使用するサービス・アカウントに付与します。 $ oc project wlp-sample $ oc adm policy add-scc-to-user ibm-websphere-liberty-scc -z mylibertyapp-ibm-websphe clusterrole.rbac.authorization.k8s.io/system:openshift:scc:ibm-websphere-liberty-scc added: "mylibertyapp-ibm-websphe" $ (8)WebSphere LibertyのPodをデプロイ ・Helm Chartから変数ファイルを抽出します。 *WebSphere Liberty用helm Chart(「ibm-websphere-liberty-1.10.0.tgz」)をhttps://github.com/IBM/charts/tree/master/repo/stable からダウンロードしておきます。 $ helm inspect values ./ibm-websphere-liberty-1.10.0.tgz > mylibertyapp.yaml $  ・抽出した変数ファイルをエディタで開いてパラメーターを修正します。今回は以下の2箇所を更新しました。 ー (変更前)license: ""  ⇒ (変更後)license: "accept" ー (変更前)ssl: enabled: true ⇒ (変更後)ssl: enabled: false ・修正した変数ファイルを指定して「helm install」コマンドを実行し、デプロイします。 $ helm install mylibertyapp ./ibm-websphere-liberty-1.10.0.tgz -f ./mylibertyapp.yaml NAME: mylibertyapp LAST DEPLOYED: Mon Mar 1 08:26:17 2021 NAMESPACE: wlp-sample STATUS: deployed REVISION: 1 NOTES: + If you are running on IBM Cloud Kubernetes Service, get the application address by running these commands: ibmcloud cs workers $(kubectl config current-context) export NODE_IP=<Worker node public IP from the first command> export NODE_PORT=$(kubectl get --namespace wlp-sample -o jsonpath="{.spec.ports[0].nodePort}" services mylibertyapp-ibm-websphe) echo Application Address: http://$NODE_IP:$NODE_PORTOtherwise, run the following commands: export NODE_IP=$(kubectl get nodes -l proxy=true -o jsonpath="{.items[0].status.addresses[?(@.type==\"Hostname\")].address}") export NODE_PORT=$(kubectl get --namespace wlp-sample -o jsonpath="{.spec.ports[0].nodePort}" services mylibertyapp-ibm-websphe) echo Application Address: http://$NODE_IP:$NODE_PORT $ ・正常にデプロイできたか確認します。 $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION mylibertyapp wlp-sample 1 2021-03-01 08:26:17.876891227 +0000 UTC deployed ibm-websphere-liberty-1.10.0 19.0.0.6 $ ・作成された主要なOCPリソースの一覧と状況を確認します。 $ oc get all -l app=mylibertyapp-ibm-websphe NAME READY STATUS RESTARTS AGE pod/mylibertyapp-ibm-websphe-76478c8fcd-ngqpp 1/1 Running 0 82sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/mylibertyapp-ibm-websphe NodePort 172.30.179.226 <none> 9080:30797/TCP 82sNAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/mylibertyapp-ibm-websphe 1/1 1 1 82sNAME DESIRED CURRENT READY AGE replicaset.apps/mylibertyapp-ibm-websphe-76478c8fcd 1 1 1 82s $ (9)手作業でRouteを定義し、WebSphere Libertyにアクセスします ・作成されたServiceを確認します。 $ oc get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mylibertyapp-ibm-websphe NodePort 172.30.179.226 <none> 9080:30797/TCP 112s $  ・Routeを作成します。 $ oc expose service mylibertyapp-ibm-websphe route.route.openshift.io/mylibertyapp-ibm-websphe exposed $ ・RouteのHOST名を確認します。 $ oc get route NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD mylibertyapp-ibm-websphe mylibertyapp-ibm-websphe-wlp-sample.apps.nicpwhecluster.xxx.com mylibertyapp-ibm-websphe http None $ ・最後に、Webページにアクセスしてみます。 ー コマンドの場合 $ curl -s http://mylibertyapp-ibm-websphe-wlp-sample.apps.nicpwhecluster.xxx.com <!DOCTYPE html> <html lang="en" xml:lang="en"> <head> <meta charset="utf-8" name="viewport" content="width=device-width,initial-scale=1.0"> <!--title data-externalizedString="WELCOME_TITLE"></title--> <title>WebSphere Liberty 19.0.0.12</title> <style> @font-face { font-family: IBMPlexSans-Medium; src: url('fonts/IBMPlexSans-Medium.woff'); } (以下、省略) ー Webブラウザの場合 4.まとめ いかがでしたでしょうか。 コンテナ版なのでインストールは簡単かな、と思っていたのですが実行するコマンドも多くて結構大変だった印象です。大まかには「コンテナイメージのビルド」⇒「OCPレジストリにプッシュ」⇒「Podのデプロイ」という流れなのですがそれぞれの工程ごとにいろいろなコマンドを打つ必要があるので、実際にやってみようと思われている方の参考になればと思います。 ここまでお読みいただきありがとうございました。 次回はWSHEで利用可能な各種ツール群をインストールしてみた内容をお伝えいたします。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年06月08日

【てくさぽBLOG】WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編(手順詳細)-

1.本記事について 本記事は「WebSphere Hybrid Editionを導入してみた Vol.1(OpenShift導入編)」のコマンドの詳細を掲載したものです。 本編をご覧頂きながら、詳しいコマンドや実行結果を本記事でご確認ください。 2. 事前準備 2-1. 作業用Linux環境準備 (1)作業用ディレクトリ作成 (2)Azure CLIインストール インストール→パスを確認→バージョン確認を実行します。 $ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash $ which az /usr/bin/az $ az version {  "azure-cli": "2.18.0",  "azure-cli-core": "2.18.0",  "azure-cli-telemetry": "1.0.6",  "extensions": {} } (3)jqパッケージインストール yumコマンドでjqパッケージをインストールします。 $ yum -y install epel-release $ yum -y install jq $ $ which jq /usr/bin/jq (4)cloudctlインストール ダウンロード→解凍→パスが通った場所に配置します。 $ curl -L https://github.com/IBM/cloud-pak-cli/releases/latest/download/cloudctl-linux-amd64.tar.gz -o cloudctl-linux-amd64.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 160 100 160 0 0 446 0 --:--:-- --:--:-- --:--:-- 446 100 635 100 635 0 0 992 0 --:--:-- --:--:-- --:--:-- 992 100 12.4M 100 12.4M 0 0 4699k 0 0:00:02 0:00:02 --:--:-- 7554k$ tar xvf ./cloudctl-linux-amd64.tar.gz cloudctl-linux-amd64$ sudo mv ./cloudctl-linux-amd64 /usr/local/bin/cloudctl $ which cloudctl /usr/local/bin/cloudctl (5)ocコマンドのインストール $ tar xvf ./oc-4.5.31-linux.tar.gz README.md oc kubectl$ sudo mv ./oc /usr/local/bin/oc$ which oc /usr/local/bin/oc 2-2. ファイルの準備 (1)OCP4.5インストールファイルのダウンロード /home/user01/os45フォルダにダウンロードし、インストールファイルを解凍します。 $ tar xvf openshift-install-linux-4.5.31.tar.gz README.md openshift-install (2)Pull Secretファイル 2-3. パブリックDNSゾーン設定 (1)リソースグループを作成 (2)App Serviceドメインを作成 2-4. サービスプリンシパルの作成 (1)Azureへのログイン(az login) $ az login The default web browser has been opened at https://login.microsoftonline.com/common/oauth2/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`. WebブラウザでのAzure認証画面でログインします。 (2)アクティブなアカウントの詳細を表示して「tenantId」「id」を確認 $ az account list --refresh [  {   "cloudName": "AzureCloud",   "homeTenantId": "<tenantId>",   "id": "<ID>",   "isDefault": true,   "managedByTenants": [],   "name": "<サブスクリプション名>",   "state": "Enabled",   "tenantId": "<tenantId>",   "user": {   "name": "admin@xxx.onmicrosoft.com", "type": "user" }  } ] (3)アカウントのサービスプリンシパルを作成し「appId」「password」を確認 $ az ad sp create-for-rbac --role Contributor --name ocp_sp Changing "ocp_sp" to a valid URI of "http://ocp_sp", which is the required format used for service principal names Creating 'Contributor' role assignment under scope '/subscriptions/<id>' Retrying role assignment creation: 1/36 The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "appId": "<appId>", "displayName": "ocp_sp", "name": "http://ocp_sp", "password": "<password>", "tenant": "<tenantID>" } (4)サービスプリンシパルに追加パーミッションを付与 (4-1)User Access Administrator ロールを割り当て メモしておいた<appId>をパラメータに利用します。 $ az role assignment create --role "User Access Administrator" --assignee-object-id $(az ad sp list --filter "appId eq '<appId>' " | jq '.[0].objectId' -r) { "canDelegate": null, "condition": null, "conditionVersion": null, "description": null, "id": "/subscriptions/<id>/providers/Microsoft.Authorization/roleAssignments/c02d16cf-c875-4228-99a7-ecfc77d23ff2", "name": "c02d16cf-c875-4228-99a7-ecfc77d23ff2", "principalId": "f56550e6-c2f3-47d1-9e82-be0be7674f9f", "principalType": "ServicePrincipal", "roleDefinitionId": "/subscriptions/<id>/providers/Microsoft.Authorization/roleDefinitions/18d7d88d-d35e-4fb5-a5c3-7773c20a72d9", "scope": "/subscriptions/<id>", "type": "Microsoft.Authorization/roleAssignments" } (4-2)Azure Active Directory Graph パーミッションを割り当て $ az ad app permission add --id <appId> --api 00000002-0000-0000-c000-000000000000 --api-permissions 824c81eb-e3f8-4ee6-8f6d-de7f50d565b7=Role Invoking "az ad app permission grant --id <appId>--api 00000002-0000-0000-c000-000000000000" is needed to make the change effective (5)パーミッション要求を承認 $ az ad app permission grant --id <appId> --api 00000002-0000-0000-c000-000000000000 { "clientId": "f56550e6-c2f3-47d1-9e82-be0be7674f9f", "consentType": "AllPrincipals", "expiryTime": "2022-02-24T05:15:17.649474", "objectId": "5lBl9fPC0Ueegr4L52dPnzVAb4VRJ4FHiVNygLqyh7c", "odata.metadata": "https://graph.windows.net/<tenantId>/$metadata#oauth2PermissionGrants/@Element", "odatatype": null, "principalId": null, "resourceId": "856f4035-2751-4781-8953-7280bab287b7", "scope": "user_impersonation", "startTime": "2021-02-24T05:15:17.649474" } 3.OpenShift 導入 3-1. SSH秘密鍵の作成 (1)作業用Linuxマシン上でssh-keygenコマンドを実行しSSHキーを作成 $ ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa2 Generating public/private rsa key pair. Your identification has been saved in /home/user01/.ssh/id_rsa2. Your public key has been saved in /home/user01/.ssh/id_rsa2.pub. The key fingerprint is: SHA256:kKB23rSxmb6ZjQA9eMaLYoXWxsounLQ160TxrOpf2VY user01@A2470 The key's randomart image is: +---[RSA 4096]----+ | . | | . . . | | o.. = | | .+*+o B | | oo*Bo* SE | |o.=B.+o . | |++=o=o.o | |+=o....* | |o+oo = . | +----[SHA256]-----+ (2)ssh-agent プロセスをバックグラウンドタスクとして開始 $ eval "$(ssh-agent -s)" Agent pid 3306 (3)SSH プライベートキーを ssh-agent に追加 $ ssh-add ~/.ssh/id_rsa2 Identity added: /home/user01/.ssh/id_rsa2 (/home/user01/.ssh/id_rsa2) 3-2. インストールファイルの作成 (1)install-config.yaml ファイル生成 $ cd /home/user01/os45 $ ./openshift-install create install-config --dir=/home/user01/os45 ? SSH Public Key /home/user01/.ssh/id_rsa2.pub ← プロンプトで入力 ? Platform azure ← プロンプトで入力 ? azure subscription id <id> ← プロンプトで入力 ? azure tenant id <tenantId> ← プロンプトで入力 ? azure service principal client id <appId> ← プロンプトで入力 ? azure service principal client secret [? for help] ******<password>******* ← プロンプトで入力 INFO Saving user credentials to "/home/user01/.azure/osServicePrincipal.json" INFO Credentials loaded from file "/home/user01/.azure/osServicePrincipal.json" ? Region japaneast ← プロンプトで入力 ? Base Domain ← プロンプトで入力 ? Cluster Name nicpwhecluster ← プロンプトで入力 ? Pull Secret [? for help] ← 事前にダウンロードしたPull Secretを貼り付け ******************************************************************************************** ※特に完了のメッセージは表示されません (2)ARM テンプレートの一般的な変数のエクスポート $ export CLUSTER_NAME=nicpwhecluster $ export AZURE_REGION=japaneast $ export SSH_KEY=""ssh-rsa AAAAB3Nza<以下、省略>"" $ export BASE_DOMAIN= $ export BASE_DOMAIN_RESOURCE_GROUP=ocp-cluster $ export KUBECONFIG=/home/user01/os45/auth/kubeconfig (3)クラスターの Kubernetes マニフェストを生成 $ ./openshift-install create manifests --dir=/home/user01/os45/ "INFO Credentials loaded from file ""/home/user01/.azure/osServicePrincipal.json"" INFO Consuming Install Config from target directory" (4)コントロールプレーン、ワーカーノードを定義する Kubernetes マニフェストファイルを削除 $ rm -f /home/user01/os45/openshift/99_openshift-cluster-api_master-machines-*.yaml $ rm -f /home/user01/os45/openshift/99_openshift-cluster-api_worker-machineset-*.yaml ※これらのファイルを削除することで、クラスターが自動的に生成するのを防ぎます。 (5)Kubernetes マニフェストファイルを変更 /home/user01/os45/manifests/cluster-scheduler-02-config.yml を変更し、Pod がコントロールプレーンにスケジュールされないようにします。 manifests/cluster-scheduler-02-config.yml ファイルをエディタで開き、"mastersSchedulable"パラメーターの値を False に設定し、保存、終了します。 (6)変数のエクスポート $ export INFRA_ID=nicpwhecluster-h8lq5 $ export RESOURCE_GROUP=nicpwhecluster-h8lq5-rg (7)Ignition 設定ファイルを取得 $ ./openshift-install create ignition-configs --dir=/home/user01/os45/ INFO Consuming OpenShift Install (Manifests) from target directory INFO Consuming Openshift Manifests from target directory INFO Consuming Common Manifests from target directory INFO Consuming Master Machines from target directory INFO Consuming Worker Machines from target directory (8)ファイルの確認 os45に生成された"bootstrap.ign"ファイル、”master.ign"ファイル、"metadata.json"ファイル、"worker.ign"ファイルがあることを確認します。 $ ls -al /home/user01/os45 total 91924 drwxrwxr-x 1 user01 user01 4096 Feb 24 15:10 . drwxr-xr-x 1 user01 user01 4096 Feb 24 15:09 .. -rw-rw-r-- 1 user01 user01 77773 Feb 24 15:10 .openshift_install.log -rw-r----- 1 user01 user01 1274855 Feb 24 15:10 .openshift_install_state.json drwxr-x--- 1 user01 user01 4096 Feb 24 15:10 auth -rw-r----- 1 user01 user01 302438 Feb 24 15:10 bootstrap.ign drwxrwxr-x 1 user01 user01 4096 Feb 24 09:52 conf -rw-r----- 1 user01 user01 4346 Feb 24 14:47 install-config.yaml.org -rw-r----- 1 user01 user01 1847 Feb 24 15:10 master.ign -rw-r----- 1 user01 user01 147 Feb 24 15:10 metadata.json -rw-r--r-- 1 user01 user01 92429691 Feb 12 16:46 openshift-install-linux-4.5.31.tar.gz -rw-r--r-- 1 user01 user01 2779 Feb 12 15:37 pull-secret.txt -rw-r--r-- 1 user01 user01 50 Feb 12 15:37 pull-secret.txt:Zone.Identifier -rw-r----- 1 user01 user01 1847 Feb 24 15:10 worker.ign 同様に/home/user01/os45/auth内に"kubeadmin-password"と"kubeconfig"があることを確認 user01@A2470:~$ ls -al /home/user01/os45/auth/ total 12 drwxr-x--- 1 user01 user01 4096 Feb 24 15:10 . drwxrwxr-x 1 user01 user01 4096 Feb 24 15:10 .. -rw-r----- 1 user01 user01 23 Feb 24 15:10 kubeadmin-password -rw-r----- 1 user01 user01 8992 Feb 24 15:10 kubeconfig 3-3. Azure リソースグループおよびアイデンティティーの作成 (1)リソースグループを作成 $ az group create --name ${RESOURCE_GROUP} --location ${AZURE_REGION} { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg", "location": "japaneast", "managedBy": null, "name": "nicpwhecluster-h8lq5-rg", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" } (2)リソースグループの Azure アイデンティティーを作成 $ az identity create -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity { "clientId": "487b4852-018d-4289-94f7-24db4bef3811", "clientSecretUrl": "https://control-japaneast.identity.azure.net/subscriptions/<id>/resourcegroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/nicpwhecluster-h8lq5-identity/credentials?tid=<tenantId>&oid=f0273f5e-4c1b-4cf4-b3ac-14ad28344d17&aid=487b4852-018d-4289-94f7-24db4bef3811", "id": "/subscriptions/<id>/resourcegroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/nicpwhecluster-h8lq5-identity", "location": "japaneast", "name": "nicpwhecluster-h8lq5-identity", "principalId": "f0273f5e-4c1b-4cf4-b3ac-14ad28344d17", "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": {}, "tenantId": "<tenantID>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" } (3)Contributor ロールを Azure アイデンティティーに付与 (3-1)ロール割当に必要な変数をエクスポート $ export PRINCIPAL_ID=`az identity show -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity --query principalId --out tsv` $ export RESOURCE_GROUP_ID=`az group show -g ${RESOURCE_GROUP} --query id --out tsv` (3-2)Contributor ロールをアイデンティティーに割り当て $ az role assignment create --assignee "${PRINCIPAL_ID}" --role 'Contributor' --scope "${RESOURCE_GROUP_ID}" { "canDelegate": null, "condition": null, "conditionVersion": null, "description": null, "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Authorization/roleAssignments/0b0302ab-9ca5-4b85-a2f3-a0f7c7cded77", "name": "0b0302ab-9ca5-4b85-a2f3-a0f7c7cded77", "principalId": "f0273f5e-4c1b-4cf4-b3ac-14ad28344d17", "principalType": "ServicePrincipal", "resourceGroup": "nicpwhecluster-h8lq5-rg", "roleDefinitionId": "/subscriptions/<id>/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c", "scope": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg", "type": "Microsoft.Authorization/roleAssignments" } 3-4. RHCOS クラスターイメージおよびブートストラップ Ignition 設定ファイルのアップロード (1)Azureストレージアカウントの作成 $ az storage account create -g ${RESOURCE_GROUP} --location ${AZURE_REGION} --name ${CLUSTER_NAME}sa --kind Storage --sku Standard_LRS Resource provider 'Microsoft.Storage' used by this operation is not registered. We are registering for you. Registration succeeded. {- Finished .. "accessTier": null, "allowBlobPublicAccess": null, "azureFilesIdentityBasedAuthentication": null, "blobRestoreStatus": null, "creationTime": "2021-02-24T06:16:35.567172+00:00", "customDomain": null, "enableHttpsTrafficOnly": true, "encryption": { "keySource": "Microsoft.Storage", "keyVaultProperties": null, "requireInfrastructureEncryption": null, "services": { "blob": { "enabled": true, "keyType": "Account", "lastEnabledTime": "2021-02-24T06:16:35.629673+00:00" }, "file": { "enabled": true, "keyType": "Account", "lastEnabledTime": "2021-02-24T06:16:35.629673+00:00" }, "queue": null, "table": null } }, "failoverInProgress": null, "geoReplicationStats": null, "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Storage/storageAccounts/nicpwheclustersa", "identity": null, "isHnsEnabled": null, "isHnsEnabled": null, "kind": "Storage", "largeFileSharesState": null, "lastGeoFailoverTime": null, "location": "japaneast", "minimumTlsVersion": null, "name": "nicpwheclustersa", "networkRuleSet": { "bypass": "AzureServices", "defaultAction": "Allow", "ipRules": [], "virtualNetworkRules": [] }, "primaryEndpoints": { "blob": "https://nicpwheclustersa.blob.core.windows.net/", "dfs": null, "file": "https://nicpwheclustersa.file.core.windows.net/", "internetEndpoints": null, "microsoftEndpoints": null, "queue": "https://nicpwheclustersa.queue.core.windows.net/", "table": "https://nicpwheclustersa.table.core.windows.net/", "web": null }, "primaryLocation": "japaneast", "privateEndpointConnections": [], "provisioningState": "Succeeded", "resourceGroup": "nicpwhecluster-h8lq5-rg", "routingPreference": null, "secondaryEndpoints": null, "secondaryLocation": null, "sku": { "name": "Standard_LRS", "tier": "Standard" }, "statusOfPrimary": "available", "statusOfSecondary": null, "tags": {}, "type": "Microsoft.Storage/storageAccounts" } (2)ストレージアカウントキーを環境変数としてエクスポート $ export ACCOUNT_KEY=`az storage account keys list -g ${RESOURCE_GROUP} --account-name ${CLUSTER_NAME}sa --query "[0].value" -o tsv` (3)VHD の URL を環境変数にエクスポート 今回はOCP4.5で構築するのでrelease-4.5ディレクトリを指定します。 $ export VHD_URL=`curl -s https://raw.githubusercontent.com/openshift/installer/release-4.5/data/data/rhcos.json | jq -r .azure.url` (4)選択した VHD を blob にコピー $ az storage container create --name vhd --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} { "created": true } コピーがスタートしたら、コマンドを実行してステータスを確認します。「Success」なったら完了です。 $ az storage blob copy start --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} --destination-blob "rhcos.vhd" --destination-container vhd --source-uri "${VHD_URL}" { "completionTime": null, "id": "afe1cb0f-9194-40b4-9a6c-d8f25c7b69bd", "progress": null, "source": null, "status": "pending", "statusDescription": null }(状況確認コマンド) $ az storage blob show --container-name vhd --name "rhcos.vhd" --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -o tsv --query properties.copy.status success (5)blob ストレージコンテナーを作成します。 $ az storage container create --name files --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} --public-access blob { "created": true } 続いて、生成されたbootstrap.ignファイルをアップロードします。 $ az storage blob upload --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c "files" -f "/home/user01/os45/bootstrap.ign" -n "bootstrap.ign" { "etag": "00000002-0000-0000-8f3c-b41b770ad701", "id": "/subscriptions/<id>/resourceGroups/ocp-cluster/providers/Microsoft.Network/dnszones/nicpwhecluster.", "location": "global", "maxNumberOfRecordSets": 10000, "name": "nicpwhecluster.", "nameServers": [ "ns1-05.azure-dns.com.", "ns2-05.azure-dns.net.", "ns3-05.azure-dns.org.", "ns4-05.azure-dns.info." ], "numberOfRecordSets": 2, "registrationVirtualNetworks": null, "resolutionVirtualNetworks": null, "resourceGroup": "ocp-cluster", "tags": {}, "type": "Microsoft.Network/dnszones", "zoneType": "Public" } 3-5. DNSゾーンの作成 (1)プライベートDNSゾーンを作成 $ az network dns zone create -g ${BASE_DOMAIN_RESOURCE_GROUP} -n \${CLUSTER_NAME}.${BASE_DOMAIN}  {-Finished .. "etag": "02474d3c-85a2-4a48-8650-e837ea7df63b", "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster.", "location": "global", "maxNumberOfRecordSets": 25000, "maxNumberOfVirtualNetworkLinks": 1000, "maxNumberOfVirtualNetworkLinksWithRegistration": 100, "name": "nicpwhecluster.", "numberOfRecordSets": 1, "numberOfVirtualNetworkLinks": 0, "numberOfVirtualNetworkLinksWithRegistration": 0, "provisioningState": "Succeeded", "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Network/privateDnsZones" } 3-6. Azure での VNet の作成 (1)デプロイメントを作成 マニュアルページにある「VNet の ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに01_vnet.jsonというファイルを作成し、コマンドを実行 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/01_vnet.json" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/01_vnet", "location": null, "name": "01_vnet", "properties": { "correlationId": "0a44ba18-b094-41b1-9be5-16ae14c50593", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-nsg", "resourceType": "Microsoft.Network/networkSecurityGroups" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-vnet", "resourceType": "Microsoft.Network/virtualNetworks" } ], "duration": "PT9.5604786S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "virtualNetworks" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "networkSecurityGroups" } ] } ], "provisioningState": "Succeeded", "templateHash": "16546001156426103307", "templateLink": null, "timestamp": "2021-02-24T06:39:35.707206+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (2)VNet テンプレートをプライベート DNS ゾーンにリンク $ az network private-dns link vnet create -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n ${INFRA_ID}-network-link -v "${INFRA_ID}-vnet" -e false {- Finished .. "etag": "\"7e02aec1-0000-0100-0000-6035f4fb0000\"", "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./virtualNetworkLinks/nicpwhecluster-h8lq5-network-link", "location": "global", "name": "nicpwhecluster-h8lq5-network-link", "provisioningState": "Succeeded", "registrationEnabled": false, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks", "virtualNetwork": { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, "virtualNetworkLinkState": "Completed" } 3-7. RHCOS クラスターイメージのデプロイ (1)RHCOS VHD blob URL を変数としてエクスポート $ export VHD_BLOB_URL=`az storage blob url --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c vhd -n "rhcos.vhd" -o tsv` (2)クラスターイメージのデプロイ マニュアルページにある「イメージストレージの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに02_storage.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/02_storage.json" --parameters vhdBlobURL="${VHD_BLOB_URL}" --parameters baseName="${INFRA_ID}" - Finished .. {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/02_storage", "location": null, "name": "02_storage", "properties": { "correlationId": "0d04f61c-907e-4ccb-b364-a5c50c0e9ae7", "debugSetting": null, "dependencies": [], "duration": "PT13.9015046S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/images/nicpwhecluster-h8lq5-image", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "vhdBlobURL": { "type": "String", "value": "https://nicpwheclustersa.blob.core.windows.net/vhd/rhcos.vhd" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Compute", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "images" } ] } ], "provisioningState": "Succeeded", "templateHash": "723175588916620424", "templateLink": null, "timestamp": "2021-02-24T06:45:00.292869+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } 3-8.ネットワークおよび負荷分散コンポーネントの作成 (1)ネットワークオブジェクトおよびロードバランサーのデプロイ マニュアルページにある「ネットワークおよびロードバランサーの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに03_infra.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/03_infra.json" --parameters privateDNSZoneName="${CLUSTER_NAME}.${BASE_DOMAIN}" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/03_infra", "location": null, "name": "03_infra", "properties": { "correlationId": "32467378-c2a4-4e99-b950-9b3ba06ba768", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-master-pip", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-pip", "resourceType": "Microsoft.Network/publicIPAddresses" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-public-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-public-lb", "resourceType": "Microsoft.Network/loadBalancers" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-internal-lb", "resourceType": "Microsoft.Network/loadBalancers" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./api", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-internal-lb", "resourceType": "Microsoft.Network/loadBalancers" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api-int", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./api-int", "resourceType": "Microsoft.Network/privateDnsZones/A" } ], "duration": "PT7.2301651S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-public-lb", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api-int", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-master-pip", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "privateDNSZoneName": { "type": "String", "value": "nicpwhecluster." } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "publicIPAddresses" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "loadBalancers" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "privateDnsZones/A" } ] } ], "provisioningState": "Succeeded", "templateHash": "8527193543920854248", "templateLink": null, "timestamp": "2021-02-24T07:02:29.639760+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (2)変数のエクスポートとクラスターを既存のパブリックゾーンに追加 まず変数をエクスポートします。 $ export PUBLIC_IP=`az network public-ip list -g ${RESOURCE_GROUP} --query "[?name=='${INFRA_ID}-master-pip'] | [0].ipAddress" -o tsv` クラスターを既存のパブリックゾーンに追加します。 $ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n api.${CLUSTER_NAME} -a ${PUBLIC_IP} --ttl 60 { "arecords": [ { "ipv4Address": "20.78.25.157" } ], "etag": "e1b034dc-580a-460e-8579-d7789e6aa43c", "fqdn": "api.nicpwhecluster..", "id": "/subscriptions/<id>/resourceGroups/ocp-cluster/providers/Microsoft.Network/dnszones//A/api.nicpwhecluster", "metadata": null, "name": "api.nicpwhecluster", "provisioningState": "Succeeded", "resourceGroup": "ocp-cluster", "targetResource": { "id": null }, "ttl": 60, "type": "Microsoft.Network/dnszones/A" } 3-9.ノードの作成 (1)ブートストラップマシンの作成 まず変数をエクスポートします。 $ export BOOTSTRAP_URL=`az storage blob url --account-name ${CLUSTER_NAME}sa --account-key ${ACCOUNT_KEY} -c "files" -n "bootstrap.ign" -o tsv` $ export BOOTSTRAP_IGNITION=`jq -rcnM --arg v "2.2.0" --arg url ${BOOTSTRAP_URL} '{ignition:{version:$v,config:{replace:{source:$url}}}}' | base64 -w0` マニュアルページにある「ブートストラップマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに04_bootstrap.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/04_bootstrap.json" --parameters bootstrapIgnition="${BOOTSTRAP_IGNITION}" --parameters sshKeyData="${SSH_KEY}" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/04_bootstrap", "location": null, "name": "04_bootstrap", "properties": { "correlationId": "6bfb12f9-fade-4ab0-99e2-a6acc50a0e67", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-bootstrap-ssh-pip", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap-ssh-pip", "resourceType": "Microsoft.Network/publicIPAddresses" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap-nic", "resourceType": "Microsoft.Network/networkInterfaces" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap-nic", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap", "resourceType": "Microsoft.Compute/virtualMachines" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-bootstrap", "resourceType": "Microsoft.Compute/virtualMachines" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg/securityRules/bootstrap_ssh_in", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-nsg/bootstrap_ssh_in", "resourceType": "Microsoft.Network/networkSecurityGroups/securityRules" } ], "duration": "PT2M34.7216702S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg/securityRules/bootstrap_ssh_in", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-bootstrap-ssh-pip", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "bootstrapIgnition": { "type": "String", "value": "eyJpZ25pdGlvbiI6eyJ2ZXJzaW9uIjoiMi4yLjAiLCJjb25maWciOnsicmVwbGFjZSI6eyJzb3VyY2UiOiJodHRwczovL25pY3B3aGVjbHVzdGVyc2EuYmxvYi5jb3JlLndpbmRvd3MubmV0L2ZpbGVzL2Jvb3RzdHJhcC5pZ24ifX19fQo=" }, "bootstrapVMSize": { "type": "String", "value": "Standard_D4s_v3" }, "sshKeyData": { "type": "SecureString" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "publicIPAddresses" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "networkInterfaces" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "networkSecurityGroups/securityRules" } ] }, { "id": null, "namespace": "Microsoft.Compute", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "virtualMachines" } ] } ], "provisioningState": "Succeeded", "templateHash": "61131872004139608", "templateLink": null, "timestamp": "2021-02-24T07:15:18.354401+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (2)コントロールプレーンの作成 マニュアルページにある「コントロールプレーンマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに05_masters.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/05_masters.json" --parameters masterIgnition="${MASTER_IGNITION}" --parameters sshKeyData="${SSH_KEY}" --parameters privateDNSZoneName="${CLUSTER_NAME}.${BASE_DOMAIN}" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/05_masters", "location": null, "name": "05_masters", "properties": { "correlationId": "8d3c2bed-113b-4889-8aa7-b0bfba69ea74", "debugSetting": null, "dependencies": [ { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-0-nic", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-0", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-1-nic", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-1", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-2-nic", "resourceType": "Microsoft.Network/networkInterfaces" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-2", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-0-nic", "resourceType": "Microsoft.Network/networkInterfaces" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-0", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./_etcd-server-ssl._tcp", "resourceType": "Microsoft.Network/privateDnsZones/SRV" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-0", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-0", "resourceType": "Microsoft.Compute/virtualMachines" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-1-nic", "resourceType": "Microsoft.Network/networkInterfaces" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-1", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./_etcd-server-ssl._tcp", "resourceType": "Microsoft.Network/privateDnsZones/SRV" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-1", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-1", "resourceType": "Microsoft.Compute/virtualMachines" }, { "dependsOn": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-2-nic", "resourceType": "Microsoft.Network/networkInterfaces" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./etcd-2", "resourceType": "Microsoft.Network/privateDnsZones/A" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster./_etcd-server-ssl._tcp", "resourceType": "Microsoft.Network/privateDnsZones/SRV" } ], "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-2", "resourceGroup": "nicpwhecluster-h8lq5-rg", "resourceName": "nicpwhecluster-h8lq5-master-2", "resourceType": "Microsoft.Compute/virtualMachines" } ], "duration": "PT2M25.3829982S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-0", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-1", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-2", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "diskSizeGB": { "type": "Int", "value": 1024 }, "masterIgnition": { "type": "String", "value": "eyJpZ25pdGlvbiI6eyJjb25maWciOnsiYXBwZW5kIjpbeyJzb3VyY2UiOiJodHRwczovL2FwaS1p\nbnQubmljcHdoZWNsdXN0ZXIuYXp1cmUtY2xvdWRwYWstbmljcHRlc3QuY29tOjIyNjIzL2NvbmZp\nZy9tYXN0ZXIiLCJ2ZXJpZmljYXRpb24iOnt9fV19LCJzZWN1cml0eSI6eyJ0bHMiOnsiY2VydGlm\naWNhdGVBdXRob3JpdGllcyI6W3sic291cmNlIjoiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm\nLTg7YmFzZTY0LExTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVVJGUkVO\nRFFXWnBaMEYzU1VKQlowbEpVek0xZEVoNmRtUnVWMFYzUkZGWlNrdHZXa2xvZG1OT1FWRkZURUpS\nUVhkS2FrVlRUVUpCUjBFeFZVVUtRM2hOU21JelFteGliazV2WVZkYU1FMVNRWGRFWjFsRVZsRlJS\nRVYzWkhsaU1qa3dURmRPYUUxQ05GaEVWRWw0VFVSSmVVNUVRVEpOUkVFd1RteHZXQXBFVkUxNFRV\nUkplVTFxUVRKTlJFRXdUbXh2ZDBwcVJWTk5Ra0ZIUVRGVlJVTjRUVXBpTTBKc1ltNU9iMkZYV2pC\nTlVrRjNSR2RaUkZaUlVVUkZkMlI1Q21JeU9UQk1WMDVvVFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwz\nTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUV5VW14VlJuVjBVbUZtVHpRS2FVcFBh\nVTR4YVZvMWNYWmFkMjQ1TUdaNGQwZzVRelF5T0M5MWFHVXZkV2hXVTJOdVVURnVjV3Q0UVd0c2JW\naHlNbmhVVmxsMWJXUmFOREptTmtJeE5nb3dkM0F3TjNWbFYxbHBTMlZPT1VkclprUjVPRlpZUTJS\nTU5raHNkRGxVWVVrd01UQkpUakJUVUVWWldFeDFORmxsSzJoRVRpdHJkR3RoV0V0a1QycG5DbWRO\nTHpOQmMwRlFSM1p5UjNoMlVUa3ZURloxZW5odVkwNUhWVUppTUZnNU1tVnFURWRMVGtoalZITlNU\nSFZtWVdSSFJFOVBibXhYZDJWWkwySmFOa1lLZUZCQ05FVjVhVVJHUVhsbmEwUkVSVFJyT0RkeVNY\naDVZVkpZTkhRMVkwOXpSWFpJZFdOSE5tUXdSekl3U2xRMWMzcHZhV0pwTUN0NVJGcE1kRk51ZFFw\nYWIyWkJTaXREZVRoVloxSndZWE5sYUZjeFpteHNWRklyZURSUVVDODFTbFUxYURWV00ySnlSM0pJ\nVjBwTVFqUnVhemszWm10aVFVTTJiMlZzUkdOWENqbFNlamQwVTFKT1RWRkpSRUZSUVVKdk1FbDNV\nVVJCVDBKblRsWklVVGhDUVdZNFJVSkJUVU5CY1ZGM1JIZFpSRlpTTUZSQlVVZ3ZRa0ZWZDBGM1JV\nSUtMM3BCWkVKblRsWklVVFJGUm1kUlZUTktkRWMzZGtKb1RrWlllREptYzNWbFdHNTNVV0ZoTjNW\nRVdYZEVVVmxLUzI5YVNXaDJZMDVCVVVWTVFsRkJSQXBuWjBWQ1FVbHhNa2xNU1c4NGNVbFpOMXA0\nZERoc04yOUthVzQzY0U1SFZrZ3ZRMDF4Umlzd01GTlpVemQ2VGxBck1GZzBRMU5RUWtrd1dtWllW\nM1Z3Q2s1U1kwVkpTVGxqVW5vME1tczBOVlZTVm1saU5XeFdVR1prY1RSa2NEZG1aSGRKVVdGc04y\nTnNPSEJVVUhJMVpXcG9SbEJGVmpSeFpGY3pWSGRFVkhjS00yOTZZWGc1UmtVM1p5dGxZbEp6Vmtk\nSVlWRlVUVzVDZVRKQmFrVkJZbGxGTkRSWlp6UkJjbWRoWlZGaVNUZGhhMkp6WjNSNlpqQnlUSGg1\nU1RWR1RncHNiMmR5ZUcxV1dFdFJNVkUwYzI1NmVWWndSa05tUW05WFpraFdVMmhUUm1rM2JHUm9S\nV3RsU0ZaQ1ExaHNPVzlYUTI5UUszQmtUalp0UjFsb1dGTlZDbFZVYUd4RVpXcEZNV2x0ZVhGTmVI\nTnhTblJJYjJsdFoxTnJkWE5SVkVWVk1ETXdZVWRrUWtOVWNITXpaM0JPTWtKQmNqVm5SMVpDY0hk\nalJtOHZjazRLT1hKbE1FSk5URTFCU21SSFdGSlVSekJLWmtJNE1XNVVWUzlSUFFvdExTMHRMVVZP\nUkNCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2c9PSIsInZlcmlmaWNhdGlvbiI6e319XX19LCJ0aW1l\nb3V0cyI6e30sInZlcnNpb24iOiIyLjIuMCJ9LCJuZXR3b3JrZCI6e30sInBhc3N3ZCI6e30sInN0\nb3JhZ2UiOnt9LCJzeXN0ZW1kIjp7fX0=" }, "masterVMSize": { "type": "String", "value": "Standard_D8s_v3" }, "numberOfMasters": { "type": "Int", "value": 3 }, "privateDNSZoneName": { "type": "String", "value": "nicpwhecluster." }, "sshKeyData": { "type": "SecureString" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Network", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "privateDnsZones/SRV" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "networkInterfaces" }, { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "privateDnsZones/A" } ] }, { "id": null, "namespace": "Microsoft.Compute", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ "japaneast" ], "properties": null, "resourceType": "virtualMachines" } ] } ], "provisioningState": "Succeeded", "templateHash": "6843960507431905901", "templateLink": null, "timestamp": "2021-02-24T08:02:39.379059+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (3)ワーカーマシンの作成 まず変数をエクスポートします。 $ export WORKER_IGNITION=`cat /home/user01/os45/worker.ign | base64` マニュアルページにある「ワーカーマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに06_workers.jsonというファイルを作成し、コマンドを実行します。 $ az deployment group create -g ${RESOURCE_GROUP} --template-file "/home/user01/os45/06_workers.json" --parameters workerIgnition="${WORKER_IGNITION}" --parameters sshKeyData="${SSH_KEY}" --parameters baseName="${INFRA_ID}" {- Finished .. "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/06_workers", "location": null, "name": "06_workers", "properties": { "correlationId": "f5b06e10-75d0-4768-8546-637a838d11f4", "debugSetting": null, "dependencies": [], "duration": "PT1M45.2779547S", "error": null, "mode": "Incremental", "onErrorDeployment": null, "outputResources": [ { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-1", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-2", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-3", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-1-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-2-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" }, { "id": "/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-3-nic", "resourceGroup": "nicpwhecluster-h8lq5-rg" } ], "outputs": null, "parameters": { "baseName": { "type": "String", "value": "nicpwhecluster-h8lq5" }, "nodeVMSize": { "type": "String", "value": "Standard_D4s_v3" }, "numberOfNodes": { "type": "Int", "value": 3 }, "sshKeyData": { "type": "SecureString" }, "workerIgnition": { "type": "String", "value": "eyJpZ25pdGlvbiI6eyJjb25maWciOnsiYXBwZW5kIjpbeyJzb3VyY2UiOiJodHRwczovL2FwaS1p\nbnQubmljcHdoZWNsdXN0ZXIuYXp1cmUtY2xvdWRwYWstbmljcHRlc3QuY29tOjIyNjIzL2NvbmZp\nZy93b3JrZXIiLCJ2ZXJpZmljYXRpb24iOnt9fV19LCJzZWN1cml0eSI6eyJ0bHMiOnsiY2VydGlm\naWNhdGVBdXRob3JpdGllcyI6W3sic291cmNlIjoiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm\nLTg7YmFzZTY0LExTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVVJGUkVO\nRFFXWnBaMEYzU1VKQlowbEpVek0xZEVoNmRtUnVWMFYzUkZGWlNrdHZXa2xvZG1OT1FWRkZURUpS\nUVhkS2FrVlRUVUpCUjBFeFZVVUtRM2hOU21JelFteGliazV2WVZkYU1FMVNRWGRFWjFsRVZsRlJS\nRVYzWkhsaU1qa3dURmRPYUUxQ05GaEVWRWw0VFVSSmVVNUVRVEpOUkVFd1RteHZXQXBFVkUxNFRV\nUkplVTFxUVRKTlJFRXdUbXh2ZDBwcVJWTk5Ra0ZIUVRGVlJVTjRUVXBpTTBKc1ltNU9iMkZYV2pC\nTlVrRjNSR2RaUkZaUlVVUkZkMlI1Q21JeU9UQk1WMDVvVFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwz\nTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUV5VW14VlJuVjBVbUZtVHpRS2FVcFBh\nVTR4YVZvMWNYWmFkMjQ1TUdaNGQwZzVRelF5T0M5MWFHVXZkV2hXVTJOdVVURnVjV3Q0UVd0c2JW\naHlNbmhVVmxsMWJXUmFOREptTmtJeE5nb3dkM0F3TjNWbFYxbHBTMlZPT1VkclprUjVPRlpZUTJS\nTU5raHNkRGxVWVVrd01UQkpUakJUVUVWWldFeDFORmxsSzJoRVRpdHJkR3RoV0V0a1QycG5DbWRO\nTHpOQmMwRlFSM1p5UjNoMlVUa3ZURloxZW5odVkwNUhWVUppTUZnNU1tVnFURWRMVGtoalZITlNU\nSFZtWVdSSFJFOVBibXhYZDJWWkwySmFOa1lLZUZCQ05FVjVhVVJHUVhsbmEwUkVSVFJyT0RkeVNY\naDVZVkpZTkhRMVkwOXpSWFpJZFdOSE5tUXdSekl3U2xRMWMzcHZhV0pwTUN0NVJGcE1kRk51ZFFw\nYWIyWkJTaXREZVRoVloxSndZWE5sYUZjeFpteHNWRklyZURSUVVDODFTbFUxYURWV00ySnlSM0pJ\nVjBwTVFqUnVhemszWm10aVFVTTJiMlZzUkdOWENqbFNlamQwVTFKT1RWRkpSRUZSUVVKdk1FbDNV\nVVJCVDBKblRsWklVVGhDUVdZNFJVSkJUVU5CY1ZGM1JIZFpSRlpTTUZSQlVVZ3ZRa0ZWZDBGM1JV\nSUtMM3BCWkVKblRsWklVVFJGUm1kUlZUTktkRWMzZGtKb1RrWlllREptYzNWbFdHNTNVV0ZoTjNW\nRVdYZEVVVmxLUzI5YVNXaDJZMDVCVVVWTVFsRkJSQXBuWjBWQ1FVbHhNa2xNU1c4NGNVbFpOMXA0\nZERoc04yOUthVzQzY0U1SFZrZ3ZRMDF4Umlzd01GTlpVemQ2VGxBck1GZzBRMU5RUWtrd1dtWllW\nM1Z3Q2s1U1kwVkpTVGxqVW5vME1tczBOVlZTVm1saU5XeFdVR1prY1RSa2NEZG1aSGRKVVdGc04y\nTnNPSEJVVUhJMVpXcG9SbEJGVmpSeFpGY3pWSGRFVkhjS00yOTZZWGc1UmtVM1p5dGxZbEp6Vmtk\nSVlWRlVUVzVDZVRKQmFrVkJZbGxGTkRSWlp6UkJjbWRoWlZGaVNUZGhhMkp6WjNSNlpqQnlUSGg1\nU1RWR1RncHNiMmR5ZUcxV1dFdFJNVkUwYzI1NmVWWndSa05tUW05WFpraFdVMmhUUm1rM2JHUm9S\nV3RsU0ZaQ1ExaHNPVzlYUTI5UUszQmtUalp0UjFsb1dGTlZDbFZVYUd4RVpXcEZNV2x0ZVhGTmVI\nTnhTblJJYjJsdFoxTnJkWE5SVkVWVk1ETXdZVWRrUWtOVWNITXpaM0JPTWtKQmNqVm5SMVpDY0hk\nalJtOHZjazRLT1hKbE1FSk5URTFCU21SSFdGSlVSekJLWmtJNE1XNVVWUzlSUFFvdExTMHRMVVZP\nUkNCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2c9PSIsInZlcmlmaWNhdGlvbiI6e319XX19LCJ0aW1l\nb3V0cyI6e30sInZlcnNpb24iOiIyLjIuMCJ9LCJuZXR3b3JrZCI6e30sInBhc3N3ZCI6e30sInN0\nb3JhZ2UiOnt9LCJzeXN0ZW1kIjp7fX0=" } }, "parametersLink": null, "providers": [ { "id": null, "namespace": "Microsoft.Resources", "registrationPolicy": null, "registrationState": null, "resourceTypes": [ { "aliases": null, "apiProfiles": null, "apiVersions": null, "capabilities": null, "defaultApiVersion": null, "locationMappings": null, "locations": [ null ], "properties": null, "resourceType": "deployments" } ] } ], "provisioningState": "Succeeded", "templateHash": "18038938870077969594", "templateLink": null, "timestamp": "2021-02-24T08:19:00.447842+00:00", "validatedResources": null }, "resourceGroup": "nicpwhecluster-h8lq5-rg", "tags": null, "type": "Microsoft.Resources/deployments" } (4)クラスターへのログイン ocコマンドにてクラスタにログインします。 $ export KUBECONFIG=/home/user01/os45/auth/kubeconfig $ oc whoami system:admin (5)マシンの証明書署名要求の承認 まずマスターに認識されるすべてのノードを一覧表示します。まだワーカーマシンが表示されていません。 $ oc get nodes NAME STATUS ROLES AGE VERSION nicpwhecluster-h8lq5-master-0 Ready master 21m v1.18.3+e574db2 nicpwhecluster-h8lq5-master-1 Ready master 21m v1.18.3+e574db2 nicpwhecluster-h8lq5-master-2 Ready master 21m v1.18.3+e574db2 保留中の証明書署名要求 (CSR) でいくつか「Pending」になっていることを確認します。 $ oc get csr NAME AGE SIGNERNAME REQUESTOR CONDITION csr-4ltzq 21m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-5ff59 22m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-8cxlk 22m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued csr-d79hz 21m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-2 Approved,Issued csr-ghhrm 22m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-1 Approved,Issued csr-jtts9 7m15s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-m68ns 7m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-vgtp6 7m2s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-wwptz 21m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-0 Approved,Issued$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approvecertificatesigningrequest.certificates.k8s.io/csr-jtts9 approved certificatesigningrequest.certificates.k8s.io/csr-m68ns approved certificatesigningrequest.certificates.k8s.io/csr-vgtp6 approved 再度マスターに認識されるすべてのノードを一覧表示し、ワーカーマシンがReadyになっていることを確認します。 $ oc get nodes NAME STATUS ROLES AGE VERSION nicpwhecluster-h8lq5-master-0 Ready master 24m v1.18.3+e574db2 nicpwhecluster-h8lq5-master-1 Ready master 25m v1.18.3+e574db2 nicpwhecluster-h8lq5-master-2 Ready master 24m v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-1 Ready worker 2m2s v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-2 Ready worker 2m6s v1.18.3+e574db2 nicpwhecluster-h8lq5-worker-japaneast-3 Ready worker 2m v1.18.3+e574db2 (6)ブートストラップリソースを削除 これですべてのノードが作成されて利用可能となりましたので、ブートストラップノードと関連するリソースを削除します。 $ ./openshift-install wait-for bootstrap-complete --dir=/home/user01/os45/ --log-level info INFO Waiting up to 20m0s for the Kubernetes API at https://api.nicpwhecluster.:6443... INFO API v1.18.3+e574db2 up INFO Waiting up to 40m0s for bootstrapping to complete... INFO It is now safe to remove the bootstrap resources INFO Time elapsed: 0s $ az network nsg rule delete -g ${RESOURCE_GROUP} --nsg-name ${INFRA_ID}-nsg --name bootstrap_ssh_in $ az vm stop -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap About to power off the specified VM... It will continue to be billed. To deallocate a VM, run: az vm deallocate. $ az vm deallocate -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap $ az vm delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap --yes $ az disk delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap_OSDisk --no-wait --yes $ az network nic delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-nic --no-wait $ az storage blob delete --account-key ${ACCOUNT_KEY} --account-name ${CLUSTER_NAME}sa --container-name files --name bootstrap.ign $ az network public-ip delete -g ${RESOURCE_GROUP} --name ${INFRA_ID}-bootstrap-ssh-pip (7)クラスターのインストールを完了する $ ./openshift-install --dir=/home/user01/os45/ wait-for install-complete INFO Waiting up to 30m0s for the cluster at https://api.nicpwhecluster.: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=/home/user01/os45/auth/kubeconfig' INFO Access the OpenShift web-console here: https://console-openshift-console.apps.nicpwhecluster. INFO Login to the console with user: "kubeadmin", and password: "<パスワード>" INFO Time elapsed: 1s (8)ログイン $ oc login -u kubeadmin -p  <パスワード>https://api.nicpwhecluster.:6443 The server uses a certificate signed by an unknown authority. You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n): yLogin successful.You have access to 58 projects, the list has been suppressed. You can list all projects with 'oc projects'Using project "default".    

2021年06月08日

【てくさぽBLOG】WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編-

こんにちは。 てくさぽBLOGメンバーの岡田です。 今回はIBM WebSphere Hybrid Edition(以下 WSHE)の導入をAzure上で検証してみたので3回シリーズで検証で得られた知見をお伝えします。 当初は以前実施したIBM Cloud Pak for Applications(以下CP4Apps)導入検証をプラットフォームをAzureに変えて検証する予定で進めていたのですが、CP4Appsが販売終了となり後継としてWSHEが発表されたので内容を変更し、WSHEをAzure上で検証することにしました。 今回は3回シリーズの1回目です。 WebSphere Hybrid Editionを導入してみた Vol.1 -OpenShift導入編- *本編 WebSphere Hybrid Editionを導入してみた Vol.2 -WebSphere Liberty導入編- WebSphere Hybrid Editionを導入してみた Vol.3 -ツール編-   1.はじめに 以前、CP4Apps導入検証の際にはAWS上にUser Provisioned Infrastructure(以下、UPI)方式でOpenShift4(以下、OCP4)を構築してみましたが、今回はAzure上でもUPI方式で行ってみました。 なお、筆者はAzure未経験だったので何箇所かつまづきましたが、初心者はこんなところでつまずくんだなあ、と思って読んでいただけると幸いです。 手順は以下を参考にしました。 1.7. ARM テンプレートを使用したクラスターの AZURE へのインストール https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.5/html/installing_on_azure/installing-azure-user-infra OCP4導入後にWSHEのコンポーネントを導入する予定のため、OCP4のバージョンは4.5を利用しました。(現在はOCP4.5~4.7までサポートされていますが、検証当時はOCP4.5のみサポートでした。) 今回の環境・サーバー構成の概要図は以下となります。Bootstrapを除くと計6ノード構成になります。   2. 事前準備 2-1. 作業用Linux環境準備 OpenShiftのインストール作業に必要なLinux環境を準備します。 今回の作業環境は以下になります。 環境:手元のPC(Windows 10 1909)上にWindows Subsystem for Linux(WSL)+Ubuntu 18.04 実行ユーザー:user01を作成 (1)作業用ディレクトリとして以下2つのディレクトリを作成 /home/user01/os45      ※OpenShift インストールプログラム置き場 /home/user01/os45/conf  ※yamlやjsonなどの設定ファイル置き場 (2)Azure CLIインストール (3)jqパッケージインストール (4)cloudctlインストール (5)ocコマンドインストール 以下の手順でダウンロードします。 ・Red Hat Custmer Portalにログインします。「ダウンロード」をクリックし、次の画面で"Red Hat OpenShift Container Platform"をクリックします。 ・次の画面でバージョン4.5の最新バージョンを選択し、画面下から”OpenShift v4.5 Linux Client"を/home/user01/os45フォルダにダウンロードし、ファイルを解凍し、パスの通っている/user/local/binフォルダに移動します。   2-2. ファイルの準備 (1)OCP4.5インストールファイルのダウンロード ・ocコマンドをダウンロードしたのと同じページで”OpenShift v4.5 Linux Installer"を/home/user01/os45フォルダにダウンロードします。 (2)Pull Secretファイル Red Hat OpenShift Cluster Manager サイトの「Pull Secret」ページから、インストールプルシークレットを/home/user01/os45フォルダにダウンロードします。   2-3. パブリックDNSゾーン設定 (1)リソースグループを作成 まずリソースグループを作成します。今回は「ocp-cluster」という名前のリソースグループを作成しました。 次の画面のタグは特に設定せずに進み、確認画面で「作成」ボタンをクリックします。 (2)App Serviceドメインを作成 今回は「azure-cloudpak-nicptest.com」という名前で作成しました。事前にレジストラからドメイン名を購入せずに作成できるかやってみましょう。 【連絡先情報】を入力します。 ドメインのデプロイが完了したら、nslookupやdigコマンドで確認しました。正しく引けたので、無事ドメインが作成できたようです。別途ドメイン名を用意しておかなくてもよかったです。 〈つまづきポイント:その1〉DNSドメインが正しく作成されない 連絡先情報の”州または準州”の箇所に、最初は”Tokyo-to"と入力してドメインを作成たところ、以下のエラー画面となり正常に作成されませんでした。 原因は”Tokyo-to”と入力した箇所でした。一旦既に作成されていたリソースを削除し、再作成の際に”Tokyo"と入力することで無事ドメインが作成できました。以下は再作成で成功した画面です。 〈つまづきポイント:その2〉Azure アカウント制限は拡張する必要がある? 参考にしたマニュアルにはvCPUの「デフォルトの Azure 制限」がリージョン毎に20、説明に”デフォルトのクラスターには 40 の vCPU が必要であるため、アカウントの上限を引き上げる必要があります。”と書いてあったので引き上げないといけないと思い込みサポートに事情を説明しリクエストしました。ところが、サポートからの回答は契約したサブスクリプションではデフォルトの制限は350コアで必要数は最初から超えているとのことでした。 Azure Portal の [サブスクリプション] ページの [使用量 + クォータ] セクションで確認できると教えてもらいましたので、皆さんもAzure上でOpenShift構築を実施する前には一度確認してみてください。   2-4. サービスプリンシパルの作成 そもそもサービスプリンシパルとはなんでしょう?Azure初心者の私もよく分からず、調べた結果、「Azureリソースを管理・操作するアプリケーションのためのアカウント」とのことでした。 今回はAzure Resource Managerでリソースが構築されるので、そのための専用アカウントと理解しました。 以下を実施します。 (1)Azureへのログイン(az login) (2)アクティブなアカウントの詳細を表示して「tenantId」「id」を確認 (3)アカウントのサービスプリンシパルを作成し「appId」「password」を確認 (4)サービスプリンシパルに追加パーミッションを付与 (4-1)User Access Administrator ロールを割り当て (4-2)Azure Active Directory Graph パーミッションを割り当て (5)パーミッション要求を承認   3.OpenShift 導入 3-1. SSH秘密鍵の作成 クラスタの作成後に、ノードにアクセスするためにSSH秘密鍵を作成します。 (1)作業用Linuxマシン上でgenコマンドを実行しSSHキーを作成 (2)ssh-agent プロセスをバックグラウンドタスクとして開始 (3)SSH プライベートキーを ssh-agent に追加   3-2. インストールファイルの作成 (1)install-config.yaml ファイル生成 (2)ARM テンプレートの一般的な変数のエクスポート (3)クラスターの Kubernetes マニフェストを生成 (4)コントロールプレーン、ワーカーノードを定義する Kubernetes マニフェストファイルを削除 (5)Kubernetes マニフェストファイルを変更 (6)変数のエクスポート (7)Ignition 設定ファイルを取得 (8)ファイルの確認   3-3. Azure リソースグループおよびアイデンティティーの作成 OCPクラスタのインストールに必要なリソースグループとアイデンティティーを作成します。 (1)リソースグループを作成 (2)リソースグループの Azure アイデンティティーを作成 (3)Contributor ロールを Azure アイデンティティーに付与 (3-1)ロール割当に必要な変数をエクスポート (3-2)Contributor ロールをアイデンティティーに割り当て   3-4. RHCOS クラスターイメージおよびブートストラップ Ignition 設定ファイルのアップロード (1)Azureストレージアカウントの作成 (2)ストレージアカウントキーを環境変数としてエクスポート (3)VHD の URL を環境変数にエクスポート (4)選択した VHD を blob にコピー (5)blob ストレージコンテナーを作成し、生成されたbootstrap.ignファイルをアップロード   3-5. DNSゾーンの作成 (1)プライベートDNSゾーンを作成   3-6. Azure での VNet の作成 (1)デプロイメントを作成 (2)VNet テンプレートをプライベート DNS ゾーンにリンク   3-7. RHCOS クラスターイメージのデプロイ (1)RHCOS VHD blob URL を変数としてエクスポート (2)クラスターイメージのデプロイ   3-8.ネットワークおよび負荷分散コンポーネントの作成 (1)ネットワークオブジェクトおよびロードバランサーのデプロイ (2)変数のエクスポートとクラスターを既存のパブリックゾーンに追加 以上で、OCPノードを作成する手前まで完了しました。   3-9.ノードの作成 (1)ブートストラップマシンの作成 (2)コントロールプレーンの作成 (3)ワーカーマシンの作成 (4)クラスターへのログイン (5)マシンの証明書署名要求の承認 (6)ブートストラップリソースを削除 (7)クラスターのインストールを完了する (8)ログイン クラスタにログインできたのでインストールは成功です! 長かったですね、最初のディレクトリ作成から数えて計50工程がようやく終わりました。   まとめ いかがでしたでしょうか。やはりUPIは作業工程が多くて大変でした。 記載のとおり、Azureでの確認や設定で何箇所かつまづきましたが、コマンドを実行していくところはマニュアル記載のコマンドでエラーなく進めることができました。 もっと簡単にOCP環境を構築したいのであればIPI(Installer Provisioned Infrastructure)方式もありますが、構成をカスタマイズしたくてUPI方式を選択することもあるかと思いますので、その際にこの記事が参考になればと思います。 ここまでお読みいただきありがとうございました。 次回は構築したこのOpenShift上でのWebSphereをインストールしてみた内容をお伝えいたします。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

2021年06月04日

【てくさぽBLOG】IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた

こんにちは。 てくさぽBLOGメンバーの村上です。 本ブログは、IBM Power Virtual Server をトライしてみた内容や感想をご紹介するブログです。 シリーズ化していますので、まずインデックスのご紹介をします。 インデックス ・IBM Power Virtual ServerでAIX環境を作ってみた ・IBM Power Virtual ServerのAIX環境にSWを導入してみた  ・IBM Power Virtual ServerのAIX環境を日本ロケールにしてみた ← 本ページ ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.1) ・IBM Power Virtual ServerのAIX環境をバックアップしてみた(Part.2) ・IBM Power Virtual ServerのAIX環境とIBM Cloud x86環境を接続してみた   本ページでは Power Virtual Server のAIX環境を日本ロケールにする手順を以下の1)、2)のセクションに分けてご紹介します。 1)  事前確認 2)  ロケールの変更 利用したクライアント端末(私のPC)は、Windows10 バージョン2004です。   1) 事前確認 現在のロケールを確認します。 # locale LANG=en_US LC_COLLATE="en_US" LC_CTYPE="en_US" LC_MONETARY="en_US"  LC_NUMERIC="en_US" LC_TIME="en_US" LC_MESSAGES="en_US" LC_ALL= 「en_US」になっています。「英語」環境ですね。 「英語」環境を「日本」環境に変更する前に、日本語のパッケージがAIXにインストールされているかを確認します。 # locale -a C POSIX JA_JP.UTF-8 JA_JP Ja_JP.IBM-943 Ja_JP en_US.8859-15 en_US.IBM-858 en_US.ISO8859-1 en_US ja_JP.UTF-8 上記の出力より、おなじみの日本語の文字コード ・JA_JP:UTF-8 ・Ja_JP:IBM-943 がインストールされていることが分かりました。 Power Virtual Server サービスを東京リージョン上に作成したので、標準で日本語がインストールされているんでしょうね。 AIXといえば、IBM-943 の Shift-JIS というイメージがありませんか?! 私が基盤SEをしていた頃は IBM-943 を設定することが多かった気がするのですが、近年は UTF-8 をよく目にするので、 今回は JA_JP:UTF-8 を設定します。 2)ロケールの変更 ロケールの変更は、smit で 実施します。 # smit lang ・「Change/Show Primary Language Environment」で Enter を押します。 ・「Change/Show Cultural Convention, Language, or Keyboard」で Enter を押します。 ・「Primary CULTURAL convention」で F4 を押します。 ・リストから「UTF-8  Japanese [JA_JP]」を選択し、Enter を押します。 ・「Primary LANGUAGE translation」で F4  を押します。 ・リストから「UTF-8  Japanese [JA_JP]」を選択し、Enter を押します。 ・「INPUT device/directory for software」で F4 を押します。 ・リストから「/usr/sys/inst.images」を選択し、Enter を押します。 ・すべての設定を確認して Enter を押します。 数分待つとOKが出ます。これでロケールの変更が完了です。 ・設定を反映させるために、AIX環境を再起動します。 # shutdown -Fr AIX環境が起動しているかは WEBのポータル画面で確認できます。 ・インスタンスの「状況」が「アクティブ」になっていればOSが起動しています。 ・AIX環境にログインし、ロケールが変更できていることを確認します。 # locale LANG=JA_JP LC_COLLATE="JA_JP" LC_CTYPE="JA_JP" LC_MONETARY="JA_JP" LC_NUMERIC="JA_JP" LC_TIME="JA_JP" LC_MESSAGES="JA_JP" LC_ALL= JA_JP:UTF-8に変更できました! smit の出力が日本語になったか確認しておきます。 # smit 日本語で表示されるようになりました! 日本語のsmit。落ち着きます。 ソフトウェアを導入する前に日本語化しておけばよかったです。。 ※ソフトウェアを導入したブログはこちら 【やってみた】IBM Power Virtual Server のAIX環境にSWを導入してみた   次のブログでは、AIXインスタンスのバックアップ手順をご紹介します。 【やってみた】IBM Power Virtual Server のAIX環境をバックアップしてみた Part.1   最後に テレワークが本格的になり、あっという間に1年が経過しました。 1年前は、Power Virtual Server は私にとって全く身近でなく、お客様からの問い合わせも殆どありませんでしたが、今はぐっと身近なクラウドになり、問い合わせ件数は確実に増加しています。 アフターコロナではどんな生活様式が当たり前になっているのか、まだ全く想像できませんが、変化の速い Power Virtual Server の1年後も想像できません。 ただ、Power Virtual Server が AIX や IBM i ユーザの更改先として有力候補になってくる日は近いだろうなと感じます。   お問い合わせ この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp  

1 2 3 4 5 6 13
back to top