2021年06月

08

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

1.本記事について

本記事は「WebSphere Hybrid Editionを導入してみた Vol.1(OpenShift導入編)」のコマンドの詳細を掲載したものです。
本編をご覧頂きながら、詳しいコマンドや実行結果を本記事でご確認ください。

2. 事前準備

2-1. 作業用Linux環境準備

(1)作業用ディレクトリ作成

(2)Azure CLIインストール
インストール→パスを確認→バージョン確認を実行します。

$ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
$ which az
/usr/bin/az
$ az version
{
 ”azure-cli”: “2.18.0”,
 ”azure-cli-core”: “2.18.0”,
 ”azure-cli-telemetry”: “1.0.6”,
 ”extensions”: {}
}

(3)jqパッケージインストール
yumコマンドでjqパッケージをインストールします。

$ yum -y install epel-release
$ yum -y install jq
$ $ which jq
/usr/bin/jq

(4)cloudctlインストール
ダウンロード→解凍→パスが通った場所に配置します。

$ curl -L https://github.com/IBM/cloud-pak-cli/releases/latest/download/cloudctl-linux-amd64.tar.gz -o cloudctl-linux-amd64.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 160 100 160 0 0 446 0 –:–:– –:–:– –:–:– 446
100 635 100 635 0 0 992 0 –:–:– –:–:– –:–:– 992
100 12.4M 100 12.4M 0 0 4699k 0 0:00:02 0:00:02 –:–:– 7554k$ tar xvf ./cloudctl-linux-amd64.tar.gz
cloudctl-linux-amd64$ sudo mv ./cloudctl-linux-amd64 /usr/local/bin/cloudctl
$ which cloudctl
/usr/local/bin/cloudctl

(5)ocコマンドのインストール

$ tar xvf ./oc-4.5.31-linux.tar.gz
README.md
oc
kubectl$ sudo mv ./oc /usr/local/bin/oc$ which oc
/usr/local/bin/oc

2-2. ファイルの準備

(1)OCP4.5インストールファイルのダウンロード
/home/user01/os45フォルダにダウンロードし、インストールファイルを解凍します。

$ tar xvf openshift-install-linux-4.5.31.tar.gz
README.md
openshift-install

(2)Pull Secretファイル

2-3. パブリックDNSゾーン設定

(1)リソースグループを作成
(2)App Serviceドメインを作成

2-4. サービスプリンシパルの作成

(1)Azureへのログイン(az login)

$ az login
The default web browser has been opened at https://login.microsoftonline.com/common/oauth2/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login –use-device-code`.

WebブラウザでのAzure認証画面でログインします。

(2)アクティブなアカウントの詳細を表示して「tenantId」「id」を確認

$ az account list –refresh
[
 {
  “cloudName”: “AzureCloud”,
  “homeTenantId”: “<tenantId>”,
  “id”: “<ID>”,
  “isDefault”: true,
  “managedByTenants”: [],
  “name”: “<サブスクリプション名>”,
  “state”: “Enabled”,
  “tenantId”: “<tenantId>”,
  “user”: {
  “name”: “admin@xxx.onmicrosoft.com”,
“type”: “user”
}
 }
]

(3)アカウントのサービスプリンシパルを作成し「appId」「password」を確認

$ az ad sp create-for-rbac –role Contributor –name ocp_sp

Changing “ocp_sp” to a valid URI of “http://ocp_sp”, which is the required format used for service principal names Creating ‘Contributor’ role assignment under scope ‘/subscriptions/<id>’ Retrying role assignment creation: 1/36
The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
{
“appId”: “<appId>”,
“displayName”: “ocp_sp”,
“name”: “http://ocp_sp”,
“password”: “<password>”,
“tenant”: “<tenantID>”
}

(4)サービスプリンシパルに追加パーミッションを付与

(4-1)User Access Administrator ロールを割り当て

メモしておいた<appId>をパラメータに利用します。

$ az role assignment create –role “User Access Administrator” –assignee-object-id $(az ad sp list –filter “appId eq ‘<appId>’ ” | jq ‘.[0].objectId’ -r)

{
“canDelegate”: null,
“condition”: null,
“conditionVersion”: null,
“description”: null,
“id”: “/subscriptions/<id>/providers/Microsoft.Authorization/roleAssignments/c02d16cf-c875-4228-99a7-ecfc77d23ff2”,
“name”: “c02d16cf-c875-4228-99a7-ecfc77d23ff2”,
“principalId”: “f56550e6-c2f3-47d1-9e82-be0be7674f9f”,
“principalType”: “ServicePrincipal”,
“roleDefinitionId”: “/subscriptions/<id>/providers/Microsoft.Authorization/roleDefinitions/18d7d88d-d35e-4fb5-a5c3-7773c20a72d9”,
“scope”: “/subscriptions/<id>”,
“type”: “Microsoft.Authorization/roleAssignments”
}

(4-2)Azure Active Directory Graph パーミッションを割り当て

$ az ad app permission add –id <appId> –api 00000002-0000-0000-c000-000000000000 –api-permissions 824c81eb-e3f8-4ee6-8f6d-de7f50d565b7=Role

Invoking “az ad app permission grant –id <appId>–api 00000002-0000-0000-c000-000000000000” is needed to make the change effective

(5)パーミッション要求を承認

$ az ad app permission grant –id <appId> –api 00000002-0000-0000-c000-000000000000

{
“clientId”: “f56550e6-c2f3-47d1-9e82-be0be7674f9f”,
“consentType”: “AllPrincipals”,
“expiryTime”: “2022-02-24T05:15:17.649474”,
“objectId”: “5lBl9fPC0Ueegr4L52dPnzVAb4VRJ4FHiVNygLqyh7c”,
“odata.metadata”: “https://graph.windows.net/<tenantId>/$metadata#oauth2PermissionGrants/@Element”,
“odatatype”: null,
“principalId”: null,
“resourceId”: “856f4035-2751-4781-8953-7280bab287b7”,
“scope”: “user_impersonation”,
“startTime”: “2021-02-24T05:15:17.649474”
}

3.OpenShift 導入

3-1. SSH秘密鍵の作成

(1)作業用Linuxマシン上でssh-keygenコマンドを実行しSSHキーを作成

$ ssh-keygen -t rsa -b 4096 -N ” -f ~/.ssh/id_rsa2
Generating public/private rsa key pair.
Your identification has been saved in /home/user01/.ssh/id_rsa2.
Your public key has been saved in /home/user01/.ssh/id_rsa2.pub.
The key fingerprint is:
SHA256:kKB23rSxmb6ZjQA9eMaLYoXWxsounLQ160TxrOpf2VY user01@A2470
The key’s randomart image is:
+—[RSA 4096]—-+
| . |
| . . . |
| o.. = |
| .+*+o B |
| oo*Bo* SE |
|o.=B.+o . |
|++=o=o.o |
|+=o….* |
|o+oo = . |
+—-[SHA256]—–+

(2)ssh-agent プロセスをバックグラウンドタスクとして開始

$ eval “$(ssh-agent -s)”
Agent pid 3306

(3)SSH プライベートキーを ssh-agent に追加

$ ssh-add ~/.ssh/id_rsa2
Identity added: /home/user01/.ssh/id_rsa2 (/home/user01/.ssh/id_rsa2)

3-2. インストールファイルの作成

(1)install-config.yaml ファイル生成

$ cd /home/user01/os45
$ ./openshift-install create install-config –dir=/home/user01/os45
? SSH Public Key /home/user01/.ssh/id_rsa2.pub ← プロンプトで入力
? Platform azure ← プロンプトで入力
? azure subscription id <id> ← プロンプトで入力
? azure tenant id <tenantId> ← プロンプトで入力
? azure service principal client id <appId> ← プロンプトで入力
? azure service principal client secret [? for help] ******<password>******* ← プロンプトで入力
INFO Saving user credentials to “/home/user01/.azure/osServicePrincipal.json”
INFO Credentials loaded from file “/home/user01/.azure/osServicePrincipal.json”
? Region japaneast ← プロンプトで入力
? Base Domain ← プロンプトで入力
? Cluster Name nicpwhecluster ← プロンプトで入力
? Pull Secret [? for help] ← 事前にダウンロードしたPull Secretを貼り付け ********************************************************************************************

※特に完了のメッセージは表示されません

(2)ARM テンプレートの一般的な変数のエクスポート

$ export CLUSTER_NAME=nicpwhecluster
$ export AZURE_REGION=japaneast
$ export SSH_KEY=””ssh-rsa AAAAB3Nza<以下、省略>””
$ export BASE_DOMAIN=
$ export BASE_DOMAIN_RESOURCE_GROUP=ocp-cluster
$ export KUBECONFIG=/home/user01/os45/auth/kubeconfig

