特集・ブログ

全て

2021年07月26日

IBM Power SystemsユーザーをDXへと導く<IBM Power Systems Virtual Server>

IBM Power Systems は、企業情報システムの中心的存在です。 設置面積はコンパクトなのに、抜群の信頼性とパフォーマンスを発揮。止められない基幹業務を数多く担っています。 セキュリティ脅威への対策など、管理負荷の高い x86サーバーに比べると運用に手がかからないという利点もあり、このシステムへの継続投資は理にかなっています。 ただし、IBM Power Systems に精通したエンジニアが減少傾向にあるのは事実で、かつ、日本では今さらなる DX推進が求められています。 こうした理由から、エンドユーザー企業はシステム更改時に抜本的な環境刷新を検討するかもしれません。 そうした中、IBM Power Systems Virtual Server はお客様が時代にキャッチアップし、IBM Power Systems上の資産を今後も維持していただくのに最適な選択肢です。 このホワイトペーパーをダウンロードして、内容を詳しくご覧ください。   ホワイトペーパー目次 IBM Cloudと連携して利用できるIBM Power Systems IBM Power Systems Virtual Serverの3つの活用例 IBM Power Systems Virtual Server提案上の注意点 エヌアイシー・パートナーズが、エンドユーザー企業への提案を強力にサポート    

2021年07月19日

2021年、最注目のトレンド・キーワード「分散クラウド」を紐解く!

企業が利用するクラウドサービスは、これまでの情報系システムだけでなく基幹システムでの採用実績も増えています。 クラウドサービスを活用している企業は、より大きな価値を生み出すために、複数ベンダのパブリッククラウド、プライベートクラウド、オンプレミス、エッジコンピューティングを連携し活用しています。 一方で、様々な 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 (製品情報) - あらゆる環境で一貫したアプリケーションの構築、展開、実行ができます。  

2021年07月06日

第二回:【やってみた】WebSphere Hybrid Editionを導入してみた:WebSphere Liberty導入編

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

2021年06月18日

“増えて消せない”データのために描く、企業規模のストレージ戦略

日本企業が未来のために進むべき道の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 Spectrum Scale (製品情報) - グローバル・スケールで大容量データへの高速アクセスを実現します。 IBM Spectrum Archive (製品情報) - ユーザーやアプリケーションによるテープ・ドライブ上のファイルやディレクトリーへのダイレクト・アクセスを実現します。 データ爆発時代が生んだ、“手間レス”オールフラッシュストレージ (コラム) - オンプレミス・ストレージとクラウド・ストレージ、適材適所で使い分けるには… 「壊れにくく、処理速度が落ちない」IBM FlashSystem の特長とラインナップを徹底解説 (コラム) - レイテンシ―が低く高速であることが最大の利点。加えて、データ圧縮などによるストレージ基盤の効率化やマルチベンダー・マルチクラウドへの対応など…  

2021年06月16日

厳しくなる個人情報保護法への対応は大丈夫? 〜クラウドシフトで、データセキュリティ対策の必要性が高まる理由とは〜

多くの企業はこれまでも様々なセキュリティ製品を導入し、対策に注力してきました。それにもかかわらず、セキュリティ事故が増え続けています。 (さらに…)

2021年06月08日

【やってみた】WebSphere Hybrid Edition導入してみた:OpenShift導入編

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

2021年06月08日

【やってみた】WebSphere Hybrid Edition導入してみた:OpenShift導入編 (手順詳細)

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

2021年06月08日

データ爆発時代が生んだ、“手間レス”オールフラッシュストレージ

企業の保有するデータが、指数関数的に増加しています。 業務のデジタル化が進み帳票などをデジタルデータで保有するようになっただけでなく、現在は画像や動画など、文字列データに比べて格段に容量の大きいデータを多用しています。 また、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環境単体での活用においても大きなメリットも。  

2021年06月04日

【やってみた】IBM Power Virtual Server のAIX環境を日本ロケールにしてみた

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

2021年05月26日

【やってみた】IBM Power Virtual Server のAIX環境にSWを導入してみた

