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 |
(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)
{ |
(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
{ |
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 |
(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}
{ |
(2)リソースグループの Azure アイデンティティーを作成
$ az identity create -g ${RESOURCE_GROUP} -n ${INFRA_ID}-identity
{ |
(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}”
{ |
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. |
(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}
{ |
コピーがスタートしたら、コマンドを実行してステータスを確認します。「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
{ |
続いて、生成された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”
{ |
3-5. DNSゾーンの作成
(1)プライベートDNSゾーンを作成
$ az network dns zone create -g ${BASE_DOMAIN_RESOURCE_GROUP} -n \${CLUSTER_NAME}.${BASE_DOMAIN}
{-Finished .. |
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 .. |
(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 .. |
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 .. |
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 .. |
(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
{ |
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 .. |
(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 .. |
(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 .. |
(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… $ az network nsg rule delete -g ${RESOURCE_GROUP} –nsg-name ${INFRA_ID}-nsg –name bootstrap_ssh_in About to power off the specified VM… $ az vm deallocate -g ${RESOURCE_GROUP} –name ${INFRA_ID}-bootstrap |
(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… |
(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”. |