(3)クラスターの Kubernetes マニフェストを生成

$ ./openshift-install create manifests –dir=/home/user01/os45/
“INFO Credentials loaded from file “”/home/user01/.azure/osServicePrincipal.json””
INFO Consuming Install Config from target directory”

(4)コントロールプレーン、ワーカーノードを定義する Kubernetes マニフェストファイルを削除

$ rm -f /home/user01/os45/openshift/99_openshift-cluster-api_master-machines-*.yaml
$ rm -f /home/user01/os45/openshift/99_openshift-cluster-api_worker-machineset-*.yaml

※これらのファイルを削除することで、クラスターが自動的に生成するのを防ぎます。

(5)Kubernetes マニフェストファイルを変更
/home/user01/os45/manifests/cluster-scheduler-02-config.yml を変更し、Pod がコントロールプレーンにスケジュールされないようにします。
manifests/cluster-scheduler-02-config.yml ファイルをエディタで開き、”mastersSchedulable”パラメーターの値を False に設定し、保存、終了します。

(6)変数のエクスポート

$ export INFRA_ID=nicpwhecluster-h8lq5
$ export RESOURCE_GROUP=nicpwhecluster-h8lq5-rg

(7)Ignition 設定ファイルを取得

$ ./openshift-install create ignition-configs –dir=/home/user01/os45/

INFO Consuming OpenShift Install (Manifests) from target directory
INFO Consuming Openshift Manifests from target directory
INFO Consuming Common Manifests from target directory
INFO Consuming Master Machines from target directory
INFO Consuming Worker Machines from target directory

(8)ファイルの確認
os45に生成された”bootstrap.ign”ファイル、”master.ign”ファイル、”metadata.json”ファイル、”worker.ign”ファイルがあることを確認します。

$ ls -al /home/user01/os45
total 91924
drwxrwxr-x 1 user01 user01 4096 Feb 24 15:10 .
drwxr-xr-x 1 user01 user01 4096 Feb 24 15:09 ..
-rw-rw-r– 1 user01 user01 77773 Feb 24 15:10 .openshift_install.log
-rw-r—– 1 user01 user01 1274855 Feb 24 15:10 .openshift_install_state.json
drwxr-x— 1 user01 user01 4096 Feb 24 15:10 auth
-rw-r—– 1 user01 user01 302438 Feb 24 15:10 bootstrap.ign
drwxrwxr-x 1 user01 user01 4096 Feb 24 09:52 conf
-rw-r—– 1 user01 user01 4346 Feb 24 14:47 install-config.yaml.org
-rw-r—– 1 user01 user01 1847 Feb 24 15:10 master.ign
-rw-r—– 1 user01 user01 147 Feb 24 15:10 metadata.json
-rw-r–r– 1 user01 user01 92429691 Feb 12 16:46 openshift-install-linux-4.5.31.tar.gz
-rw-r–r– 1 user01 user01 2779 Feb 12 15:37 pull-secret.txt
-rw-r–r– 1 user01 user01 50 Feb 12 15:37 pull-secret.txt:Zone.Identifier
-rw-r—– 1 user01 user01 1847 Feb 24 15:10 worker.ign

同様に/home/user01/os45/auth内に”kubeadmin-password”と”kubeconfig”があることを確認

user01@A2470:~$ ls -al /home/user01/os45/auth/
total 12
drwxr-x— 1 user01 user01 4096 Feb 24 15:10 .
drwxrwxr-x 1 user01 user01 4096 Feb 24 15:10 ..
-rw-r—– 1 user01 user01 23 Feb 24 15:10 kubeadmin-password
-rw-r—– 1 user01 user01 8992 Feb 24 15:10 kubeconfig

3-3. Azure リソースグループおよびアイデンティティーの作成

(1)リソースグループを作成

$ az group create –name ${RESOURCE_GROUP} –location ${AZURE_REGION}

{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg”,
“location”: “japaneast”,
“managedBy”: null,
“name”: “nicpwhecluster-h8lq5-rg”,
“properties”: {
“provisioningState”: “Succeeded”
},
“tags”: null,
“type”: “Microsoft.Resources/resourceGroups”
}

(2)リソースグループの Azure アイデンティティーを作成

$ az identity create -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity

{
“clientId”: “487b4852-018d-4289-94f7-24db4bef3811”,
“clientSecretUrl”: “https://control-japaneast.identity.azure.net/subscriptions/<id>/resourcegroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/nicpwhecluster-h8lq5-identity/credentials?tid=<tenantId>&oid=f0273f5e-4c1b-4cf4-b3ac-14ad28344d17&aid=487b4852-018d-4289-94f7-24db4bef3811”,
“id”: “/subscriptions/<id>/resourcegroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/nicpwhecluster-h8lq5-identity”,
“location”: “japaneast”,
“name”: “nicpwhecluster-h8lq5-identity”,
“principalId”: “f0273f5e-4c1b-4cf4-b3ac-14ad28344d17”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: {},
“tenantId”: “<tenantID>”,
“type”: “Microsoft.ManagedIdentity/userAssignedIdentities”
}

(3)Contributor ロールを Azure アイデンティティーに付与

(3-1)ロール割当に必要な変数をエクスポート

$ export PRINCIPAL_ID=`az identity show -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity –query principalId –out tsv`
$ export RESOURCE_GROUP_ID=`az group show -g ${RESOURCE_GROUP} –query id –out tsv`

(3-2)Contributor ロールをアイデンティティーに割り当て

$ az role assignment create –assignee “${PRINCIPAL_ID}” –role ‘Contributor’ –scope “${RESOURCE_GROUP_ID}”

{
“canDelegate”: null,
“condition”: null,
“conditionVersion”: null,
“description”: null,
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Authorization/roleAssignments/0b0302ab-9ca5-4b85-a2f3-a0f7c7cded77”,
“name”: “0b0302ab-9ca5-4b85-a2f3-a0f7c7cded77”,
“principalId”: “f0273f5e-4c1b-4cf4-b3ac-14ad28344d17”,
“principalType”: “ServicePrincipal”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“roleDefinitionId”: “/subscriptions/<id>/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c”,
“scope”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg”,
“type”: “Microsoft.Authorization/roleAssignments”
}

3-4. RHCOS クラスターイメージおよびブートストラップ Ignition 設定ファイルのアップロード

(1)Azureストレージアカウントの作成

$ az storage account create -g ${RESOURCE_GROUP} –location ${AZURE_REGION} –name ${CLUSTER_NAME}sa –kind Storage –sku Standard_LRS

Resource provider ‘Microsoft.Storage’ used by this operation is not registered. We are registering for you.
Registration succeeded.
{- Finished ..
“accessTier”: null,
“allowBlobPublicAccess”: null,
“azureFilesIdentityBasedAuthentication”: null,
“blobRestoreStatus”: null,
“creationTime”: “2021-02-24T06:16:35.567172+00:00”,
“customDomain”: null,
“enableHttpsTrafficOnly”: true,
“encryption”: {
“keySource”: “Microsoft.Storage”,
“keyVaultProperties”: null,
“requireInfrastructureEncryption”: null,
“services”: {
“blob”: {
“enabled”: true,
“keyType”: “Account”,
“lastEnabledTime”: “2021-02-24T06:16:35.629673+00:00”
},
“file”: {
“enabled”: true,
“keyType”: “Account”,
“lastEnabledTime”: “2021-02-24T06:16:35.629673+00:00”
},
“queue”: null,
“table”: null
}
},
“failoverInProgress”: null,
“geoReplicationStats”: null,
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Storage/storageAccounts/nicpwheclustersa”,
“identity”: null,
“isHnsEnabled”: null,
“isHnsEnabled”: null,
“kind”: “Storage”,
“largeFileSharesState”: null,
“lastGeoFailoverTime”: null,
“location”: “japaneast”,
“minimumTlsVersion”: null,
“name”: “nicpwheclustersa”,
“networkRuleSet”: {
“bypass”: “AzureServices”,
“defaultAction”: “Allow”,
“ipRules”: [],
“virtualNetworkRules”: []
},
“primaryEndpoints”: {
“blob”: “https://nicpwheclustersa.blob.core.windows.net/”,
“dfs”: null,
“file”: “https://nicpwheclustersa.file.core.windows.net/”,
“internetEndpoints”: null,
“microsoftEndpoints”: null,
“queue”: “https://nicpwheclustersa.queue.core.windows.net/”,
“table”: “https://nicpwheclustersa.table.core.windows.net/”,
“web”: null
},
“primaryLocation”: “japaneast”,
“privateEndpointConnections”: [],
“provisioningState”: “Succeeded”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“routingPreference”: null,
“secondaryEndpoints”: null,
“secondaryLocation”: null,
“sku”: {
“name”: “Standard_LRS”,
“tier”: “Standard”
},
“statusOfPrimary”: “available”,
“statusOfSecondary”: null,
“tags”: {},
“type”: “Microsoft.Storage/storageAccounts”
}

