特集・ブログ
こんにちは。 てくさぽ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
こんにちは。 てくさぽ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
IBM Power Systems は企業情報システムの中心的存在です。 設置面積はコンパクトなのに、抜群の信頼性とパフォーマンスを発揮。止められない基幹業務を数多く担っています。セキュリティ脅威への対策など、管理負荷の高い x86サーバーに比べると運用に手がかからないという利点もあり、このシステムへの継続投資は理にかなっています。 ただし、IBM Power Systems に精通したエンジニアが減少傾向にあるのは事実で、かつ、日本では今さらなる DX推進が求められています。こうした理由から、エンドユーザー企業はシステム更改時に抜本的な環境刷新を検討するかもしれません。 そうした中、IBM Power Virtual Server はお客様が時代にキャッチアップし、IBM Power Systems上の資産を今後も維持していただくのに最適な選択肢です。 このホワイトペーパーをダウンロードして、内容を詳しくご覧ください。 ホワイトペーパーダウンロード ホワイトペーパー目次 IBM Cloudと連携して利用できるIBM Power Systems IBM Power Virtual Serverの3つの活用例 IBM Power Virtual Server提案上の注意点 エヌアイシー・パートナーズがエンドユーザー企業への提案を強力にサポート ホワイトペーパーダウンロード .anchor{ display: block; margin-top:-25px; 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 ; }
企業が利用するクラウドサービスは、これまでの情報系システムだけでなく基幹システムでの採用実績も増えています。 クラウドサービスを活用している企業は、より大きな価値を生み出すために、複数ベンダのパブリッククラウド、プライベートクラウド、オンプレミス、エッジコンピューティングを連携し活用しています。 一方で、様々な ITプラットフォームが混在することでシステム運用の煩雑さを生み、それぞれの環境でアプリケーションの開発・運用・管理の方法が異なることにより、サービス提供するまでの俊敏性や運用の効率性が損なわれてしまう、という課題があります。 この課題を解決する2021年のテクノロジー・トレンドワードとして最注目されているのが、「分散クラウドコンピューティング(以下 分散クラウド)」です。 そこで本記事では、「分散クラウド」とそれを実現する「IBM Cloud Satellite」について解説します。 Index 2021年の最注目トレンド「分散クラウド」に期待される効果 IBMの分散クラウドサービス「IBM Cloud Satellite」 「IBM Cloud Satellite」の主要なユースケース ビジネス機会を逃していませんか?NI+C Pなら提案・サポートが可能です この記事に関するお問い合わせ 関連情報 2021年の最注目トレンド「分散クラウド」に期待される効果 既にパブリッククラウドを利活用している企業のよくある課題には、主に以下が挙げられます。 法規制やコンプライアンス遵守のためオンプレミスにデータ保持する必要がある ネットワークの遅延時間増加により、データとアプリケーションを近い場所に置く必要がある 複数のパブリッククラウドを利用した場合、個々のクラウド環境毎での運用が必要となるため、運用効率が悪く運用コストがかかってしまう オンプレミス側でも、パブリッククラウドと同等スピードでの新技術を導入し利用したい これら、多くのクラウドユーザーが抱えている課題を解決するためのテクノロジーとして、今最も注目されているのが「分散クラウド」です。 分散クラウドとは、パブリッククラウドのサービスを、オンプレミスや他のパブリッククラウド環境といった異なる物理的な場所で分散稼働させながら、「サービスの運用」や「ガバナンス」、「クラウドの進化」、「ライフサイクル管理」、「セキュリティ・信頼性・エンジニアリング」については、パブリッククラウド・プロバイダの責任のもとで利用するクラウドの利用形態のことを指します。 例えば、複数の環境で同一のアプリケーションを展開している場合、物理的に多くの場所で稼働していることによってアプリケーションの修正反映といった「俊敏性」が失われる、という課題があります。 これに対して、分散クラウドを導入することにより、複数の環境にアプリケーションを稼働する場合であってもパブリッククラウドと同じ使い勝手でアプリを迅速に開発し、リリースすることが可能になります。 また、分散クラウドではオンプレミス環境でも稼働できるため、自社所有のハードウェア上にデータを保持することで、外部にデータを保管するためのデータ保護の考慮が不要になります。 同様に、同一ロケーション内でデータを処理できるため、社外へのデータ転送がなくネットワークの遅延時間の制約を受けにくい、などの効果をもたらします。 運用面においても、クラウドベンダに依存しない一貫したアプリケーション稼働基盤となるため、インフラ層とアプリ層の運用を分離してアプリ層に注力した運用の統一化を可能にするだけでなく、オンプレ環境であっても利用量に応じた課金モデルで利用することができます。 また、分散クラウドベンダにより、随時新しい技術に更新されて利用可能となるため、運用スキルが乏しい機能であっても容易に使い始めることができるのも大きなメリットです。 このように、分散クラウドを活用することで、パブリッククラウドを活用する上での様々な課題が解決できるだけでなく、オンプレミス環境の利点も享受できるようになるのです。 IBMの分散クラウドサービス「IBM Cloud Satellite」 今、企業が抱えている課題を解決するために必要となる分散クラウドの導入を迅速に実現するのが、IBM が提供する分散クラウドサービス「IBM Cloud Satellite」です。 IBM Cloud Satelliteはフルマネージドのクラウドサービスで、IBM Cloudの様々なサービスを任意の場所で稼働させ、as-a-serviceとしてパブリッククラウドの単一の管理画面で提供します。 また、Kubernetes と Red Hat OpenShift をコアテクノロジーとしているため、デプロイ先に Red Hat OpenShift があれば、オンプレミス、パブリッククラウド、エッジなどの環境を問わず自由に展開することが可能です。 IBM Cloud Satellite の主な特長には以下が挙げられます。 パブリッククラウド・オンプレミスといった、複数の環境に導入した IBM Cloud Satellite上で稼働するコンテナアプリケーションを、IBM Cloud のコントロールプレーンで一元管理し、場所によらない一貫したサービスの稼働 セキュリティ・コンプライアンスの課題により、オンプレミス環境から移動できないデータや画像・動画といった大容量のデータ処理をする場合に、データを移動させず IBM Cloud の機能をマネージドサービスとして、データがある環境で利用可能 5Gやエッジを活用するような新しいワークロードの処理をローカル環境で実施することができるため、レイテンシが軽減でき、アプリケーションやエッジを容易に大量展開できる これらの特長が示す通り、オンプレミス、エッジ、パブリッククラウドなど、あらゆる環境で、いつでも・どこでも、一貫した環境をスピーディー、かつ、容易に提供・管理することができるのです。 図1. 「IBM Cloud Satellite」とは 「IBM Cloud Satellite」の主要なユースケース 次に、「IBM Cloud Satellite」の主要なユースケースをご紹介しましょう。 1.場所によらない一貫したサービスの稼働 自社のデータセンター内であれば、ハードウェア、ソフトウェア、アプリケーションのスタックは統一できますが、複数のパブリッククラウドも含めた環境のように、異なる基盤上で同じスタックを稼働することは簡単ではありません。 特に、パブリッククラウドを利用したマルチクラウド/ハイブリッドクラウド環境であればなおさら困難です。 しかし、運用管理の負担を軽減するためにシステム構成スタックを統一したい、という強い要件があるのも事実です。 IBM Cloud Satellite を利用することで、オンプレミス、複数のパブリッククラウドを組み合わせた基盤上で、Cloud Satellite、および OpenShift とその上で稼働するアプリケーションという、同一のスタックでアプリケーションやサービスを稼働させることが可能となり、設定の共通化・ワークロードの一元管理ができるようになります。 これにより、アプリケーション品質の均質化、リリース回数の増加、サービスの市場投入速度の短縮化が実現でき、利便性向上や顧客満足度向上にも繋がります。 さらに運用の観点では、スタックを共通化することで、運用の共通化に伴う運用コストの削減、問題発生時の切り分けが容易になります。 2.移動できないデータの処理 個人情報をはじめとしたセキュリティ・コンプライアンスの課題により、「オンプレミス環境から移動できないデータをクラウドサービスの機能を使って処理したい」というケースや、医療機関や工場におけるセンサーデータや画像データを活用した機械学習モデルを利用した分析処理など、「大量のデータを処理する時にデータを移動すると処理が間に合わない」ケースにおいては特定の場所以外ではデータを保持することができません。 これらのケースで威力を発揮するのが、IBM Cloud Satellite です。 IBM Cloud Satellite を利用することで、オンプレミス環境においても IBM Cloud の機能を活用することができるため、データ保護の観点で守るべき法規制の遵守と、クラウドサービスで様々な分析機能を利用した高度な分析の実行を両立することができます。 また、データ処理を行うアプリケーションとデータが近くに存在するため、処理にかかる時間を最小化することが可能になります。 今までデータ分析のためにクラウドにデータをアップロード、あるいは加工したデータをダウンロードしていた場合には、この操作がなくなるだけではなく、クラウドからデータを転送するための時間や費用を最小化することができます。 これによって、処理するデータの幅を広げるとともに処理時間を短縮することができるため、より多くの分析処理の実行や洞察を素早く得た上で次のアクションを決定することができるようになります。 3.新しいワークロードの処理 「5G」や「エッジコンピューティング」に代表される新しいテクノロジーは、これを活用することで大量のデバイスから発生するデータを処理し、自動車の自動運転や IoT機器を活用したリアルタイムでの分析を可能にします。 一方で、これらの処理においてはトラフィックをデータの発生元にできるだけ近い場所に集約し処理する機器 (エッジ) を利用することで、レイテンシを軽減することを基本とするシステムの稼働が求められます。 エッジは、その特性から数ヵ所のデータセンターに集約するのではなく、広い範囲に分散して配置する必要があります。 そのため、様々な場所に同じシステムを同じ形で提供し運用する必要がありますが、実現することは簡単ではなく多大なコストを要します。 こういった環境で威力を発揮するのが、IBM Cloud Satellite です。 エッジに、IBM Cloud Satellite を利用した OpenShift環境を配置し、アプリケーションを一元的に管理・更新することができるようになるため、運用管理にかかるコストを減らすことができます。 また、クラウドの特長を取り込んだ機能追加が迅速にできるため、ビジネスニーズに合わせたシステムの実現が可能になります。 ビジネス機会を逃していませんか? NI+C Pなら提案・サポートが可能です アプリケーションの迅速な構築とあらゆる場所での実行・一元管理を可能にする分散クラウドソリューション「IBM Cloud Satellite」に関するご提案、およびセキュリティに関する貴社取り組みについて、お悩みやご相談事項があればお気軽にエヌアイシー・パートナーズへお問い合わせください。 この記事に関するお問い合わせ エヌアイシー・パートナーズ株式会社 企画本部 事業企画部 この記事に関するお問い合せは以下のボタンよりお願いいたします。 お問い合わせ 関連情報 IBM Cloud Satellite (製品情報) - あらゆる環境で一貫したアプリケーションの構築、展開、実行ができます。 .btn_B{ height:25px; } .btn_B a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; 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 #eb6100; transition: all 0.5s ease; } .btn_B a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .bigger { font-size: larger; }
こんにちは。 てくさぽ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
日本企業が未来のために進むべき道の1つとして、DXがあります。 ただしその一方で、こうした業務のデジタライゼーションがデータ爆発を加速させていることも確かです。 重要な資産であるデータを格納するストレージは容量がひっ迫しがちになり、パフォーマンスの劣化やその回避策に苦慮している企業は多いことでしょう。データが増えるとバックアップ運用の難易度も上がります。 また、ストレージは業務システムごとに部分最適で導入される傾向があり、管理工数という点でもコストという点でも負荷の高さが課題でした。本格的な DR対策も長年の懸案事項です。 加えて、企業の収益向上に資するデータ分析や AI活用も求められています。 スピード経営を実現するためにコンテナ技術を取り入れたい、と構想する企業も増えてきました。 本記事では、まだまだストレージの機能を使いこなせていないというエンドユーザー企業の悩みに応えるために、企業情報システムのストレージ戦略の中核テクノロジーとして活躍する「IBM Spectrum Scale」をご紹介します。 Index ストレージ課題で悩む企業への解決策は、IBM Spectrum Scale 短期間で構築可能なアプライアンス:IBM Elastic Storage System こんなシチュエーションで活かせます ビジネス機会を逃していませんか?NI+C Pなら提案・サポートできます この記事に関するお問い合わせ 関連情報 ストレージ課題で悩む企業への解決策は、IBM Spectrum Scale IBM Spectrum Scale は、企業情報システムのデータ戦略の中核に位置付けるにふさわしいスケールアウト型のストレージ・ソフトウェアであり、エンタープライズ・データ・サービスです。 これによって様々なストレージ課題を解決できます。 その構成は、クライアントに対する窓口の役目を果たし、NFS/SMB/オブジェクトプロトコルに対応するプロトコルノードと、共有ディスク・アクセスを直接行うNSDサーバーからなります。 また、ストレージはそのバックエンドのストレージプールにおいて共用可能な状態で提供されます。 図1. IBM Spectrum Scale は、多様なデータのハブとなるエンタープライズ・データ・サービス プロトコルノードと NSDサーバーは、利用形態に合わせて柔軟に増減できます。 ストレージ上のファイルにアクセスするクライアントが増えるのならプロトコルノードを増やす、データ量が増えたなら NSDサーバーを増設するといった具合に、どんどんスケールアウトしていくことが可能です。 あらためて IBM Spectrum Scale の特長を紹介すると、次のようになります。 1. バックアップ効率化やDR対策として活用できる拠点間連携機能 IBM Spectrum Scale には Active File Management (以下、AFM) と呼ばれる機能があり、複数拠点間で非同期コピーを自動で実現します。データがすべてを選択することも可能で、一部に絞ることもできます。 また、キャッシュはリードオンリー、リード/ライト、DR など、様々なモードが選択可能です。 2.担当者を手作業管理から解放するデータ階層化機能 これは、データの自動振分け機能です。 IBM Spectrum Scale は、フラッシュ、SSD、SAS、SATA、 NL-SAS といった異なった種類のストレージを混在させてファイルシステムを構成することができます。 そのため、高頻度にアクセスされるデータは高速ストレージに、アクセス頻度の低いデータは低速ストレージに、といったデータの適材適所の保存を苦もなく実現。ストレージのみならず、テープやクラウドとも自動連携可能 (テープとの連携は別途ソフトウェアが必要) です。 ユーザーは、どのストレージプール上にファイルがあるか を意識する必要がなく、データが移動しても同じ操作でアクセスが可能です。これによって、ストレージ担当者はデータ保管先を管理する作業から完全に解放されます。 3.高い拡張性とパフォーマンス 拡張性・パフォーマンスに優れたファイルシステムです。 プロトコルノードは最大16,384ノードまで拡張可能。格納できるファイルの上限数は9千兆個で、最大ファイルシステム・サイズは8 エクサバイト。つまり、800万テラバイトに上ります。 これだけの容量があれば、ほとんどのケースでストレージ容量の上限に悩まされることなく、リニアに拡張性を追求していくことができます。 パフォーマンスという観点でも、ブロックサイズ単位で分散並列I/O が可能な一方で、最大16MiBの大容量ファイルにも対応。2.5テラバイト/secという高いスループットもすでに実証されており、高速処理が求められるシステムに適用可能です。 4.多様なプロトコル対応で全体最適のデータ戦略を後押し プロトコルノードの追加により、Windows環境の CIFS、SMB、UNIX環境の NFS、オブジェクトの HTTPS、Hadoop の HDFS など、様々なプロトコルでのファイルアクセスが可能です。 そのため、異なるプロトコルが混在する企業情報システムであってもそれぞれを "サイロ化" させず、部分最適ではなく全体最適の観点でストレージ活用が可能になります。 5.ビジネススピードを加速させるOpenStack対応 KVMホストに Spectrum Scale Client をインストールすることで、IBM Spectrum Scale は OpenStack のバックエンドストレージとしても活用できます。 Copy on Write機能により、インスタンス/ボリューム の高速な作成や容量の効率的な使用が可能。複数ホストでファイルシステムを共有できるため、Live Migration を行いたいなどというときも、データのコピーを行うことなく短時間で切り替えられます。 6.分析結果をよりスピーディーに活用できるHDFS対応 Hadoop はオープンソースで大量のテキストデータを分散処理によって高速に処理可能な主要技術ですが、分析対象となるデータを配置するファイルシステム HDFS はそのままではデータの格納庫として利用できません。 分析結果の利用先システムが分析対象データの発生元システムのデータを利用するにはデータコピー作業が必要になり、ストレージを別に用意しなければなりません。 しかし IBM Spectrum Scale なら、分析対象データの発生元システムが Hadoop で利用する IBM Spectrum Scale 上のディレクトリにデータを直接書き込みさえすれば、分析結果の利用先システムはデータを直接読むことができます。 これは、分析結果をそれだけ早く現場で活用できることを意味し、DX推進につながります。 短期間で構築可能なアプライアンス: IBM Elastic Storage System IBM Spectrum Scale は Software Defined Storage であるため、プロトコルノードや NDSサーバーを自由に選択したり、既存のサーバーを有効活用できる、という利便性があります。 その稼働環境も、IBM AIX®、Red Hat Linux、SUSE Linux Enterprise Server、Microsoft Windows Server、Microsoft Windows、IBM z Systems™と幅広いため、企業のシステム環境に合わせて選択できる自由があります。 しかし、エンドユーザーであるお客様によってはそれがかえって面倒と感じられるかもしれません。 その場合は、アプライアンスとして提供される IBM Elastic Storage System がお勧めです。 幅広いラインナップがそろっており、ハードウェア構築、ソフトウェア導入およびテストを工場で事前に実施。お客様サイトには、ラックにマウント可能な状態で搬入できます。 お客様は当初から利用に専念でき、保守およびサポート窓口が一本化されるため、自ら障害切り分けに動く必要もありません。 こんなシチュエーションで活かせます Case 1. バックアップ運用の効率化に AFM機能を利用します。 全拠点の全ファイルを、本社データ・センターで集中管理します。IT担当者のいない遠隔地拠点では、バックアップ運用は行わず本社データ・センター側でまとめて実施します。遠隔地拠点では、よく使うファイルだけがキャッシュされるようにします。 拠点内であるため、高速なアクセスが実現します。 図2. AFM機能を利用した本社・遠隔地拠点間連携 Case 2. AI分析基盤として IBM Spectrum Scale は、データ蓄積のために求められるストレージ要件を満たしています。 それは、「多様なシステムと連携可能なプロトコル対応」「分散したデータを集約する遠隔地連携機能」「高いコストパフォーマンス」です。また、データ分析のために求められるストレージ要件にも合致しています。 それらは、「処理性能に合わせた分散処理機能とスケーラビリティ」「高い性能を引き出すオールフラッシュ・ストレージとの連携機能」「ハイブリッド・クラウド環境でのデータ連携機能」で、これらの点から、深層学習の基盤などとしても最適の環境です。 Case 3. アーカイブ自動化で ストレージプールを、ゴールド、シルバー、ブロンズと階層化します。 階層化に使用できるファイル属性には「最後にファイルアクセスがあった日時」「最後にファイル修正があった日時」「ファイルセット名」「ファイル名 / ファイル拡張子名」「ファイルサイズ」「ユーザーID / グループID」「ファイルアクセス頻度(ファイルヒート)」があり、これらに基づいてポリシーを策定。 Gold にあるデータがポリシーの閾値を超えたらシルバーに移動、またそこで閾値を超えたらブロンズに移動させます。そして、ブロンズで365日間アクセスがなかった場合はファイルシステムから削除。逆に、2日未満の間隔でアクセスがあったらシルバーに移動、などといった具合に、アーカイブ自動化により絶え間ないデータ循環が実現します。 Case 4. 増え続ける大容量データへの対応に 生命科学研究の最前線ではゲノム解析が進んでおり、そこでは膨大なデータが発生します。 10人分の全ゲノムで1テラバイトボリュームのデータになるといい、さらに解析を付加することでデータ容量はますます膨らんでいきます。 こうした指数関数的なデータ増加に対しても、800万ペタバイトまで拡張可能な IBM Spectrum Scale であれば、余裕を持ってシステム構築を行えます。 ビジネス機会を逃していませんか? NI+C Pなら提案・サポートできます エヌアイシー・パートナーズ (NI+C P) は、1990年代に IBM Spectrum Scale の前身である GPFS が登場したときから、進化を長く見守ってきました。そのため、この技術については深く熟知しているという自信があります。 提案先のストレージ担当者が何か課題を抱えておられるようなら、ぜひ、その情報を共有してください。ともに解決策を模索しましょう。 ひょっとすると、IBM Spectrum Scale はソフトウェア製品であるために全体像がつかみにくいかもしれません。そのような場合には、弊社の検証環境設備で実際に製品の動作を見ながらご相談にのることも可能です。 データを企業資産ととらえ、全社ストレージ戦略を立案したい情報システム部門と、それを支えたいパートナーの皆様のお力になれると思います。お気軽にお声がけください。 この記事に関するお問い合わせ エヌアイシー・パートナーズ株式会社 企画本部 事業企画部 この記事に関するお問い合せは以下のボタンよりお願いいたします。 お問い合わせ 関連情報 データ爆発時代が生んだ、“手間レス”オールフラッシュストレージ (コラム) - オンプレミス・ストレージとクラウド・ストレージ、適材適所で使い分けるには… 「壊れにくく、処理速度が落ちない」IBM FlashSystem の特長とラインナップを徹底解説 (コラム) - レイテンシ―が低く高速であることが最大の利点。加えて、データ圧縮などによるストレージ基盤の効率化やマルチベンダー・マルチクラウドへの対応など… .btn_B{ height:25px; } .btn_B a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; 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 #eb6100; transition: all 0.5s ease; } .btn_B a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .bigger { font-size: larger; }
多くの企業はこれまでも様々なセキュリティ製品を導入し、対策に注力してきました。それにもかかわらず、セキュリティ事故が増え続けています。 (さらに…)
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".
こんにちは。 てくさぽ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
企業の保有するデータが、指数関数的に増加しています。 業務のデジタル化が進み帳票などをデジタルデータで保有するようになっただけでなく、現在は画像や動画など、文字列データに比べて格段に容量の大きいデータを多用しています。 また、IoT の進展や POSレジの普及などから、企業はビッグデータの取得が容易になり、これらを活用した AI分析も本格的に始まろうとしています。そのため、こうしたデータを格納するストレージの重要性は高まる一方です。 今日は、"クラウドへのリフト&シフト" が提唱され、理論的には無限の拡張性を備えるクラウドへストレージ環境も軸足を移していこう、という潮流も見受けられます。 しかし、すべてのデータをクラウドに移せるわけではありません。セキュリティ、パフォーマンス、コスト増に対して、一抹の懸念があることも事実だからです。 こうしたことを考え合わせると、現時点での最良策はオンプレミス・ストレージとクラウド・ストレージを適材適所で使い分ける、ということになります。 本記事では、当分オンプレミス・ストレージ中心という企業にも、ハイブリッド・ストレージ化を進めていきたいという企業にも最適な、オールフラッシュストレージ「IBM FlashSystem 5200」についてご紹介します。 Index オンプレミス+クラウドの使い分け、しかし、安易な二刀流では運用が煩雑に ハイブリッドストレージを実現するIBM FlashSystem 5200 企業ストレージ環境のハブになるIBM FlashSystem 5200 豊富なIBM製品の知識と提案サポートで課題解決を支援 この記事に関するお問い合わせ 関連情報 オンプレミス+クラウドの使い分け、しかし、 安易な二刀流では運用が煩雑に これまでオンプレミス・ストレージとクラウド・ストレージ間の連携は、企業でのシステムインテグレーションに委ねられてきました。 そのため、どのようなデータをオンプレミス・ストレージで蓄積しどのようなデータをクラウド・ストレージへ送るか、といった設計だけならともかく、これを実現する開発も自ら行わなければなりませんでした。 また、データ運用のあり方は事業環境の変化に合わせてタイムリーに更新する必要があります。そこで従来は、こうした業務に工数もかかりコストもかかっていたというわけです。 エンドユーザー企業の IT部門に所属するストレージ担当者は、こうした仕事に疑念を抱くことなく取り組んでいます。 しかし IT部門の本来の仕事というのは、企業の経営戦略にそったシステム戦略の立案や実現で、そこに多くの時間を割くためできるかぎり日々の運用管理からは解放されるのが理想です。 この理想と現実のギャップに気づけていないエンドユーザー企業は意外と多く、テクニカルパートナーにとっては提案のポイントになります。 ハイブリッドストレージを実現するIBM FlashSystem 5200 かけがえのないデータ資産を持ち、オンプレミスとクラウドの双方でストレージ環境を徹底的に活用したいエンドユーザー企業にとって、高性能で信頼をおけるハードウェア・ストレージは企業規模のストレージエコシステムの中核として配置するのに最も適した存在です。 IBM FlashSystemシリーズは、IBM が特許を持つ高速かつ長寿命のフラッシュモジュール (FlashCore モジュール、以下FCM) を特長とするオールフラッシュストレージです (概要やラインナップについては、こちらのコラムをご参照ください)。 なかでも新製品 IBM FlashSystem 5200は、2021年10月9日に販売終了となるエントリーモデル IBM FlashSystem 5100 の後継機種です。 ついに 1U化を実現、価格もオールフラッシュでありながらかなりリーズナブルに入手可能になりました。"速いストレージが欲しいけれど、オールフラッシュは高嶺の花でとても手が出ない" とあきらめていたストレージ担当者にこそ、ぜひ知っていただきたいモデルです。 それでは、改めて IBM FlashSystem 5200 の特長を見ていきましょう。 特長1. 19インチラック 1U サイズのコンパクトな筐体 図1. IBM FlashSystem 5200 筐体イメージ〔Storwize V5030 (SAS HDD x 24)との比較〕 この薄さが何よりのニュースです。1Uとなったことにより、筐体スペースが50%以上削減できます。 これはそのままサーバ室やデータセンターでのラック本数削減に直結し、オフィス空間の有効活用やデータセンターコストダウンにつながっていきます。 そしてこの薄い筐体の中に、最大物理容量460TB、データ圧縮機能、重複排除機能を活用すれば、最大容量1.7PB まで格納できます。企業内に散在する膨大な業務データ、IoTデータ、POSデータなどを一元的に収めるデータレイク環境とすることも可能です。 筐体が薄いため活用シーンも広がっていきます。 例えば、エッジコンピューティング。 製造業では、部品や食材などの不良品検出を多くの作業員が目視で行ったり、非常に高価かつ大型の専用機を導入したりしているケースがあります。 しかし、この方法では、コストがかかるだけでなく、新しいタイプの不良品に追随しにくいなど、精度についても限界があります。筐体が薄く高性能なオールフラッシュストレージ、それに、AIによる画像認識技術を組み合わせれば、この仕事を肩代わりできるかもしれません。 IBM FlashSystem 5200 には、"現場におけるストレージ" として幅広い可能性があります。 特長2. 圧倒的なパフォーマンス 非常に高速で、データが増えてもパフォーマンス劣化が起きにくい。それが、IBM FlashSystem 5200 のパフォーマンスを表す表現です。 End-to-End で NVMe に対応しているため、フラッシュドライブへのアクセスがより高速化し、低遅延になりました。 応答時間は 70マイクロ秒未満。つまり、0.00007秒未満というスピードで、End-to-End NVMe だからこそ実現できる高速処理を享受いただけます。 高いパフォーマンスを実現する理由には、BM独自の FCM を採用していることもあります。 FCMはまた、ハードウェア・テクノロジーでデータ圧縮を実現、ストレージのコントローラに負荷をかけることなくデータボリュームを縮小します。 そのため、処理速度を維持できるというのも大きな特長です。 こうして圧倒的なパフォーマンスを発揮することによって1台で多様な業務をカバーするとともに、ビジネススピードの向上や DX の実現も期待できます。 その一方で、IBM FlashSystem 5200 は FCM オンリーのオールフラッシュとしない活用法も可能です。 低遅延・ハイパフォーマンスな Storage Class Memory SSDドライブ、SAS Flashドライブ、NL-SAS HDD との混在が可能なので、アクティブなデータは FCMに、非アクティブなデータはそれ以外に、といった1台の中で使い分けることもできるため、用途ごとにそれぞれストレージを用意するといった面倒な運用から解放されます。 特長3. 管理負担の徹底軽減 IBM FlashSystem 5200 は、オンプレミス・ストレージとクラウド・ストレージを適材適所で使い分けるハイブリッド・ストレージ時代に対応します。 ストレージ仮想化ソフトウェアとして IBM Spectrum Virtualize を搭載しており、これが核となって、様々な角度からそのストレージ運用管理の負担を軽減します。 ハイブリッド・ストレージ化が容易 IBM Cloud や AWS では IBM Spectrum Virtualize for Public Cloud が搭載可能で、IBM FlashSystem 5200 上の IBM Spectrum Virtualize と連携させることで、オンプレミス環境からクラウド環境へのデータ移行が簡単に行えます。(図2) 図2. IBM Spectrum Virtualize をベースとしたデータのクラウド連携 IBM Spectrum Virtualize と IBM Spectrum Virtualize for Public Cloud は、ほぼ同じ UI、ほぼ同じ操作で利用できます。 これにより、クラウド上のストレージも効率的に運用管理が可能です。 ストレージ・システムの仮想化をサポート 他社製ストレージを含む 500 を超えるストレージ・システムを仮想化できます。 システムごとにストレージが分散している場合、個々のストレージで使用率は大きく異なります。基本的にほかのストレージのリソースは共有不可であるため、ほかのストレージ容量にどんなに空きがあっても、満杯に近くなったストレージに対して個別にストレージの容量拡張が必要です。 しかし、IBM Spectrum Virtualize を利用すれば各システムのストレージに対して十分な仮想ボリューム・イメージを提供でき、そのデータ量の増加にともなう保守・拡張作業は、IBM Spectrum Virtualize のストレージ・プール側で一括して行えます。そこに物理的な容量制限はありません。 このストレージ仮想化は高レベルなデータ圧縮機能を利用できることもあり、ストレージ・リソース利用率の最大化にもつながっていきます。 データ最適配置機能がパフォーマンス向上に貢献 IBM Easy Tier と呼ばれるデータの最適配置機能があり、データアクセスをモニターしてアクセス履歴を解析することで、よくアクセスされる有用性の高いデータとあまりアクセスされていない休眠データをツールが判断。 FCM から HDD の低速ディスクまで5種類のディスクから最大3階層間でデータを自動的に再配置します。 これは、ストレージ運用管理を簡素化するというだけでなくホットなデータのみを自動的に高速ストレージ上に配置できるため、ストレージのパフォーマンス向上に貢献します。 こうした IBM Spectrum Virtualize の様々な管理削減機能により、ストレージ担当者は日々のルーチン業務から解放され、戦略立案やシステム企画といった本来の業務に時間を割けるようになるというわけです。 企業ストレージ環境のハブになるIBM FlashSystem 5200 IBM FlashSystem 5200 は、「オンプレミス・ストレージ利用が中心」というニーズ、「今後ハイブリッド・ストレージを推進していきたい」というニーズ、そのどちらにも応えられるハードウェア・ストレージの最新形です。 これがいわばハブの役割を果たして、重要な企業資産であるデータの柔軟なオンプレミス⇔クラウド間移動、オンプレミス・ストレージの活用最大化を、"手間レス" で実現します。 しかも、冒頭で触れたとおり本体価格のコストパフォーマンスも非常に高くなっており、"いつかはオールフラッシュストレージを" と希望されていたエンドユーザー企業へターゲットを広げるのに格好の製品といえます。 豊富なIBM製品の知識と提案サポートで課題解決を支援 エヌアイシー・パートナーズは、IBMハードウェア製品やソフトウェア製品をはじめ、マルチベンダー製品・ソリューションの取り扱いにより、幅広く製品・ソリューションの提案を得意としています。 その一方で、ディストリビューターの立場を生かし、パートナー企業様、また、その先のエンドユーザー企業様に寄り添いながら課題解決に繋がるよう努めています。 私たちはパートナー様に、より売りやすくなる支援、スキル習得の支援、ビジネス領域を拡げていただく支援を提供したいと願っています。 エンドユーザー企業への IBM FlashSystem 5200 の提案を検討するにあたり、何か気になること、不足の情報やお困りのことがあれば、ぜひ、ご相談ください。 この記事に関するお問い合わせ エヌアイシー・パートナーズ株式会社 企画本部 事業企画部 この記事に関するお問い合せは以下のボタンよりお願いいたします。 お問い合わせ 関連情報 IBM ストレージ製品 (製品情報) - ストレージ機能のソフトウェア化を実現した SDS製品 (Software Defined Storage) も含め、幅広いラインアップを取りそろえています。 「壊れにくく、処理速度が落ちない」IBM FlashSystem の特長とラインナップを徹底解説 (コラム) - レイテンシ―が低く高速であることが最大の利点。加えて、データ圧縮などによるストレージ基盤の効率化やマルチベンダー・マルチクラウドへの対応など… ハイブリッドクラウド、最大の課題となる「運用」をクリアする「IBM Spectrum Virtualize for Public Cloud」の実力 (コラム) - ハイブリッドクラウドを実現する「IBM Spectrum Virtualize for Public Cloud」。具体的に何ができるのか? ハイブリッド・クラウド運用&AWS最適化 -IBM Spectrum Virtualize for Public Cloud活用完全ガイド- (ホワイトペーパー) - 「IBM Spectrum Virtualize for Public Cloud」で、ハイブリッド・クラウドの効率的な管理が可能に。さらに、AWS環境単体での活用においても大きなメリットも。 .btn_B{ height:25px; } .btn_B a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; 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 #eb6100; transition: all 0.5s ease; } .btn_B a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .bigger { font-size: larger; }