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月09日

安定の裏に潜む意外な悩み?HCLに聞く「HCL Domino」のバージョンアップにおける課題と意義(後編)

Domino が誕生してから35年以上が経過し、IBM から HCL に移管されて丸6年が経ちました。 Domino は、高い開発生産性と堅牢性を兼ね備えたアプリケーション基盤で、長きにわたり企業の業務効率化を支えてきた歴史ある製品です。一方、重ねてきた実績の分だけ、バージョンアップに対する課題も垣間見えます。 今回は、エイチシーエル・ジャパン株式会社 HCLSoftware のテクニカルリードである松浦光様に HCL Domino のビジネス状況や今後の展開など、多岐にわたり話を伺いました。(本ページは後半です[前半も公開中]) 対談者 【ゲスト】 エイチシーエル・ジャパン株式会社 HCLSoftware テクニカルリード 松浦 光 様 【インタビュアー】 エヌアイシー・パートナーズ株式会社 技術企画本部 ソリューション企画部 松田 秀幸 ※対談者情報は2025年6月9日時点 新バージョン V14.5 が刻む新たな一歩 生成AI を Domino の中に ── この夏に新バージョンの出荷が予定されていますね。 松浦: はい、2025年6月にバージョン V14.5 の出荷が予定されています。 ── V14.5 のポイントは何でしょうか? 松浦: 目玉の1つとして、Domino の中に AI を持つ「Domino IQ」 という機能がリリースされます。 なぜ、わざわざ自社で生成AI を持たなければいけないか、と思われる方もいると思いますが、理由の1つはセキュリティです。 Domino と生成AI の統合「Domino IQ」 自社のベストプラクティスを得られる ── 「Domino IQ」は、どのようなものでしょうか? 松浦: 完全にローカルで生成AI を持つことで、機密度が高い自社の情報についても問い合わせできるようになります。 加えて、自社の Domino を20~30年使い続けているお客様は結構多く、その積み重ねた情報に注目しています。そこで、今まで溜め込んだナレッジを生成AI に教え込み、ベテランの方が持つナレッジや自社のベストプラクティスを回答する生成AI を作っていく 流れですね。 このような利用も考えて、Domino IQ を開発しています。 ── 生成AI のモデルは、HCL で作っているのですか。 松浦: HCL で開発しているわけではなく、オープンソースの LLM を使っています。今ベータ版で使えるのは、Meta社の Llama3.2 などです。 ゼロから HCL で作ったものではなく、もう既に賢く育てられた LLM を使える点が大きな強みの1つだと思います。RAG を使って LLM に足りない情報を学習させられるようになるので、自社のデータベースで蓄えていた情報を AI が活用できるようになります。 Domino による生成AI の活用方法 ── RAG による拡張はキーになりそうですね。 松浦: Domino に溜まっている色々な情報やデータを社外や国外の生成AI に出さなくても、Domino IQ で新しい使い方が可能です。 ── Domino と生成AI の組み合わせで業務効率も向上しそうですね。 松浦: Domino は、業界用語や社内用語なども扱える 『生き字引き』のような人に代わる存在になっていき、皆さんの業務を支えられる のではないかと考えています。 REST API による効率的なシステム間の連携 ── フロントエンドの作り込みはどうでしょうか。例えば、チャットボット以外の入口を作る必要はありますか? 松浦: フロントエンドは何でもいいと考えていて、様々な Web やモバイルアプリに組み込むこともできますし、Notesクライアントが好きであれば Notesクライアントでもいいですし、Nomad Web でもいいと思います。Nomad Mobile というスマホやタブレット向けの Notesクライアント相当のものもあるので、それを使ってもいいですね。 ── 他社システムとの連携はどうでしょうか? 松浦: 前半でも少し触れたディレクトリサービスの連携だけではなく、REST API で他社システムと繋ぐことも想定しています。例えばフロントエンドとしては、チャットボットはもちろん、それ以外にも様々なシステムから入力してもらうこともできます。 Domino IQ 用に設定された Domino Server は、Dbserver プロセスから推論エンジンを起動する。(画像クリックで拡大)(出典:HCL Software|Configuring / Configuring users and servers / Domino IQ) 松浦: オープンソースの LLM を Dominoサーバーのデータディレクトリの下にインストールし、アプリケーションからの参照は、簡単な Lotus Script の読み込み・書き込みという2つのメソッドで問い合わせる仕様です。 先程も触れましたが、既存の LLM を使える点は大きな強みだと思います。 バージョンアップの鍵は互換性の安心感 新旧バージョンの互換性は移行チェックツールで担保する ── 互換性を気にされる方が多いと思いますが、いかがでしょうか? 松浦: 12.0.1 については 64bit対応、Open Java への変更があり、10 から 14 のタイミングで足回りをアップデートしました。その対応も含めて確認したところ、アプリケーションの互換性に関しては問題はありませんでした。 それでも互換性に懸念をお持ちのお客様には、NotesConsortium(ノーツコンソーシアム)で会員特典として利用できる移行チェックツールの使用も検討していただきたいと思います。 NotesConsortium(ノーツコンソーシアム) Domino に関する様々な知識やノウハウを交換、蓄積して会員同志で共有するユーザーコミュニティ 引用 以前のバージョンの環境で動作していたプリケーションの互換性(@関数/LotusScriptのみ) をチェックするツール、アプリケーションコードチェッカー(NDACC)をご提供しています。 カンタン移行判定ツールもご利用頂けます。 引用元:NotesConsortium「会員の特典」|移行支援ツールの提供 移行チェックツールとその効果 ── 実際に 9、10 から、V14、V14.5 へのバージョンアップは、移行チェックツールで試した場合の非互換はどれぐらいでしょうか。 松浦: 非互換はほとんどありません。 一言で非互換といっても、インパクトの程度は異なります。少し見た目が変わってしまうといった軽微なものから、挙動が変わってしまうという大きなものまであります。 移行チェックツールも過去20年以上の歴史があり、インパクトが小さい内容もチェックする仕組みでしたが、今はインパクトが小さい内容はチェックから外せるようになりました。 ── 非互換性の影響が少なく、迅速かつ正確な対応が可能であれば、安心してバージョンアップできますね。 松浦: もちろんインパクトの大小に関わらずチェックすることもできるので、気になる方は互換性に関するすべての内容を把握できます。すべてを確認していただいても、大きな影響を及ぼすような非互換はほとんどない と思います。 バージョンアップ vs 他社製品への移行 バージョンアップはしないが、移行もしない ── 前半にも話があったとおり、Domino の旧バージョンを利用されているお客様は多いようですね。 松浦: はい、旧バージョンのまま利用されているお客様も多いです。やはり、「バージョンアップをしなくても現状で満足」というのが理由 だと思います。 ── 一方で Domino から別製品への移行を検討されるお客様の声も聞きます。他製品への移行が検討される理由についてはいかがでしょうか。 松浦: DX を旗印に企業の形を大きく変えたいと思われた時に、エンドユーザーが日々使う情報系システムを刷新するのは象徴的だと思います。特に社外から新しい CIO が来たという様なケースだと顕著です。 引用 DX推進の際の障壁としては、「投資するための予算確保が少ない」が最も多くなっており、今後DXをさらに推進していく上で、約4割が「IT投資にかかる予算の増加」に取り組みたいと回答しました。 引用元:一般社団法人 中小企業個人情報セキュリティー推進協会「アンケート調査レポート」|「DX推進に成功している経営者」の実態調査アンケートの結果について ── DX の観点はひとつの肝かもしれませんね。 松浦: Web対応やモバイル対応、AI対応への再投資に対して、もっと価値を出していけるのではないかと考えています。 ── ただ、基幹的な情報系システムだと、気軽に移行するわけにはいかないですよね。 松浦: 他社ツールへのスイッチングコストの中には教育費を含め色々なものが発生するので、それだけお金をかける価値があるのかということに悩みながら検討されていると感じます。 やはりコストが大きいということで、移行ではなく共存で落ち着く ことがかなり多いですね。 HCL Domino の運用事例 内製化で自社の強みを生かしたDXを実践(日経XTECH) 20年で培ったデジタルカイゼンの文化 エームサービスの現場とIT部門をつなぐNotes(ZDNET Japan) 結論!バージョンアップが最適解 ── 他社製品への移行リスクや未知のコストも考えると、Domino を利用し続けるのがよさそうですね。 松浦: 異なる基盤でも併用して共存でき、互換性も担保されている ので最新バージョンアップでの利用をお勧めします。 ── ここまでの話以外で、他社製品への移行が検討される理由はありますか? 松浦: お客様から、Notesクライアントの強力な機能は変わらずご評価いただきながらも、そのインストールやセットアップなどの運用管理はやはり大変だ、という声もいただいております。 ── 最新バージョンでも同様でしょうか? 松浦: 最新バージョンでは改善されています。具体的には、V14 では ブラウザベースで Notesクライアントとほぼ同じようなことができる「HCL Nomad」という機能があります。特長は、専用Notesクライアントのインストールが必要ない点と、ブラウザベースなので複数の端末から使っていただける点です。 ── 「今までNotesクライアントでしかできなかったことが、Web でもできるようになる」ということでしょうか? 松浦: 例えば、Excelマクロを使った帳票の集計業務などですね。これまでは、Notesクライアント内でオフィス系のアプリケーションを起動するようなものは、ブラウザのセキュリティ制限によりブラウザからの利用ができませんでした。 しかし、2025年6月に出る新バージョン V14.5 は「HCL Nomad Web」が COM をサポートするのが目玉機能の1つで、Nomad Web から Excel や Word や PowerPoint を起動してマクロ実行などができるようになります。 ── V14.5 における進化の1つですね。 松浦: はい、バージョンアップの利点ともいえます。 すでに、以前から使用されているお客様がトライアルを始めている という状況です。 バージョンアップを推奨する理由 新旧バージョンの互換性を担保している。 コミュニケーション基盤が別製品でも、Domino を併用できる。 Domino IQ の実装/HCL Nomad Web の COMサポート HCL Domino について問い合わせる 今後の戦略 V14.5 は 描いたロードマップの答え合わせになるバージョン ── 今後の HCL の Domino のロードマップ、戦略はどのようになっているでしょうか。 松浦: この夏に出荷予定の V14.5 では実行環境のアップデートやスマホ・Web対応の進化や生成AI連携など、HCL になってから大きく描いたロードマップの答え合わせになるバージョンです。 アプリケーションを作り、うまく使ってもらう というのが、Domino の軸になっていると思います。Notesクライアントで動くアプリケーションから Webブラウザやモバイルで動くアプリケーションまで、様々なものがあります。それらを支えていくというのが Domino の DNA です。 ── 確固たる理念と設計思想があるのですね。支えるためには、Web対応や生成AI連携なども見越した拡張性も重要だと。 松浦: 作成したアプリケーションを拡張していくという方向性として API連携が挙げられます。Domino だけで全ての業務が回るとは考えていないので、周辺の製品サービスとの連携が簡単にできる というのがポイントの1つです。 兄弟製品に繋げる二段構えの展開 ── バージョンアップ以外での、ビジネス戦略は何かありますか? 松浦: アーキテクチャは異なりますが、開発環境の観点も含めれば兄弟製品といえるものがあります。 例えば Volt MX という製品には、モバイルOS を含む様々なプラットフォームのネイティブアプリケーションを作る機能があり、単一の開発環境で作成できます。 ── 開発するアプリケーションによって、戦略の幅が広がりますね。 松浦: Volt MX は一例ですが、プラットフォームを問わず使っていただけるような 本格的なアプリケーションについては兄弟製品 に繋げていく、という二段構えの戦略を考えています。 ── 兄弟製品への横展開…Domino が秘めるビジネスの可能性といえそうですね。 松浦: 今後のロードマップは、我々が描いた V14.5 の評価をユーザーから得ながらアプリケーションの軸はぶらさずに兄弟製品と補完しながら作っていく予定です。 ── Volt MX 以外に、どのような兄弟製品がありますか? 松浦: Nomad Web Designer、Domino Leap という製品があり、どちらもブラウザで動きます。 Domino Leap は、エンドユーザー様が『ITの専門知識を必要とせずに簡単にアプリケーションを作成したい』というローコードの需要を補完できるツールとして位置づけています。 Nomad Web Designer は今まで Windows PC でしか提供されなかった Domino Designer を MacOS でも同じように使えるようにしたイメージです。 ── いくつもの製品があり今後の展開も楽しみですが、まずは V14.5 からですね。 松浦: 旧バージョンをご利用中のお客様においては、まず他社製品との連携までかと思っています。 今は塩漬けの状態で、Domino の中だけで流通している情報があると思うので、それを他のシステムにも流通させてもらいたいですね。 1つの製品内だけでは情報の流れが停滞することもあると思います。業務の活性化のためにも、他社製品やAIとうまく連携し Domino を『情報の流れを淀ませないような解決策』という位置づけ に持っていきたいという思いもあります。 HCL 様からのメッセージ 過去にとらわれない新たな事例でアプローチ ── 長年 Domino を販売されているパートナー様に、特にお伝えしたいことはありますか。 松浦: HCL に移ってから使っていただいてるお客様から、「色々なツールを使っているが、やはり Domino は凄く良い製品だよね」という声をいただくことがとても増えている気がします。 お客様がやりたいことに耳を傾けると、今までにない新しい使い方 もどんどん出てきます。 弊社サイトで公開しているお客様事例にも掲載しているので、Domino を長らく販売していただいているパートナー様はもちろん、Domino の販売に興味をお持ちの企業様にも、ぜひご覧いただければ嬉しいです。 Domino はかゆいところに手が届く業務アプリを作るには最適なツールだと思うので、そこを強みとしてどんどんビジネスを仕掛けて欲しいと思っています。 インフラの観点においても、堅牢でパフォーマンスのいい製品に仕上がっていますし、他の SaaS製品との連携も充実しているので、「今までの Domino ってこうだよね」という枠の中だけで考えずに 販売していただきたいと思います。 V14.x を避けて V12 にする意味はない ── では最後に、Dominoユーザー様、パートナー様へのメッセージをお願いします。 松浦: Domino に限らず、バージョンアップの際は『どのバージョンにするか』を迷われるケースがよくあります。 今回のバージョンアップは V14.5 と刻まれたバージョンなので、V14 や V12 という実績があるバージョンを検討したいと思われるお客様もいるかと思いますが、この度 V14.0 の非互換検査をしたところ、12.0.1以上であればアップデートされたプラットフォームとして動作が変わらないことが分かりました。つまり、『14.5 もしくは 14 を避けて V12 にする意味はない』 ということなので、ぜひ最新バージョンを検討していただきたいと思います。 14.5 も新機能を使わなければ 14 と同じような挙動なので、保守期間が残っている新バージョンを使っていただいて、興味のある新機能にトライしていただくのが良いのかなと考えています。 ── 本日はありがとうございました。 HCL Domino について問い合わせる まとめ ここまで HCL Domino の新バージョンや今後の展開など、多岐にわたり HCLSoftware 松浦様にお伺いしてきました。 最後に、前半の話を含め HCL Domino の特長となる強みとバージョンアップを推奨する理由をまとめます。 HCL Domino の強み 高い開発生産性と堅牢性 簡潔で迅速なアプリケーションの開発。 長期的に使用されることに適した、運用の安定性。 優れた互換性と柔軟性 チェックツールにより、新旧バージョンの互換性を担保している。 古いバージョンのデータやアプリケーションも最新バージョンで動作可能。 コミュニケーション基盤が別製品でも、Domino を併用できる。 新バージョン V14.5 の新機能「Domino IQ」 セキュリティを確保しながら自社データを活用した生成AI の活用が可能。 過去のナレッジを活用し、業務改善を支援。 Domino の現状とバージョンアップを推奨する理由 Domino の現状 Domino は35年以上にわたり利用されている製品で、現在も市場は活況。 ユーザー数は多く、旧バージョンのまま利用される「塩漬け運用」も多い。 バージョンアップを推奨する理由 サポートが終了したテクノロジーへの脆弱性対応として必要。 新旧バージョンの互換性を担保している。 Domino は他社製品との共存が可能。 新バージョンは V14.5で、新たな機能が追加された。 (本ページは後半です[前半も公開中]) HCL Domino について問い合わせる このページを見ている人におすすめのページ 安定の裏に潜む意外な悩み?HCLに聞く「HCL Domino」のバージョンアップにおける課題と意義(前編) HCL Domino 製品紹介ページ Com-PASS Cloud|Domino Notes アプリのお預かりサービス .recommend-list{ margin-top: 0px; } ol.recommend-list li { color: #9b9b9b; } #recommend{ font-family: "Noto Sans Japanese"; font-size: 16px; font-weight: 700; color: #9b9b9b; border: none; padding: 0; margin-bottom: 10px; } .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:30px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#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; } .interviewee { font-weight: bold; } figcaption { color: #7c7f78; font-size: smaller; } #box03 { position: relative; margin: 4em 0; padding: 0.5em 1em; border: solid 3px #95ccff; border-radius: 8px; } #box03 .box-title { position: absolute; display: inline-block; top: -13px; left: 10px; padding: 0 9px; line-height: 1; font-size: 19px; background: #FFF; color: #95ccff; font-weight: bold; } #box03 p { margin: 5px; padding: 0; font-weight: bold; } #box04 { position: relative; margin: 4em 0 0 0; padding: 0.5em 1em; border: solid 3px #62c1ce; } #box04 .box-title { position: absolute; display: inline-block; top: -27px; left: -3px; padding: 0 9px; height: 25px; line-height: 25px; font-size: 17px; background: #62c1ce; color: #ffffff; font-weight: bold; border-radius: 5px 5px 0 0; } #box04 p { margin: 0; padding: 0; } #box_blockquote { position: relative; margin: 4em 0; padding: 0.5em 1em; border: solid 3px #8d8d8d; } #box_blockquote .box-title { position: absolute; display: inline-block; top: -27px; left: -3px; padding: 0 9px; height: 25px; line-height: 25px; font-size: 17px; background: #8d8d8d; color: #ffffff; font-weight: bold; border-radius: 5px 5px 0 0; } #box_blockquote p { margin: 0; padding: 0; } .memo{ color:#53851b ; background-color: #c8d7b7; font-size:70%; } #blockquote_nicp{ padding:10px; margin-bottom:0px; background-color:#ffffff; } #blockquote_nicp_link{ color:#7c7f78; font-size:70%; } #h5_nicp{ font-size: 12px; padding:4px 10px; border:none; background-color:#afd2f453; }

2025年06月09日

安定の裏に潜む意外な悩み?HCLに聞く「HCL Domino」のバージョンアップにおける課題と意義(前編)

Domino が誕生してから35年以上が経過し、IBM から HCL に移管されて丸6年が経ちました。 Domino は、高い開発生産性と堅牢性を兼ね備えたアプリケーション基盤で、長きにわたり企業の業務効率化を支えてきた歴史ある製品です。一方、重ねてきた実績の分だけ、バージョンアップに対する課題も垣間見えます。 今回は、エイチシーエル・ジャパン株式会社 HCLSoftware のテクニカルリードである松浦光様に HCL Domino のビジネス状況や今後の展開など、多岐にわたり話を伺いました。前半では「Domino の現状」を中心に、後半では「新バージョンの登場と互換性」をテーマにバージョンアップについてより具体的に語っていただきました。(本ページは前半です[後半も公開中]) 対談者 【ゲスト】 エイチシーエル・ジャパン株式会社 HCLSoftware テクニカルリード 松浦 光 様 【インタビュアー】 エヌアイシー・パートナーズ株式会社 技術企画本部 ソリューション企画部 松田 秀幸 ※対談者情報は2025年6月9日時点 HCL Domino の現状 製品の変遷と現在のビジネス状況 ── Domino が誕生してから35年以上が経過し、IBM から HCL に移管(2019年7月)されてからも丸6年が経ちました。今、HCL としての Domino のビジネス状況はいかがでしょうか。 松浦: 現在も利用していただいているユーザーも多く、市場としては活況です。 見た目や使い勝手も含めた新機能が多く実装されてきた点、バージョンアップのサイクルが非常に良いペース で進んできている点が、ユーザー様、パートナー様から製品投資として評価をいただいてます。 一方、Domino のクラウドに対する対応が SaaS としてではなく Amazon や Google などのクラウドキャリアとの協業による提供に主眼をおいているので、その点が他の SaaS型コミュニケーションツールと比べてもう少しなんとかならないかという声は未だにいただいている状況です。 ── Domino のクラウドに対して、SaaS型コミュニケーションツールとしても期待もされているということですね。 松浦: 運用に関する負荷を下げたいということだと思います。 加えて人材確保やノウハウ継承などの課題に対し、生成AI との連携など新しい領域へのチャレンジがトレンドになっています。 旧バージョンでの利用も多い ── バージョンアップのサイクルといえば、多く利用されているバージョンは何でしょうか? 松浦: お陰様で現時点の最新バージョンである V14 が順調に立ち上がっています。ただ実は、特定のバージョンでいわゆる『塩付け運用』をされているお客様も多くいます。 そのような状況の中で1点、昨年末にあったケースについてお話しさせてください。 2024年12月13日に重要障害が発生し、多くのお客様と関係者の皆様にご迷惑をおかけいたしました。大変申し訳なく思っております。この場を借りて、お詫び申し上げます。 対応として修正モジュールの適用をお願いしておりますが、実はこの障害は35年前のコードに含まれていたもので、Domino のすべてのバージョンで発生していました。 そのような中で、Domino の塩漬け運用をされているお客様、他社移行の事例記事になっており HCL とまったくお取引がないお客様からもお問い合わせをいただいています。 ── 古いバージョンのまま Domino を利用され続けているユーザー様もまだまだ多くいらっしゃる、ということが分かったのですね。 松浦: はい、良くも悪くも先ほどお話したような状態で、HCL と最近お付き合いがないお客様からもお問い合わせをいただくケースがありました。 古いバージョンを利用する際の注意点 ── 古いバージョンのまま利用することへの懸念は何でしょうか? 松浦: Java など サポートが終了したテクノロジーへの脆弱性対応 が懸念されます。 また、旧バージョンでは DXに対して十分な役割を果たせるとは言い難いです。新バージョンでは Web対応やモバイル対応、AI対応での活用もイメージしています。 例えば、新バージョンである V14.5 には、Domino と生成AI を統合した機能もあります。 ──『塩付け運用』をされた場合、サポート面はどうでしょうか。 松浦: 多くの塩漬け運用されているお客様からの声をお聞きすると、サポートが終了したバージョンで安定運用ができていたというのが Domino に対する今までの理解だったと思いますが、今回のようなことだけでなく、脆弱性対応も必要になるので、やはり サポートを受けられるバージョンの必要性 を意識していただけたのではないかと考えています。 Domino が選ばれ続ける理由 情報系基幹システムとしての性能と安定性 ── 旧バージョンでの利用も含め、Domino が利用され続ける理由は何でしょうか? 松浦: 情報系の基幹システムとして必要十分な機能を備えている点が大きいですね。 Domino が誕生した当初から兼ね備えており、「バージョンアップをしなくても現状で満足」というユーザーがいらっしゃる理由になっています。 ── Domino が古いまま使用されるのはなぜか、この点をより詳しくお聞かせください。捨てられないけれどバージョンアップもしない、というのは、なぜでしょうか? 松浦: 例えば、四半世紀前のデータがそのまま最新バージョンでも読み込めるなど、下位互換、上位互換性が非常に高い。動いてしまうがゆえに、使えてしまう。 便利に使っていただけるのはいいことなのですが、やはり15年前、20年前に作ったアプリケーションなので、見た目が古くなってくるというのは当然あります。 Domino でのアプリ開発の優位性 ── 一般的な市場感として Domino はすでに別製品に移行されてしまったという風潮もありますが、いかがでしょうか? 松浦: Domino はアプリケーションの開発生産性が非常に高い製品 だというのは、市場の評価として強くあります。 同じようなアプリケーションを、例えば SaaS型の Webベースの他製品、ノーコードの製品やローコードの製品に切り替えることにチャレンジされているお客様はいらっしゃると思うのですが、なかなかうまくいかないということを伺っております。 ── うまくいかないというのは? 松浦: その製品が悪いとか機能が足りないという話ではなく、Domino だと簡単にでき過ぎてしまうということで、エンドユーザーの満足度を得られないというのが1つの原因だとお客様はおっしゃっています。 他社製品と共存できるメリット ── メールはもう SaaSメールに移行しているという話はよく聞きますが、アプリケーションについては Domino の利用を続けているということでしょうか? 松浦: コミュニケーション基盤に関しては、在宅勤務やリモートワークが一般的になったので、好みの Web会議サービスに付帯したものへ切り替えたというお客様はいらっしゃると思います。 ただ、先ほどの話にあったように、アプリケーションはなかなか切り替えるのが難しいというのがあります。アプリケーション利用のために Domino が残っているというケース、共存されているというケースなど、多々あると思います。 ── Domino 以外のコミュニケーション基盤とアプリケーション基盤としての Domino を併用し、いわば一つのシステムとして使えると。 松浦: はい、その通りです。コミュニケーション基盤は別の製品を、アプリケーション基盤としては Domino を使っている 事例を、弊社ホームページにも事例記事として掲載しています。 ── コミュニケーション基盤とアプリケーション基盤でそれぞれのいいいとこ取りをされているのですね。 松浦: Domino と他製品が共存ができることは、バージョンアップの観点でも大きなポイントだと思います。 ──「基盤が2つあると運用管理も2倍になるのか」という疑問も出そうですが、どのような運用が可能でしょうか。 松浦: コミュニケーション基盤では、例えば1人に1つメールアドレスを発行するのが一般的だと思います。その場合、そちらのディレクトリシステムをメインにし、Domino は二次ディレクトリとして運用することもできます。 また、LDAP(Lightweight Directory Access Protocol)参照で認証委託をさせることもできますし、Dominoディレクトリと他のディレクトリ…例えばAzure AD(Azure Active Directory)のようなディレクトリサービスと連携させて運用している事例も多くあり、各社のやりたいことと運用負荷のバランスを考えて様々な方法がとれます。 なぜ Domino のバージョンを上げないのか 高い互換性が仇になっている?「動いてしまう」ジレンマ ── 互換性が高いということは、バージョンアップの障壁が低いともいえますね。 松浦: 互換性の高さは、単に過去のデータが「動く」以上の価値を提供していると考えています。 もし他社製品に移行する場合、往々にしてデータ移行が膨大なコストや技術的課題を伴い、互換性の問題が原因で取り残されたデータが発生するケースも見受けられます。Domino の場合、こうした課題を意識することなく 過去の資産を活用し続けることが可能 であり、移行リスクや未知のコストを回避 できる点でも独自の競争力を持っています。 ── 一方で、見た目を新しくすることは、バージョンアップの動機にはならない。 松浦: 見た目を新しくする機能もリリースはしていますが、そこに手をつけるよりは塩漬けで使ってしまおう、その方がお金がかからずに済む、ということで、古いバージョンのまま使うという決断をするお客様もいるのかなと思っています。 ── 確かに Notesクライアントだけを見たら、そんなに大きく変わらないですよね。 松浦: アーキテクチャは変わらないですし、Windows で動いてしまえばクリティカルな障害もなければ、上げる理由も作れなかったというところです(笑)。 最新バージョンは、バージョンアップをする理由になるか ── 大きな障害がなく動かせる状況の中で、上げる理由は何かとなると「最新バージョン V14 で何ができるのか」でしょうか。 松浦: そうですね。お客様が最新バージョンに上げる理由としては DX が多い印象です。再投資をする際の Web対応やモバイル対応、AI対応があります。そのようなところで、もっと価値を出していけるのではないかと考えています。 ── V14.5 については、後半でさらに詳しくお聞かせください。 松浦: 最新バージョンには、Domino と生成AI を統合した機能もあります。V14.5 は、大きく進化した面もあるので是非語らせてください(笑)。 ── 楽しみにしています(笑)。後半では、新バージョン V14.5 の新機能やアップデート、互換性についてお聞かせください。 HCL Domino について問い合わせる まとめ ここまで Domino の現状について、HCLSoftware 松浦様にお伺いしてきました。 最後に、前半のまとめと後半のトピックをご紹介します。 前半のまとめ Domino の現状 Domino は35年以上にわたり利用されている製品で、現在も市場は活況。 ユーザー数は多く、旧バージョンのまま利用されるケースも多い。 長期的に利用される理由は、高い開発生産性と安定性。 利用され続ける理由 Domino は情報系基幹システムとして必要十分な機能を備えている。 高い下位互換性と上位互換性があり、古いデータやアプリケーションが最新バージョンでも問題なく動作する。 旧バージョンの課題 特定バージョンを使い続ける「塩漬け運用」が多く、安定性を理由にアップグレードしないユーザーが多い。 古いままでもシステムが動作するため、アップグレードの動機になりにくい。 見た目の改良も費用対効果が低いとして、アップデートしないケースが多い。 Domino のバージョンアップと他社製品への移行 Domino は他社製品との共存が可能。 新バージョンは V14.5で、新たな機能が追加された。 DX領域での価値提供が、バージョンアップの理由となる可能性を秘めている。 次回予告 後半では、より具体的に新バージョン、互換性についてお届けします。 新バージョン V14.5 の機能はもちろん、今後のビジネス戦略も語って頂きました。 新バージョン V14.5 が刻む新たな一歩 生成AI を Domino の中に Domino と生成AI の統合「Domino IQ」 自社のベストプラクティスを得られる Domino による生成AI の活用方法 REST API による効率的なシステム間の連携 バージョンアップの鍵は互換性の安心感 移行チェックツールとその効果 新旧バージョンの互換性は移行チェックツールで担保する バージョンアップ vs 他社製品への移行 バージョンアップはしないが、移行もしない 結論!バージョンアップが最適解 今後の戦略 V14.5 は 描いたロードマップの答え合わせになるバージョン 兄弟製品に繋げる二段構えの展開 HCL 様からのメッセージ 過去にとらわれない新たな事例でアプローチ V14.x を避けて V12 にする意味はない (本ページは前半です[後半も公開中]) HCL Domino について問い合わせる このページを見ている人におすすめのページ 安定の裏に潜む意外な悩み?HCLに聞く「HCL Domino」のバージョンアップにおける課題と意義(後編) HCL Domino 製品紹介ページ Com-PASS Cloud|Domino Notes アプリのお預かりサービス .recommend-list{ margin-top: 0px; } ol.recommend-list li { color: #9b9b9b; } #recommend{ font-family: "Noto Sans Japanese"; font-size: 16px; font-weight: 700; color: #9b9b9b; border: none; padding: 0; margin-bottom: 10px; } .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:30px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#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; } .interviewee { font-weight: bold; } figcaption { color: #7c7f78; font-size: smaller; } #box03 { position: relative; margin: 4em 0; padding: 0.5em 1em; border: solid 3px #95ccff; border-radius: 8px; } #box03 .box-title { position: absolute; display: inline-block; top: -13px; left: 10px; padding: 0 9px; line-height: 1; font-size: 19px; background: #FFF; color: #95ccff; font-weight: bold; } #box03 p { margin: 5px; padding: 0; font-weight: bold; } #box04 { position: relative; margin: 4em 0 0 0; padding: 0.5em 1em; border: solid 3px #62c1ce; } #box04 .box-title { position: absolute; display: inline-block; top: -27px; left: -3px; padding: 0 9px; height: 25px; line-height: 25px; font-size: 17px; background: #62c1ce; color: #ffffff; font-weight: bold; border-radius: 5px 5px 0 0; } #box04 p { margin: 0; padding: 0; } #box_blockquote { position: relative; margin: 4em 0; padding: 0.5em 1em; border: solid 3px #8d8d8d; } #box_blockquote .box-title { position: absolute; display: inline-block; top: -27px; left: -3px; padding: 0 9px; height: 25px; line-height: 25px; font-size: 17px; background: #8d8d8d; color: #ffffff; font-weight: bold; border-radius: 5px 5px 0 0; } #box_blockquote p { margin: 0; padding: 0; } .memo{ color:#53851b ; background-color: #c8d7b7; font-size:70%; } #blockquote_nicp{ padding:10px; margin-bottom:0px; background-color:#ffffff; } #blockquote_nicp_link{ color:#7c7f78; font-size:70%; } #h5_nicp{ font-size: 12px; padding:4px 10px; border:none; background-color:#afd2f453; }

back to top