(2)ストレージアカウントキーを環境変数としてエクスポート

$ export ACCOUNT_KEY=`az storage account keys list -g ${RESOURCE_GROUP} –account-name ${CLUSTER_NAME}sa –query “[0].value” -o tsv`

(3)VHD の URL を環境変数にエクスポート
今回はOCP4.5で構築するのでrelease-4.5ディレクトリを指定します。

$ export VHD_URL=`curl -s https://raw.githubusercontent.com/openshift/installer/release-4.5/data/data/rhcos.json | jq -r .azure.url`

(4)選択した VHD を blob にコピー

$ az storage container create –name vhd –account-name ${CLUSTER_NAME}sa –account-key ${ACCOUNT_KEY}

{
“created”: true
}

コピーがスタートしたら、コマンドを実行してステータスを確認します。「Success」なったら完了です。

$ az storage blob copy start –account-name ${CLUSTER_NAME}sa –account-key ${ACCOUNT_KEY} –destination-blob “rhcos.vhd” –destination-container vhd –source-uri “${VHD_URL}”
{
“completionTime”: null,
“id”: “afe1cb0f-9194-40b4-9a6c-d8f25c7b69bd”,
“progress”: null,
“source”: null,
“status”: “pending”,
“statusDescription”: null
}(状況確認コマンド)
$ az storage blob show –container-name vhd –name “rhcos.vhd” –account-name ${CLUSTER_NAME}sa –account-key ${ACCOUNT_KEY} -o tsv –query properties.copy.status
success

(5)blob ストレージコンテナーを作成します。

$ az storage container create –name files –account-name ${CLUSTER_NAME}sa –account-key ${ACCOUNT_KEY} –public-access blob

{
“created”: true
}

続いて、生成されたbootstrap.ignファイルをアップロードします。

$ az storage blob upload –account-name ${CLUSTER_NAME}sa –account-key ${ACCOUNT_KEY} -c “files” -f “/home/user01/os45/bootstrap.ign” -n “bootstrap.ign”

{
“etag”: “00000002-0000-0000-8f3c-b41b770ad701”,
“id”: “/subscriptions/<id>/resourceGroups/ocp-cluster/providers/Microsoft.Network/dnszones/nicpwhecluster.”,
“location”: “global”,
“maxNumberOfRecordSets”: 10000,
“name”: “nicpwhecluster.”,
“nameServers”: [
“ns1-05.azure-dns.com.”,
“ns2-05.azure-dns.net.”,
“ns3-05.azure-dns.org.”,
“ns4-05.azure-dns.info.”
],
“numberOfRecordSets”: 2,
“registrationVirtualNetworks”: null,
“resolutionVirtualNetworks”: null,
“resourceGroup”: “ocp-cluster”,
“tags”: {},
“type”: “Microsoft.Network/dnszones”,
“zoneType”: “Public”
}

3-5. DNSゾーンの作成

(1)プライベートDNSゾーンを作成

$ az network dns zone create -g ${BASE_DOMAIN_RESOURCE_GROUP} -n \${CLUSTER_NAME}.${BASE_DOMAIN}

 {-Finished ..
“etag”: “02474d3c-85a2-4a48-8650-e837ea7df63b”,
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster.”,
“location”: “global”,
“maxNumberOfRecordSets”: 25000,
“maxNumberOfVirtualNetworkLinks”: 1000,
“maxNumberOfVirtualNetworkLinksWithRegistration”: 100,
“name”: “nicpwhecluster.”,
“numberOfRecordSets”: 1,
“numberOfVirtualNetworkLinks”: 0,
“numberOfVirtualNetworkLinksWithRegistration”: 0,
“provisioningState”: “Succeeded”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: null,
“type”: “Microsoft.Network/privateDnsZones”
}

3-6. Azure での VNet の作成

(1)デプロイメントを作成
マニュアルページにある「VNet の ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに01_vnet.jsonというファイルを作成し、コマンドを実行

$ az deployment group create -g ${RESOURCE_GROUP} –template-file “/home/user01/os45/01_vnet.json” –parameters baseName=”${INFRA_ID}”

{- Finished ..
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/01_vnet”,
“location”: null,
“name”: “01_vnet”,
“properties”: {
“correlationId”: “0a44ba18-b094-41b1-9be5-16ae14c50593”,
“debugSetting”: null,
“dependencies”: [
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-nsg”,
“resourceType”: “Microsoft.Network/networkSecurityGroups”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-vnet”,
“resourceType”: “Microsoft.Network/virtualNetworks”
}
],
“duration”: “PT9.5604786S”,
“error”: null,
“mode”: “Incremental”,
“onErrorDeployment”: null,
“outputResources”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
}
],
“outputs”: null,
“parameters”: {
“baseName”: {
“type”: “String”,
“value”: “nicpwhecluster-h8lq5”
}
},
“parametersLink”: null,
“providers”: [
{
“id”: null,
“namespace”: “Microsoft.Network”,
“registrationPolicy”: null,
“registrationState”: null,
“resourceTypes”: [
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “virtualNetworks”
},
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “networkSecurityGroups”
}
]
}
],
“provisioningState”: “Succeeded”,
“templateHash”: “16546001156426103307”,
“templateLink”: null,
“timestamp”: “2021-02-24T06:39:35.707206+00:00”,
“validatedResources”: null
},
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: null,
“type”: “Microsoft.Resources/deployments”
}

(2)VNet テンプレートをプライベート DNS ゾーンにリンク

$ az network private-dns link vnet create -g ${RESOURCE_GROUP} -z ${CLUSTER_NAME}.${BASE_DOMAIN} -n ${INFRA_ID}-network-link -v “${INFRA_ID}-vnet” -e false

{- Finished ..
“etag”: “\”7e02aec1-0000-0100-0000-6035f4fb0000\””,
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./virtualNetworkLinks/nicpwhecluster-h8lq5-network-link”,
“location”: “global”,
“name”: “nicpwhecluster-h8lq5-network-link”,
“provisioningState”: “Succeeded”,
“registrationEnabled”: false,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: null,
“type”: “Microsoft.Network/privateDnsZones/virtualNetworkLinks”,
“virtualNetwork”: {
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/virtualNetworks/nicpwhecluster-h8lq5-vnet”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
“virtualNetworkLinkState”: “Completed”
}

3-7. RHCOS クラスターイメージのデプロイ

(1)RHCOS VHD blob URL を変数としてエクスポート

$ export VHD_BLOB_URL=`az storage blob url –account-name ${CLUSTER_NAME}sa –account-key ${ACCOUNT_KEY} -c vhd -n “rhcos.vhd” -o tsv`

(2)クラスターイメージのデプロイ
マニュアルページにある「イメージストレージの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに02_storage.jsonというファイルを作成し、コマンドを実行します。

$ az deployment group create -g ${RESOURCE_GROUP} –template-file “/home/user01/os45/02_storage.json” –parameters vhdBlobURL=”${VHD_BLOB_URL}” –parameters baseName=”${INFRA_ID}”

– Finished ..
{- Finished ..
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/02_storage”,
“location”: null,
“name”: “02_storage”,
“properties”: {
“correlationId”: “0d04f61c-907e-4ccb-b364-a5c50c0e9ae7”,
“debugSetting”: null,
“dependencies”: [],
“duration”: “PT13.9015046S”,
“error”: null,
“mode”: “Incremental”,
“onErrorDeployment”: null,
“outputResources”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/images/nicpwhecluster-h8lq5-image”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
}
],
“outputs”: null,
“parameters”: {
“baseName”: {
“type”: “String”,
“value”: “nicpwhecluster-h8lq5”
},
“vhdBlobURL”: {
“type”: “String”,
“value”: “https://nicpwheclustersa.blob.core.windows.net/vhd/rhcos.vhd”
}
},
“parametersLink”: null,
“providers”: [
{
“id”: null,
“namespace”: “Microsoft.Compute”,
“registrationPolicy”: null,
“registrationState”: null,
“resourceTypes”: [
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “images”
}
]
}
],
“provisioningState”: “Succeeded”,
“templateHash”: “723175588916620424”,
“templateLink”: null,
“timestamp”: “2021-02-24T06:45:00.292869+00:00”,
“validatedResources”: null
},
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: null,
“type”: “Microsoft.Resources/deployments”
}

3-8.ネットワークおよび負荷分散コンポーネントの作成