こんにちは。 てくさぽBLOGメンバーの 村上です。 本ブログは、 IBM Power Systems Virtual Server をトライしてみた内容や感想をご紹介するブログです。   シリーズ化していますので、まずインデックスのご紹介をします。 インデックス ・【やってみた】IBM Power Virtual Server でAIX環境を作ってみた ・【やってみた】IBM Power Virtual Server のAIX環境にSWを導入してみた ← 本ページです ・【やってみた】IBM Power Virtual Server のAIX環境を日本ロケールにしてみた ・【やってみた】IBM Power Virtual Server のAIX環境をバックアップしてみたPart.1 ・【やってみた】IBM Power Virtual Server のAIX環境をバックアップしてみたPart.2 ・【やってみた】IBM Power Virtual Server のAIX環境と IBM Cloud x86環境を接続してみた   本ページは Power Virtual Server のAIXインスタンスを作成し終わったところからのご紹介となり、以下の③~⑤のセクションをご紹介します。 1)  Power Virtual Server サービスの作成 2)  AIXインスタンス 作成 3)  AIXインスタンス 接続 4)  ストレージ・ボリュームの反映 5)  ソフトウェア導入 利用したクライアント端末(私のPC)は、Windows10 バージョン2004です。 3) AIXインスタンス接続 「2) AIXインスタンス作成」で作成したインスタンスに接続し、AIX環境にログインします。 <IBM Cloud からログアウトした状態からの説明です> ・IBM Cloud にログインし、画面左上の四本線「ナビゲーションメニュー」をクリックし、下部に表示される「リソース・リスト」をクリックします。      ・「Services」にPower Virtual Server のサービスが表示されますので、サービス名をクリックしてAIXインスタンス一覧の画面に移動します。 ※上記の出力例は、Power Virtual Server と同じタイミングで Watson Studio の検証も行っていたので、Watson Studioも「Services」に表示されています。 ・インスタンス名がリンクになっているので「AIX72-test」をクリックします。 インスタンスの詳細の画面に移動しました。 ・「サーバー詳細」の画面の右上にある「VMアクション」のプルダウンから「コンソールのオープン」を選択します。 ・AIXのコンソールが表示されます。 ・初期状態は、root ユーザでログインできてしまいます。 root ユーザでのログインはセキュリティ的に問題があるため、ログイン可能なAIXユーザを作成しパスワードを設定します。 そして、root ユーザではログインできないように設定変更しておきます。 ※ユーザ作成とroot ユーザの設定変更手順は省きます Power Virtual Server のポータルのコンソールは一定時間利用しないとタイムアウトになって接続が切れてしまいます。また、フォントや画面サイズを変更できないため出力が複数行に分かれてしまい使いにくいです。 そのため、次は、Power Virtual Serverのポータルのコンソールではなく、Tera Termや PuTTY などのターミナル・エミュレータ・ソフトウェアを利用してAIX環境にログインする方法を試します。 外からの接続になるので「外部IP」を利用します。 ・「ネットワーク・インターフェース」の項目に記載がある「外部IP」をコピーします。 以下はTeraTerm を使用した出力例です。 ・「ホスト」にコピーした外部IPをペーストし、プロトコルは「SSH」 を選択して「OK」をクリックします。 ・作成したユーザとユーザに設定したパスワードを入力し「OK」をクリックします。 外部IPを利用してAIX環境へのログインができました。 外部IPからの接続はパブリックネットワーク接続となり、イメージ図で表すと以下の赤線です。 ※上記の画像はIBMCloud柔らか層本(IBMサイト)から一部を抜粋しています。 (Version3.1_20210517 版) 4) ストレージ・ボリュームの反映 さて、この後、AIXインスタンスにソフトウェアを導入するので、ストレージ容量が足りなくなるかもしれません。ストレージ容量を増やしておきます。 「【やってみた】IBM Power Virtual Server でAIX環境を作ってみた」のブログで記載しましたが、AIXインスタンスは初期で20GBがrootvgにアサインされており、初期状態で既に15GB程度がシステムによって使用されているため、空き領域が5GB程度と少なくなっています。 インスタンス作成時に追加したストレージ・ボリューム「stg01」は、まだどの Volume Groupにも属しておらず、すぐに利用できる状態ではありません。 そのため、「stg01」をディスク領域として見えるように設定します。 ・「接続されているボリューム」の「stg01」を「ブート可能」にするため「オフ」の部分をクリックします。 ・確認画面になりますので「はい」をクリックします。 ブート可能設定に成功したメッセージが出力されます。 ・「ブート可能」のステータスが「オン」になっていることを確認します。 ・AIXインスタンスへログインし、物理ボリュームを認識させるコマンドを入力ます。 # cfgmgr ・設定前に現在のrootvg の容量を確認しておきます。 # lsvg rootvg 5,472MBの空きがあり、rootvg の容量は20GB(20,448MB)です。 ・ AIXインスタンスに認識されているPVを確認し、どのVGにも属していないhdisk0 を rootvg に割り当てます。 # lspv # extendvg rootvg hdisk0 ・再度「# lspv」コマンドを入力し、hdisk0がrootvgに追加されたことを確認します。 # lspv ・実際に容量が変更されたか確認します。 # lsvg rootvg 20GBだった rootvgに 10GBの「stg01」を追加したので、容量が30GB(30,656MB) になり、空き容量も15,680MBに増えました。 5) ソフトウェア導入 では、AIXインスタンスにソフトウェアを導入してみます。 簡単に導入できるコンパイラー「XL C/C++ v16.1(IBMサイト)」を入れることにしました。 XL C/C++導入作業前にやっておいたこと ・「システム前提条件」を読んでおきます ・XL C/C++ソフトウェアをダウンロードします。ソフトウェアは「60日間のFreeトライアル版」を利用しました。 ・XL C/C++ソフトウェアをAIX環境へ転送するツールをインストールしておきます。私はWinSCPをダウンロードしました。コマンドプロンプトでSFTP転送を実施してもOKです。 ・AIX環境上にXL C/C++ソフトウェアを展開して保管するためのファイルシステムを作成します(1GBの/work というファイルシステムを作成しました)。 ----------------------------------------------------------------------------------------------------------------------------------------------- ソフトウェア導入前のAIX環境の確認と設定を行います。 ・OSレベルの確認(サポートされているレベルか確認) # oslevel -s 7200-05-01-2038 ・必須ファイルセットの確認(ファイルセットが導入されているか確認) # lslpp -L bos.adt.include bos.adt.lib bos.adt.libm bos.loc.\* bos.rte bos.rte.libc ・導入先「/opt」ファイルシステムの拡張(500MBの空きが必要) # df -m /opt Filesystem    MB blocks      Free %Used    Iused %Iused Mounted on /dev/hd10opt     384.00     41.54   90%    11471    52% /opt # chfs -a size=+500M /opt Filesystem size changed to 1835008 # df -m /opt Filesystem    MB blocks      Free %Used    Iused %Iused Mounted on /dev/hd10opt     896.00    553.46   39%    11471     9% /opt 「/opt」ファイルシステムが41.54MBの空き容量だったので、500MB 拡張しました。 ・ローカルPCにダウンロードしておいたXL C/C++ソフトウェアを、AIX環境にアップロードします。アップロード先は事前に作成したファイルシステム/work です。 ファイル転送はWinSCPを利用して行いました。 ・AIX環境へのファイル転送が完了したら、AIX上で圧縮ファイルを解凍(展開)します。 # cd /work # ls -al total 564784 drwxrwxrwx    3 root     system          256 Jan 25 03:51 . drwxr-xr-x   21 root     system         4096 Jan 11 20:26 .. -rw-r--r--    1 fumi     grp01     289164548 Jan 07 00:05 IBM_XL_C_CPP_V16.1.0.0_AIX_EVAL.tar.Z drwxr-xr-x    2 root     system          256 Jan 25 03:44 lost+found # uncompress IBM_XL_C_CPP_V16.1.0.0_AIX_EVAL.tar.Z  # ls -al | grep XL -rw-r--r--    1 fumi     grp01     307650560 Jan 07 00:05 IBM_XL_C_CPP_V16.1.0.0_AIX_EVAL.tar # tar -xvf IBM_XL_C_CPP_V16.1.0.0_AIX_EVAL.tar これでソフトウェア導入前の事前準備が整いました。 あとはsmitで XL C/C++ を導入するだけです。 # cd /work/XLC_C/usr/sys # smit install_latest License agreement → YES 簡単に導入できました! ストレージ・ボリュームを追加する手順が Power Virtual Server 独自ではありますが、オンプレミスの環境にストレージを追加することを想像したら・・Power Virtual Server の方が遥かにスピーディーで簡単です。   ところで、ソフトウェアを導入している時に気付いてはいたのですが、なんだか smit が使いにくいと思ったら、smit を英語表記のまま利用していました。久しぶりに smit を使ったのでロケールを日本語化することを忘れていました。 次のブログでは、言語環境(ロケール)を日本語にした手順をご紹介します。↓ 【やってみた】IBM Power Virtual Server のAIX環境を日本ロケールにしてみた   最後に Power Virtual Server のポータルWEB画面は使いやすいですが、あくまでも基盤(IaaS)を用意するまでの支援で、細かい設定はAIX環境内で実施しなくてはいけないことが分かりました。 そして、じっくり読んでいただいた方はお気付きかもしれませんが、XL C/C++ はソフトウェア保管先を含めても1.5GB程度の容量があれば導入できるので、ストレージ・ボリュームを拡張する必要がありませんでした・・。 せっかく追加したストレージ・ボリュームで、かつ、月400円程度(10GB)の課金ではありますが、不要なので削除しました。 必要ないリソースをすぐに削除できるのは、検証環境には大変ありがたい機能です。 ストレージ・ボリューム削除の手順は、また後日アップデートしたいなと思っています。   この記事に関するご質問は下記までご連絡ください。 エヌアイシー・パートナーズ株式会社 技術支援本部 E-Mail:nicp_support@NIandC.co.jp   参考情報 IBM Power Systems Virtual Server (製品情報)    

1 2 3 4 16
back to top