(1)ネットワークオブジェクトおよびロードバランサーのデプロイ
マニュアルページにある「ネットワークおよびロードバランサーの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに03_infra.jsonというファイルを作成し、コマンドを実行します。

$ az deployment group create -g ${RESOURCE_GROUP} –template-file “/home/user01/os45/03_infra.json” –parameters privateDNSZoneName=”${CLUSTER_NAME}.${BASE_DOMAIN}” –parameters baseName=”${INFRA_ID}”

{- Finished ..
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/03_infra”,
“location”: null,
“name”: “03_infra”,
“properties”: {
“correlationId”: “32467378-c2a4-4e99-b950-9b3ba06ba768”,
“debugSetting”: null,
“dependencies”: [
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-master-pip”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-pip”,
“resourceType”: “Microsoft.Network/publicIPAddresses”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-public-lb”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-public-lb”,
“resourceType”: “Microsoft.Network/loadBalancers”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-internal-lb”,
“resourceType”: “Microsoft.Network/loadBalancers”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./api”,
“resourceType”: “Microsoft.Network/privateDnsZones/A”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-internal-lb”,
“resourceType”: “Microsoft.Network/loadBalancers”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api-int”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./api-int”,
“resourceType”: “Microsoft.Network/privateDnsZones/A”
}
],
“duration”: “PT7.2301651S”,
“error”: null,
“mode”: “Incremental”,
“onErrorDeployment”: null,
“outputResources”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-internal-lb”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/loadBalancers/nicpwhecluster-h8lq5-public-lb”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/api-int”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-master-pip”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
}
],
“outputs”: null,
“parameters”: {
“baseName”: {
“type”: “String”,
“value”: “nicpwhecluster-h8lq5”
},
“privateDNSZoneName”: {
“type”: “String”,
“value”: “nicpwhecluster.”
}
},
“parametersLink”: null,
“providers”: [
{
“id”: null,
“namespace”: “Microsoft.Network”,
“registrationPolicy”: null,
“registrationState”: null,
“resourceTypes”: [
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “publicIPAddresses”
},
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “loadBalancers”
},
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “privateDnsZones/A”
}
]
}
],
“provisioningState”: “Succeeded”,
“templateHash”: “8527193543920854248”,
“templateLink”: null,
“timestamp”: “2021-02-24T07:02:29.639760+00:00”,
“validatedResources”: null
},
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: null,
“type”: “Microsoft.Resources/deployments”
}

(2)変数のエクスポートとクラスターを既存のパブリックゾーンに追加
まず変数をエクスポートします。

$ export PUBLIC_IP=`az network public-ip list -g ${RESOURCE_GROUP} –query “[?name==’${INFRA_ID}-master-pip’] | [0].ipAddress” -o tsv`

クラスターを既存のパブリックゾーンに追加します。

$ az network dns record-set a add-record -g ${BASE_DOMAIN_RESOURCE_GROUP} -z ${BASE_DOMAIN} -n api.${CLUSTER_NAME} -a ${PUBLIC_IP} –ttl 60

{
“arecords”: [
{
“ipv4Address”: “20.78.25.157”
}
],
“etag”: “e1b034dc-580a-460e-8579-d7789e6aa43c”,
“fqdn”: “api.nicpwhecluster..”,
“id”: “/subscriptions/<id>/resourceGroups/ocp-cluster/providers/Microsoft.Network/dnszones//A/api.nicpwhecluster”,
“metadata”: null,
“name”: “api.nicpwhecluster”,
“provisioningState”: “Succeeded”,
“resourceGroup”: “ocp-cluster”,
“targetResource”: {
“id”: null
},
“ttl”: 60,
“type”: “Microsoft.Network/dnszones/A”
}

3-9.ノードの作成

(1)ブートストラップマシンの作成
まず変数をエクスポートします。

$ export BOOTSTRAP_URL=`az storage blob url –account-name ${CLUSTER_NAME}sa –account-key ${ACCOUNT_KEY} -c “files” -n “bootstrap.ign” -o tsv`

$ export BOOTSTRAP_IGNITION=`jq -rcnM –arg v “2.2.0” –arg url ${BOOTSTRAP_URL} ‘{ignition:{version:$v,config:{replace:{source:$url}}}}’ | base64 -w0`

マニュアルページにある「ブートストラップマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに04_bootstrap.jsonというファイルを作成し、コマンドを実行します。

$ az deployment group create -g ${RESOURCE_GROUP} –template-file “/home/user01/os45/04_bootstrap.json” –parameters bootstrapIgnition=”${BOOTSTRAP_IGNITION}” –parameters sshKeyData=”${SSH_KEY}” –parameters baseName=”${INFRA_ID}”

{- Finished ..
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/04_bootstrap”,
“location”: null,
“name”: “04_bootstrap”,
“properties”: {
“correlationId”: “6bfb12f9-fade-4ab0-99e2-a6acc50a0e67”,
“debugSetting”: null,
“dependencies”: [
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-bootstrap-ssh-pip”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-bootstrap-ssh-pip”,
“resourceType”: “Microsoft.Network/publicIPAddresses”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-bootstrap-nic”,
“resourceType”: “Microsoft.Network/networkInterfaces”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-bootstrap-nic”,
“resourceType”: “Microsoft.Network/networkInterfaces”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-bootstrap”,
“resourceType”: “Microsoft.Compute/virtualMachines”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-bootstrap”,
“resourceType”: “Microsoft.Compute/virtualMachines”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg/securityRules/bootstrap_ssh_in”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-nsg/bootstrap_ssh_in”,
“resourceType”: “Microsoft.Network/networkSecurityGroups/securityRules”
}
],
“duration”: “PT2M34.7216702S”,
“error”: null,
“mode”: “Incremental”,
“onErrorDeployment”: null,
“outputResources”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-bootstrap”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-bootstrap-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkSecurityGroups/nicpwhecluster-h8lq5-nsg/securityRules/bootstrap_ssh_in”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/publicIPAddresses/nicpwhecluster-h8lq5-bootstrap-ssh-pip”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
}
],
“outputs”: null,
“parameters”: {
“baseName”: {
“type”: “String”,
“value”: “nicpwhecluster-h8lq5”
},
“bootstrapIgnition”: {
“type”: “String”,
“value”: “eyJpZ25pdGlvbiI6eyJ2ZXJzaW9uIjoiMi4yLjAiLCJjb25maWciOnsicmVwbGFjZSI6eyJzb3VyY2UiOiJodHRwczovL25pY3B3aGVjbHVzdGVyc2EuYmxvYi5jb3JlLndpbmRvd3MubmV0L2ZpbGVzL2Jvb3RzdHJhcC5pZ24ifX19fQo=”
},
“bootstrapVMSize”: {
“type”: “String”,
“value”: “Standard_D4s_v3”
},
“sshKeyData”: {
“type”: “SecureString”
}
},
“parametersLink”: null,
“providers”: [
{
“id”: null,
“namespace”: “Microsoft.Network”,
“registrationPolicy”: null,
“registrationState”: null,
“resourceTypes”: [
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “publicIPAddresses”
},
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “networkInterfaces”
},
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “networkSecurityGroups/securityRules”
}
]
},
{
“id”: null,
“namespace”: “Microsoft.Compute”,
“registrationPolicy”: null,
“registrationState”: null,
“resourceTypes”: [
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “virtualMachines”
}
]
}
],
“provisioningState”: “Succeeded”,
“templateHash”: “61131872004139608”,
“templateLink”: null,
“timestamp”: “2021-02-24T07:15:18.354401+00:00”,
“validatedResources”: null
},
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: null,
“type”: “Microsoft.Resources/deployments”
}

(2)コントロールプレーンの作成
マニュアルページにある「コントロールプレーンマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに05_masters.jsonというファイルを作成し、コマンドを実行します。

$ az deployment group create -g ${RESOURCE_GROUP} –template-file “/home/user01/os45/05_masters.json” –parameters masterIgnition=”${MASTER_IGNITION}” –parameters sshKeyData=”${SSH_KEY}” –parameters privateDNSZoneName=”${CLUSTER_NAME}.${BASE_DOMAIN}” –parameters baseName=”${INFRA_ID}”

{- Finished ..
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/05_masters”,
“location”: null,
“name”: “05_masters”,
“properties”: {
“correlationId”: “8d3c2bed-113b-4889-8aa7-b0bfba69ea74”,
“debugSetting”: null,
“dependencies”: [
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-0-nic”,
“resourceType”: “Microsoft.Network/networkInterfaces”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./etcd-0”,
“resourceType”: “Microsoft.Network/privateDnsZones/A”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-1-nic”,
“resourceType”: “Microsoft.Network/networkInterfaces”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./etcd-1”,
“resourceType”: “Microsoft.Network/privateDnsZones/A”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-2-nic”,
“resourceType”: “Microsoft.Network/networkInterfaces”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./etcd-2”,
“resourceType”: “Microsoft.Network/privateDnsZones/A”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-0-nic”,
“resourceType”: “Microsoft.Network/networkInterfaces”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./etcd-0”,
“resourceType”: “Microsoft.Network/privateDnsZones/A”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./_etcd-server-ssl._tcp”,
“resourceType”: “Microsoft.Network/privateDnsZones/SRV”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-0”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-0”,
“resourceType”: “Microsoft.Compute/virtualMachines”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-1-nic”,
“resourceType”: “Microsoft.Network/networkInterfaces”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./etcd-1”,
“resourceType”: “Microsoft.Network/privateDnsZones/A”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./_etcd-server-ssl._tcp”,
“resourceType”: “Microsoft.Network/privateDnsZones/SRV”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-1”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-1”,
“resourceType”: “Microsoft.Compute/virtualMachines”
},
{
“dependsOn”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-2-nic”,
“resourceType”: “Microsoft.Network/networkInterfaces”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./etcd-2”,
“resourceType”: “Microsoft.Network/privateDnsZones/A”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster./_etcd-server-ssl._tcp”,
“resourceType”: “Microsoft.Network/privateDnsZones/SRV”
}
],
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-2”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“resourceName”: “nicpwhecluster-h8lq5-master-2”,
“resourceType”: “Microsoft.Compute/virtualMachines”
}
],
“duration”: “PT2M25.3829982S”,
“error”: null,
“mode”: “Incremental”,
“onErrorDeployment”: null,
“outputResources”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-0”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-1”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-master-2”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-0-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-1-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-master-2-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-0”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-1”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./A/etcd-2”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/privateDnsZones/nicpwhecluster./SRV/_etcd-server-ssl._tcp”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
}
],
“outputs”: null,
“parameters”: {
“baseName”: {
“type”: “String”,
“value”: “nicpwhecluster-h8lq5”
},
“diskSizeGB”: {
“type”: “Int”,
“value”: 1024
},
“masterIgnition”: {
“type”: “String”,
“value”: “eyJpZ25pdGlvbiI6eyJjb25maWciOnsiYXBwZW5kIjpbeyJzb3VyY2UiOiJodHRwczovL2FwaS1p\nbnQubmljcHdoZWNsdXN0ZXIuYXp1cmUtY2xvdWRwYWstbmljcHRlc3QuY29tOjIyNjIzL2NvbmZp\nZy9tYXN0ZXIiLCJ2ZXJpZmljYXRpb24iOnt9fV19LCJzZWN1cml0eSI6eyJ0bHMiOnsiY2VydGlm\naWNhdGVBdXRob3JpdGllcyI6W3sic291cmNlIjoiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm\nLTg7YmFzZTY0LExTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVVJGUkVO\nRFFXWnBaMEYzU1VKQlowbEpVek0xZEVoNmRtUnVWMFYzUkZGWlNrdHZXa2xvZG1OT1FWRkZURUpS\nUVhkS2FrVlRUVUpCUjBFeFZVVUtRM2hOU21JelFteGliazV2WVZkYU1FMVNRWGRFWjFsRVZsRlJS\nRVYzWkhsaU1qa3dURmRPYUUxQ05GaEVWRWw0VFVSSmVVNUVRVEpOUkVFd1RteHZXQXBFVkUxNFRV\nUkplVTFxUVRKTlJFRXdUbXh2ZDBwcVJWTk5Ra0ZIUVRGVlJVTjRUVXBpTTBKc1ltNU9iMkZYV2pC\nTlVrRjNSR2RaUkZaUlVVUkZkMlI1Q21JeU9UQk1WMDVvVFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwz\nTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUV5VW14VlJuVjBVbUZtVHpRS2FVcFBh\nVTR4YVZvMWNYWmFkMjQ1TUdaNGQwZzVRelF5T0M5MWFHVXZkV2hXVTJOdVVURnVjV3Q0UVd0c2JW\naHlNbmhVVmxsMWJXUmFOREptTmtJeE5nb3dkM0F3TjNWbFYxbHBTMlZPT1VkclprUjVPRlpZUTJS\nTU5raHNkRGxVWVVrd01UQkpUakJUVUVWWldFeDFORmxsSzJoRVRpdHJkR3RoV0V0a1QycG5DbWRO\nTHpOQmMwRlFSM1p5UjNoMlVUa3ZURloxZW5odVkwNUhWVUppTUZnNU1tVnFURWRMVGtoalZITlNU\nSFZtWVdSSFJFOVBibXhYZDJWWkwySmFOa1lLZUZCQ05FVjVhVVJHUVhsbmEwUkVSVFJyT0RkeVNY\naDVZVkpZTkhRMVkwOXpSWFpJZFdOSE5tUXdSekl3U2xRMWMzcHZhV0pwTUN0NVJGcE1kRk51ZFFw\nYWIyWkJTaXREZVRoVloxSndZWE5sYUZjeFpteHNWRklyZURSUVVDODFTbFUxYURWV00ySnlSM0pJ\nVjBwTVFqUnVhemszWm10aVFVTTJiMlZzUkdOWENqbFNlamQwVTFKT1RWRkpSRUZSUVVKdk1FbDNV\nVVJCVDBKblRsWklVVGhDUVdZNFJVSkJUVU5CY1ZGM1JIZFpSRlpTTUZSQlVVZ3ZRa0ZWZDBGM1JV\nSUtMM3BCWkVKblRsWklVVFJGUm1kUlZUTktkRWMzZGtKb1RrWlllREptYzNWbFdHNTNVV0ZoTjNW\nRVdYZEVVVmxLUzI5YVNXaDJZMDVCVVVWTVFsRkJSQXBuWjBWQ1FVbHhNa2xNU1c4NGNVbFpOMXA0\nZERoc04yOUthVzQzY0U1SFZrZ3ZRMDF4Umlzd01GTlpVemQ2VGxBck1GZzBRMU5RUWtrd1dtWllW\nM1Z3Q2s1U1kwVkpTVGxqVW5vME1tczBOVlZTVm1saU5XeFdVR1prY1RSa2NEZG1aSGRKVVdGc04y\nTnNPSEJVVUhJMVpXcG9SbEJGVmpSeFpGY3pWSGRFVkhjS00yOTZZWGc1UmtVM1p5dGxZbEp6Vmtk\nSVlWRlVUVzVDZVRKQmFrVkJZbGxGTkRSWlp6UkJjbWRoWlZGaVNUZGhhMkp6WjNSNlpqQnlUSGg1\nU1RWR1RncHNiMmR5ZUcxV1dFdFJNVkUwYzI1NmVWWndSa05tUW05WFpraFdVMmhUUm1rM2JHUm9S\nV3RsU0ZaQ1ExaHNPVzlYUTI5UUszQmtUalp0UjFsb1dGTlZDbFZVYUd4RVpXcEZNV2x0ZVhGTmVI\nTnhTblJJYjJsdFoxTnJkWE5SVkVWVk1ETXdZVWRrUWtOVWNITXpaM0JPTWtKQmNqVm5SMVpDY0hk\nalJtOHZjazRLT1hKbE1FSk5URTFCU21SSFdGSlVSekJLWmtJNE1XNVVWUzlSUFFvdExTMHRMVVZP\nUkNCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2c9PSIsInZlcmlmaWNhdGlvbiI6e319XX19LCJ0aW1l\nb3V0cyI6e30sInZlcnNpb24iOiIyLjIuMCJ9LCJuZXR3b3JrZCI6e30sInBhc3N3ZCI6e30sInN0\nb3JhZ2UiOnt9LCJzeXN0ZW1kIjp7fX0=”
},
“masterVMSize”: {
“type”: “String”,
“value”: “Standard_D8s_v3”
},
“numberOfMasters”: {
“type”: “Int”,
“value”: 3
},
“privateDNSZoneName”: {
“type”: “String”,
“value”: “nicpwhecluster.”
},
“sshKeyData”: {
“type”: “SecureString”
}
},
“parametersLink”: null,
“providers”: [
{
“id”: null,
“namespace”: “Microsoft.Network”,
“registrationPolicy”: null,
“registrationState”: null,
“resourceTypes”: [
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “privateDnsZones/SRV”
},
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “networkInterfaces”
},
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “privateDnsZones/A”
}
]
},
{
“id”: null,
“namespace”: “Microsoft.Compute”,
“registrationPolicy”: null,
“registrationState”: null,
“resourceTypes”: [
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
“japaneast”
],
“properties”: null,
“resourceType”: “virtualMachines”
}
]
}
],
“provisioningState”: “Succeeded”,
“templateHash”: “6843960507431905901”,
“templateLink”: null,
“timestamp”: “2021-02-24T08:02:39.379059+00:00”,
“validatedResources”: null
},
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: null,
“type”: “Microsoft.Resources/deployments”
}

(3)ワーカーマシンの作成
まず変数をエクスポートします。

$ export WORKER_IGNITION=`cat /home/user01/os45/worker.ign | base64`

マニュアルページにある「ワーカーマシンの ARM テンプレート」の内容をコピーして/home/user01/os45ディレクトリに06_workers.jsonというファイルを作成し、コマンドを実行します。

$ az deployment group create -g ${RESOURCE_GROUP} –template-file “/home/user01/os45/06_workers.json” –parameters workerIgnition=”${WORKER_IGNITION}” –parameters sshKeyData=”${SSH_KEY}” –parameters baseName=”${INFRA_ID}”

{- Finished ..
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Resources/deployments/06_workers”,
“location”: null,
“name”: “06_workers”,
“properties”: {
“correlationId”: “f5b06e10-75d0-4768-8546-637a838d11f4”,
“debugSetting”: null,
“dependencies”: [],
“duration”: “PT1M45.2779547S”,
“error”: null,
“mode”: “Incremental”,
“onErrorDeployment”: null,
“outputResources”: [
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-1”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-2”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Compute/virtualMachines/nicpwhecluster-h8lq5-worker-japaneast-3”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-1-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-2-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
},
{
“id”: “/subscriptions/<id>/resourceGroups/nicpwhecluster-h8lq5-rg/providers/Microsoft.Network/networkInterfaces/nicpwhecluster-h8lq5-worker-japaneast-3-nic”,
“resourceGroup”: “nicpwhecluster-h8lq5-rg”
}
],
“outputs”: null,
“parameters”: {
“baseName”: {
“type”: “String”,
“value”: “nicpwhecluster-h8lq5”
},
“nodeVMSize”: {
“type”: “String”,
“value”: “Standard_D4s_v3”
},
“numberOfNodes”: {
“type”: “Int”,
“value”: 3
},
“sshKeyData”: {
“type”: “SecureString”
},
“workerIgnition”: {
“type”: “String”,
“value”: “eyJpZ25pdGlvbiI6eyJjb25maWciOnsiYXBwZW5kIjpbeyJzb3VyY2UiOiJodHRwczovL2FwaS1p\nbnQubmljcHdoZWNsdXN0ZXIuYXp1cmUtY2xvdWRwYWstbmljcHRlc3QuY29tOjIyNjIzL2NvbmZp\nZy93b3JrZXIiLCJ2ZXJpZmljYXRpb24iOnt9fV19LCJzZWN1cml0eSI6eyJ0bHMiOnsiY2VydGlm\naWNhdGVBdXRob3JpdGllcyI6W3sic291cmNlIjoiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm\nLTg7YmFzZTY0LExTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVVJGUkVO\nRFFXWnBaMEYzU1VKQlowbEpVek0xZEVoNmRtUnVWMFYzUkZGWlNrdHZXa2xvZG1OT1FWRkZURUpS\nUVhkS2FrVlRUVUpCUjBFeFZVVUtRM2hOU21JelFteGliazV2WVZkYU1FMVNRWGRFWjFsRVZsRlJS\nRVYzWkhsaU1qa3dURmRPYUUxQ05GaEVWRWw0VFVSSmVVNUVRVEpOUkVFd1RteHZXQXBFVkUxNFRV\nUkplVTFxUVRKTlJFRXdUbXh2ZDBwcVJWTk5Ra0ZIUVRGVlJVTjRUVXBpTTBKc1ltNU9iMkZYV2pC\nTlVrRjNSR2RaUkZaUlVVUkZkMlI1Q21JeU9UQk1WMDVvVFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwz\nTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUV5VW14VlJuVjBVbUZtVHpRS2FVcFBh\nVTR4YVZvMWNYWmFkMjQ1TUdaNGQwZzVRelF5T0M5MWFHVXZkV2hXVTJOdVVURnVjV3Q0UVd0c2JW\naHlNbmhVVmxsMWJXUmFOREptTmtJeE5nb3dkM0F3TjNWbFYxbHBTMlZPT1VkclprUjVPRlpZUTJS\nTU5raHNkRGxVWVVrd01UQkpUakJUVUVWWldFeDFORmxsSzJoRVRpdHJkR3RoV0V0a1QycG5DbWRO\nTHpOQmMwRlFSM1p5UjNoMlVUa3ZURloxZW5odVkwNUhWVUppTUZnNU1tVnFURWRMVGtoalZITlNU\nSFZtWVdSSFJFOVBibXhYZDJWWkwySmFOa1lLZUZCQ05FVjVhVVJHUVhsbmEwUkVSVFJyT0RkeVNY\naDVZVkpZTkhRMVkwOXpSWFpJZFdOSE5tUXdSekl3U2xRMWMzcHZhV0pwTUN0NVJGcE1kRk51ZFFw\nYWIyWkJTaXREZVRoVloxSndZWE5sYUZjeFpteHNWRklyZURSUVVDODFTbFUxYURWV00ySnlSM0pJ\nVjBwTVFqUnVhemszWm10aVFVTTJiMlZzUkdOWENqbFNlamQwVTFKT1RWRkpSRUZSUVVKdk1FbDNV\nVVJCVDBKblRsWklVVGhDUVdZNFJVSkJUVU5CY1ZGM1JIZFpSRlpTTUZSQlVVZ3ZRa0ZWZDBGM1JV\nSUtMM3BCWkVKblRsWklVVFJGUm1kUlZUTktkRWMzZGtKb1RrWlllREptYzNWbFdHNTNVV0ZoTjNW\nRVdYZEVVVmxLUzI5YVNXaDJZMDVCVVVWTVFsRkJSQXBuWjBWQ1FVbHhNa2xNU1c4NGNVbFpOMXA0\nZERoc04yOUthVzQzY0U1SFZrZ3ZRMDF4Umlzd01GTlpVemQ2VGxBck1GZzBRMU5RUWtrd1dtWllW\nM1Z3Q2s1U1kwVkpTVGxqVW5vME1tczBOVlZTVm1saU5XeFdVR1prY1RSa2NEZG1aSGRKVVdGc04y\nTnNPSEJVVUhJMVpXcG9SbEJGVmpSeFpGY3pWSGRFVkhjS00yOTZZWGc1UmtVM1p5dGxZbEp6Vmtk\nSVlWRlVUVzVDZVRKQmFrVkJZbGxGTkRSWlp6UkJjbWRoWlZGaVNUZGhhMkp6WjNSNlpqQnlUSGg1\nU1RWR1RncHNiMmR5ZUcxV1dFdFJNVkUwYzI1NmVWWndSa05tUW05WFpraFdVMmhUUm1rM2JHUm9S\nV3RsU0ZaQ1ExaHNPVzlYUTI5UUszQmtUalp0UjFsb1dGTlZDbFZVYUd4RVpXcEZNV2x0ZVhGTmVI\nTnhTblJJYjJsdFoxTnJkWE5SVkVWVk1ETXdZVWRrUWtOVWNITXpaM0JPTWtKQmNqVm5SMVpDY0hk\nalJtOHZjazRLT1hKbE1FSk5URTFCU21SSFdGSlVSekJLWmtJNE1XNVVWUzlSUFFvdExTMHRMVVZP\nUkNCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2c9PSIsInZlcmlmaWNhdGlvbiI6e319XX19LCJ0aW1l\nb3V0cyI6e30sInZlcnNpb24iOiIyLjIuMCJ9LCJuZXR3b3JrZCI6e30sInBhc3N3ZCI6e30sInN0\nb3JhZ2UiOnt9LCJzeXN0ZW1kIjp7fX0=”
}
},
“parametersLink”: null,
“providers”: [
{
“id”: null,
“namespace”: “Microsoft.Resources”,
“registrationPolicy”: null,
“registrationState”: null,
“resourceTypes”: [
{
“aliases”: null,
“apiProfiles”: null,
“apiVersions”: null,
“capabilities”: null,
“defaultApiVersion”: null,
“locationMappings”: null,
“locations”: [
null
],
“properties”: null,
“resourceType”: “deployments”
}
]
}
],
“provisioningState”: “Succeeded”,
“templateHash”: “18038938870077969594”,
“templateLink”: null,
“timestamp”: “2021-02-24T08:19:00.447842+00:00”,
“validatedResources”: null
},
“resourceGroup”: “nicpwhecluster-h8lq5-rg”,
“tags”: null,
“type”: “Microsoft.Resources/deployments”
}

(4)クラスターへのログイン
ocコマンドにてクラスタにログインします。

$ export KUBECONFIG=/home/user01/os45/auth/kubeconfig
$ oc whoami
system:admin

(5)マシンの証明書署名要求の承認
まずマスターに認識されるすべてのノードを一覧表示します。まだワーカーマシンが表示されていません。

$ oc get nodes
NAME STATUS ROLES AGE VERSION
nicpwhecluster-h8lq5-master-0 Ready master 21m v1.18.3+e574db2
nicpwhecluster-h8lq5-master-1 Ready master 21m v1.18.3+e574db2
nicpwhecluster-h8lq5-master-2 Ready master 21m v1.18.3+e574db2

保留中の証明書署名要求 (CSR) でいくつか「Pending」になっていることを確認します。

$ oc get csr
NAME AGE SIGNERNAME REQUESTOR CONDITION
csr-4ltzq 21m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued
csr-5ff59 22m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued
csr-8cxlk 22m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued
csr-d79hz 21m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-2 Approved,Issued
csr-ghhrm 22m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-1 Approved,Issued
csr-jtts9 7m15s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
csr-m68ns 7m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
csr-vgtp6 7m2s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
csr-wwptz 21m kubernetes.io/kubelet-serving system:node:nicpwhecluster-h8lq5-master-0 Approved,Issued$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{“\n”}}{{end}}{{end}}’ | xargs oc adm certificate approvecertificatesigningrequest.certificates.k8s.io/csr-jtts9 approved
certificatesigningrequest.certificates.k8s.io/csr-m68ns approved
certificatesigningrequest.certificates.k8s.io/csr-vgtp6 approved

再度マスターに認識されるすべてのノードを一覧表示し、ワーカーマシンがReadyになっていることを確認します。

$ oc get nodes
NAME STATUS ROLES AGE VERSION
nicpwhecluster-h8lq5-master-0 Ready master 24m v1.18.3+e574db2
nicpwhecluster-h8lq5-master-1 Ready master 25m v1.18.3+e574db2
nicpwhecluster-h8lq5-master-2 Ready master 24m v1.18.3+e574db2
nicpwhecluster-h8lq5-worker-japaneast-1 Ready worker 2m2s v1.18.3+e574db2
nicpwhecluster-h8lq5-worker-japaneast-2 Ready worker 2m6s v1.18.3+e574db2
nicpwhecluster-h8lq5-worker-japaneast-3 Ready worker 2m v1.18.3+e574db2

(6)ブートストラップリソースを削除
これですべてのノードが作成されて利用可能となりましたので、ブートストラップノードと関連するリソースを削除します。

$ ./openshift-install wait-for bootstrap-complete –dir=/home/user01/os45/ –log-level info

INFO Waiting up to 20m0s for the Kubernetes API at https://api.nicpwhecluster.:6443…
INFO API v1.18.3+e574db2 up
INFO Waiting up to 40m0s for bootstrapping to complete…
INFO It is now safe to remove the bootstrap resources
INFO Time elapsed: 0s

$ az network nsg rule delete -g ${RESOURCE_GROUP} –nsg-name ${INFRA_ID}-nsg –name bootstrap_ssh_in
$ az vm stop -g ${RESOURCE_GROUP} –name ${INFRA_ID}-bootstrap

About to power off the specified VM…
It will continue to be billed. To deallocate a VM, run: az vm deallocate.

$ az vm deallocate -g ${RESOURCE_GROUP} –name ${INFRA_ID}-bootstrap
$ az vm delete -g ${RESOURCE_GROUP} –name ${INFRA_ID}-bootstrap –yes
$ az disk delete -g ${RESOURCE_GROUP} –name ${INFRA_ID}-bootstrap_OSDisk –no-wait –yes
$ az network nic delete -g ${RESOURCE_GROUP} –name ${INFRA_ID}-bootstrap-nic –no-wait
$ az storage blob delete –account-key ${ACCOUNT_KEY} –account-name ${CLUSTER_NAME}sa –container-name files –name bootstrap.ign
$ az network public-ip delete -g ${RESOURCE_GROUP} –name ${INFRA_ID}-bootstrap-ssh-pip

(7)クラスターのインストールを完了する

$ ./openshift-install –dir=/home/user01/os45/ wait-for install-complete

INFO Waiting up to 30m0s for the cluster at https://api.nicpwhecluster.:6443 to initialize…
INFO Waiting up to 10m0s for the openshift-console route to be created…
INFO Install complete!
INFO To access the cluster as the system:admin user when using ‘oc’, run ‘export KUBECONFIG=/home/user01/os45/auth/kubeconfig’
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.nicpwhecluster.
INFO Login to the console with user: “kubeadmin”, and password: “<パスワード>”
INFO Time elapsed: 1s

(8)ログイン

$ oc login -u kubeadmin -p  <パスワード>https://api.nicpwhecluster.:6443
The server uses a certificate signed by an unknown authority.
You can bypass the certificate check, but any data you send to the server could be intercepted by others.
Use insecure connections? (y/n): yLogin successful.You have access to 58 projects, the list has been suppressed. You can list all projects with ‘oc projects’Using project “default”.

 

 

その他の記事

2025年06月26日

次世代型のインフラ構築を実現するIBM Fusion HCIがクラウドシフトを加速

公開日:2025-06-26 クラウドファースト時代となり、企業のインフラ構築においてもクラウドネイティブなアーキテクチャをめざす潮流が高まりつつあります。なかでも重要な技術とされるのが、コンテナベースの基盤づくりで、アプリケーションをコンテナ化できれば、その移植性や効率性、スケーラビリティなどが大きく高まり、ビジネスの展開を高速化できると期待が集まっています。 しかし、基盤のコンテナ化は、これまでのシステム構築のあり方と大きく“作法”が異なり、専門のナレッジやスキルが求められます。ただでさえ IT人材が不足している今日、一朝一夕に移行するのは難しく、この点が多くの企業にとって大きなジレンマとなっています。 貴社においても、 「クラウド移行は進めたものの、残るオンプレミスシステムとどう連携させればいいのか」 「自社で腰を据えてAI活用に取り組みたいが、社内リソースが足りない」 などのお悩みはないでしょうか。 今回は、企業が課題を抱えがちな次世代型のインフラ構築をあっさり実現するソリューションIBM Fusion HCIを紹介します。 目次 インフラ基盤が抱える課題 IBM Fusion HCIの概要 インフラ基盤が抱える課題への最適策 IBM Fusion HCIを利用したユースケース 次世代のインフラ基盤への鍵を握るIBM Fusion HCI お問い合わせ インフラ基盤が抱える課題 今日、企業情報システムのインフラ基盤は様々な意味で岐路に立っているといえます。これまで同様の手法では、刻一刻と変化し続けるビジネス環境を受けとめきれず企業競争力を低下させる恐れもあります。 例えば、具体的な危惧の内容として次のようなものがあります。 1. クラウドネイティブなアーキテクチャ導入の高い難易度 クラウドネイティブなアーキテクチャは柔軟性やスケーラビリティを重視した設計手法で、ビジネススピードの向上にも貢献します。しかしその導入には既存のシステムとは手法が異なるため、互換性確保や高度な専門知識を持つ人材の確保といった点に障壁があります。また、従来型の開発手法から移行する際には、文化的変革や技術的理解のギャップが課題になっています。結果、プロジェクトを立ち上げたものの頓挫してしまった、というケースも発生しています。 2. マルチクラウド戦略を推進する上での壁 マルチクラウド戦略とは複数のクラウドサービスを使い分けることで、効率的なリソース管理やリスク分散を実現することを指します。多くの企業が「オンプレとクラウドを統合」または「複数のクラウド環境を最適化」したいと考えています。 しかし、相互接続性やデータ移動に大きな課題があります。また、異なるプロバイダ間での運用調整やコスト管理の複雑化も実践の妨げになりがちです。特に、各クラウド特有の設計要件への対応やパブリッククラウドとプライベートクラウド間のデータ連携には多くのリソースとノウハウが必要です。 3. 自社AIワークロードの拡大 AIワークロードの拡大は、迅速なデータ処理や大量データ解析を可能にします。しかし、これに伴って高性能なインフラ整備が求められます。既存のインフラでは計算負荷が高く、パフォーマンスが著しく制限されるためです。慎重に選定を進めなければ計算資源の増加による費用の急増が発生するリスクがあります。 エッジ環境でのデータ処理や通信コストの抑制に対応できる基盤という観点も重視しなければなりません。開発プロセスの最適化や適切な AIモデルの選定なども大きな課題です。 4. VMware基盤のコスト問題 すべての企業に当てはまるわけではありませんが、仮想化基盤として VMware を採用するのは普遍的なソリューションであり、信頼性の高い仮想化テクノロジーを提供します。 しかし、近年そのコスト問題が大きく取り沙汰されており、ライセンス料や運用費用の高さが企業にとって大きな負担となっています。長期的な予算圧迫を招く可能性があり、特に運用規模が拡大していくビジネス環境の場合、コスト管理が難航するリスクがあります。さらに、技術的な側面では仮想マシン単位でしか運用管理できないという点があり、リソースの効率的な活用に限界があります。 IBM Fusion HCIの概要 IBM Fusion HCI は、上記のようなインフラ課題を解決するために登場したハイパーコンバージドインフラ(HCI)ソリューションです。コンテナ(Red Hat OpenShift、以下 OpenShift)ベースのシステムを構築するために必要な機能をあらかじめすべてパッケージ化しており、コンテナ専用のオール・イン・ワンソリューションといえます。 具体的に必要な機能とは、統合運用管理ダッシュボード、ストレージファイルシステム、バックアップリストア、コンテナ、仮想マシンを指しており、オプションでデータ連携カタログも選択できます。納品後最短4時間で構築が完了し、すぐに使用を開始することができます。 図1:IBM Fusion HCI概念図 これにより、企業において統合データ管理やクラウドとの透過的アクセス、アプリケーションの高速化といった次世代志向のインフラ構築が実現します。また、IBM Fusion HCI はサーバー/スイッチも統合管理でき、サポートを IBM に統一できるという点においても企業の運用管理負荷を大きく軽減することが可能です。AI を含む負荷の高いワークロードにも対応できます。 このプラットフォームで、データ管理、計算リソース、ストレージを効率的に統合できるため、AIアプリケーションの実行に必要な環境がシームレスに整います。例えば、AIモデルのトレーニングや推論処理を高速化するために計算資源にスケーラビリティをもたせるといったことも可能です。さらに、セキュリティ面でも信頼性の高い機能が提供されており、企業の重要なデータを安全に保護します。 インフラ基盤が抱える課題への最適策 IBM Fusion HCI は 導入しやすく柔軟でパフォーマンスに優れたインフラ基盤 です。コンテナベースのシステム構築を進めたい企業にとって最適の選択肢といえ、そのメリットとしては次のようなものがあります。 1. クラウドネイティブへのスムーズな移行を実現 Red Hat OpenShift を基盤とし、これをあらかじめパッケージした HCI であるため、ユーザーはクラウドネイティブなコンテナ基盤を導入する際に設計を始めとした複雑な調整を省けます。また、専用インストーラーを搭載しており導入をスムーズに進めることができるため、製品が到着したその日からデジタルトランスフォーメーションに着手することが可能です。 2. マルチクラウド/エッジ環境への移行 IBM Fusion HCI は、オンプレミス、パブリッククラウド、エッジ環境のどこでも稼働することができます。特に、ハイブリッドクラウドのアプローチを強化するために設計された新しいサービス「IBM Cloud Satellite」を活用すれば、IBM Cloud サービスのメリットを IBM Fusion HCI の環境にも容易に拡張できます。 例えば、データが特定の地域に留まる必要がある法規制に従う際に、IBM Cloud Satellite はその地域でのデプロイメントをサポートしつつ IBM Cloud が提供する最新の AI、セキュリティ、ストレージ機能をオンプレミス環境で利用できます。 この透過的なデータ連携能力は、マルチクラウド環境のデータ制御に大きな力を発揮します。 3. AIワークロードに対する優れた対応力 セルフ型オンプレミスクラウドの提供 IBM Fusion HCI は AIワークロードに特化した柔軟で高度なインフラ基盤を提供します。強みは、watsonx との連携によるセルフ型オンプレミスクラウドの構築が可能 である点です。この連携により、クラウドの利便性をオンプレミス環境に取り入れ、AIモデルのトレーニングやインファレンス(推論)作業をシームレスかつ効率的に進められます。 AI処理に最適化された設計 IBM Fusion HCI には高速な AI処理を実現する設計が施されています。NVIDIA GPU の活用を可能とし、AIモデルのトレーニングや推論の速度を飛躍的に向上させます。また、watsonx.data と組み合わせることでデータクエリのパフォーマンスを従来インフラの最大90倍まで高速化 することが可能です。 エンタープライズグレードのデータ基盤 IBM Fusion HCI はデータレイクハウスとしての機能を提供し、AIワークロードに必要なデータ収集・分析基盤の構築を支援します。エンタープライズ規模の大容量データ管理に対応し高い柔軟性と拡張性を持つため、DX を推進する企業にとって理想的な選択肢と言えます。 4. コスト削減と効率性の向上 VMwareのライセンス費用をカット IBM Fusion HCI は、VMware を利用した仮想化基盤の代替として大幅なコスト削減の可能性とします。物理サーバー上に Red Hat OpenShift環境を直接構築する仕組みによって VMwareライセンス費用や運用コストを削減すると同時に、OpenShift利用における費用も最適化できます。 効率的なリソース管理 コンテナ単位での精細なリソース管理を実現する IBM Fusion HCI は、従来の仮想マシン管理よりも大きな効率性を発揮します。これにより、仮想化環境の課題(例:仮想マシン単位でしかリソースを扱えない問題)を解消し、リソースの使用効率を最大化します。 運用負荷とコストの削減 IBM Fusion HCI は設計・導入・運用にかかる負担を軽減し、運用管理の効率化を達成します。IBM による一元的なサポートが可能なため、トラブル発生時の対応が迅速かつスムーズです。また、watsonx を活用した次世代ワークロードに最適化されており、最新技術を活用しながら長期的なライセンスコストの抑制を実現します。 5. 障害時の運用負荷負担削減 IBM Fusion HCI は、システムの信頼性を高めるために設計された自動監視および報告機能である CallHome機能を搭載しています。そのため、障害発生時に IBM に自動通知でき、運用負担を軽減することができます。統合管理コンソールによりシステムの状態を一元的に確認できるため、トラブルシューティングも容易に行うことができます。 IBM Fusion HCIを利用したユースケース 1. IoTサービスでの利用 製造業で IoTサービスを開始したいという場合、製品や生産機械から IoTデータを収集し、このデータをクラウドなど IoTサービスの拠点に送る必要があります。しかし、生産拠点によってはセキュリティやネットワーク要件が厳しくデータをクラウドに出せないということもあります。 そこで、条件の厳しい工場には IBM Fusion HCI を設置しクラウド同様の IoTサービスを展開することで、エンドユーザーにデータから得られる知見を提供できます。 2. マルチクラウドでの利用 すでに進んでいるクラウド移行を統一管理したい場合にも IBM Fusion HCI は活躍します。例えば、複数クラウドの OpenShift環境に統一したセキュリティポリシーを適用するとした場合、お客様サイトの IBM Fusion HCI を起点として IBM Cloud を介して様々なロケーションの OpenShiftサービスを一元化できます。ポリシーをアップデートする際も変更が自動的に反映されるため、運用管理の負荷が大きく軽減できます。 3. AIワークロードでの利用 AIデータ処理を IBM Fusion HCI上の NVIDIA A100 GPU で実行することができます。これにより、大規模な AIシステムを構成するコアシステムやクラウド上の AIアプリケーションのデータへライブストリーミングすることができます。また、エッジで処理を終えてから、コアシステムやクラウド上のデータレイクやデータウェアハウスに送信するといったことも可能です。 図2:エッジのIBM Fusion HCIでAIデータ処理を実行 次世代のインフラ基盤への鍵を握るIBM Fusion HCI 未来志向のインフラ基盤に求められるのは「柔軟性」「効率性」「スピード」「安全性」です。IBM Fusion HCI は、これらすべてを備えた次世代型のソリューションとして、顧客提案の新しい切り札になると考えられます。 エヌアイシー・パートナーズは、IBM ソフトウェア/ハードウェアの認定ディストリビューターとして、IBM Fusion HCI のお客様への提案をサポートします。また、IBM のソフトウェア製品およびハードウェア製品を組み合わせた最適な提案を提供するとともに、製品の特長や利点をお客様にわかりやすく説明し、お客様・パートナー様のビジネスをサポートしています。 「お客様のニーズや要件に合わせて総合的なIBMソリューションを提案したい」 「IBM製品の機能や適用方法についての問い合わせに適切に対応したい」 「IBM製品の特長や利点を活かしてお客様ビジネスに最適なプランを提示したい」 といったご要望をお持ちの際は、お気軽にエヌアイシー・パートナーズへご相談ください。 お問い合わせ この記事に関するお問い合せは以下のボタンよりお願いいたします。お問い合わせ   .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:26px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #eb6100; transition: all 0.5s ease; } .btn_A a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .bigger { font-size: larger; }

back to top