はじめに
Azure Red Hat OpenShift で遊んでみよう。Azure上にRed Hat OpenShiftを構築できるサービスです。
これはQiita Advent Calendar 2022 の記事になります。
-
Azure - Qiita Advent Calendar 2022 - Qiita
Calendar page for Qiita Advent Calendar 2022 regarding Azure.
qiita.com
予定のネタはあったのですが、11月は30日までしかなかった事実を突きつけられました(w
という訳でOpenShift クラスターで遊んでみたいと思います。
問題発生
さてポータルから作成するか・・・おっふ何かエラーが!
うーむ原因はわかりませんでした。クォーターなども関係ないと思います。350vCPUなのに。
埒が明かないのでCLIで構築していきましょう。
構築
チュートリアルを参考に構築していきます。省略可能な設定はぶっ飛ばしてます。
-
Azure Red Hat OpenShift 4 クラスターを作成する - Azure Red Hat OpenShift | Microsoft Learn
Azure CLI を使用して Microsoft Azure Red Hat OpenShift クラスターを作成する方法を学習します
learn.microsoft.com
CloudShell(Bash)を開きます。
必要な変数を用意しておきます。
LOCATION=westus2 RESOURCEGROUP=openshiftcluster CLUSTER=openshiftcluster
リソースグループの作成
最初にリソースグループを作成します。
az group create \ --name $RESOURCEGROUP \ --location $LOCATION
結果
{ "id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster", "location": "westus2", "name": "openshiftcluster", "properties": { "provisioningState": "Succeeded" }, "type": "Microsoft.Resources/resourceGroups" }
仮想ネットワークの作成
クラスターを構築する仮想ネットワークを作成します。
az network vnet create \ --resource-group $RESOURCEGROUP \ --name aro-vnet \ --address-prefixes 10.0.0.0/22
結果
{ "newVNet": { "addressSpace": { "addressPrefixes": [ "10.0.0.0/22" ] }, "bgpCommunities": null, "ddosProtectionPlan": null, "dhcpOptions": { "dnsServers": [] }, "enableDdosProtection": false, "enableVmProtection": null, "encryption": null, "etag": "W/\"9fa68568-15a8-4f36-be7a-66f05ffedb41\"", "extendedLocation": null, "flowTimeoutInMinutes": null, "id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster/providers/Microsoft.Network/virtualNetworks/aro-vnet", "ipAllocations": null, "location": "westus2", "name": "aro-vnet", "provisioningState": "Succeeded", "resourceGroup": "openshiftcluster", "resourceGuid": "4b7b47d1-37b5-4274-bbff-bb901dfbd7ca", "subnets": [], "tags": {}, "type": "Microsoft.Network/virtualNetworks", "virtualNetworkPeerings": [] } }
サブネットの作成
MasterとWorkerのサブネットを作成します。
最初にMasterのサブネットを作成。
az network vnet subnet create \ --resource-group $RESOURCEGROUP \ --vnet-name aro-vnet \ --name master-subnet \ --address-prefixes 10.0.0.0/23
結果
{ "addressPrefix": "10.0.0.0/23", "addressPrefixes": null, "applicationGatewayIpConfigurations": null, "delegations": [], "etag": "W/\"cbad4a4d-e1ba-48ac-8fc9-06d34076e10e\"", "id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/master-subnet", "ipAllocations": null, "ipConfigurationProfiles": null, "ipConfigurations": null, "name": "master-subnet", "natGateway": null, "networkSecurityGroup": null, "privateEndpointNetworkPolicies": "Disabled", "privateEndpoints": null, "privateLinkServiceNetworkPolicies": "Enabled", "provisioningState": "Succeeded", "purpose": null, "resourceGroup": "openshiftcluster", "resourceNavigationLinks": null, "routeTable": null, "serviceAssociationLinks": null, "serviceEndpointPolicies": null, "serviceEndpoints": null, "type": "Microsoft.Network/virtualNetworks/subnets" }
次にWorkerのサブネットを作成。
az network vnet subnet create \ --resource-group $RESOURCEGROUP \ --vnet-name aro-vnet \ --name worker-subnet \ --address-prefixes 10.0.2.0/23
結果
{ "addressPrefix": "10.0.2.0/23", "addressPrefixes": null, "applicationGatewayIpConfigurations": null, "delegations": [], "etag": "W/\"67f36d3a-c636-4bef-8ce0-99e3437e1ea2\"", "id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/worker-subnet", "ipAllocations": null, "ipConfigurationProfiles": null, "ipConfigurations": null, "name": "worker-subnet", "natGateway": null, "networkSecurityGroup": null, "privateEndpointNetworkPolicies": "Disabled", "privateEndpoints": null, "privateLinkServiceNetworkPolicies": "Enabled", "provisioningState": "Succeeded", "purpose": null, "resourceGroup": "openshiftcluster", "resourceNavigationLinks": null, "routeTable": null, "serviceAssociationLinks": null, "serviceEndpointPolicies": null, "serviceEndpoints": null, "type": "Microsoft.Network/virtualNetworks/subnets" }
クラスターの作成
これでクラスターを作成できます。デフォルトの設定で行われます。サービスプリンシパルも勝手に作成されます。
作成には通常35分かかります
az aro create \ --resource-group $RESOURCEGROUP \ --name $CLUSTER \ --vnet aro-vnet \ --master-subnet master-subnet \ --worker-subnet worker-subnet
結果
No --pull-secret provided: cluster will not include samples or operators from Red Hat or from certified partners. { "apiserverProfile": { "ip": "20.59.38.126", "url": "https://api.vwtwulbg.westus2.aroapp.io:6443/", "visibility": "Public" }, "clusterProfile": { "domain": "vwtwulbg", "fipsValidatedModules": "Disabled", "pullSecret": null, "resourceGroupId": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/aro-vwtwulbg", "version": "4.10.20" }, "consoleProfile": { "url": "https://console-openshift-console.apps.vwtwulbg.westus2.aroapp.io/" }, "id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster/providers/Microsoft.RedHatOpenShift/openShiftClusters/openshiftcluster", "ingressProfiles": [ { "ip": "20.3.92.78", "name": "default", "visibility": "Public" } ], "location": "westus2", "masterProfile": { "diskEncryptionSetId": null, "encryptionAtHost": "Disabled", "subnetId": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/master-subnet", "vmSize": "Standard_D8s_v3" }, "name": "openshiftcluster", "networkProfile": { "podCidr": "10.128.0.0/14", "serviceCidr": "172.30.0.0/16" }, "provisioningState": "Succeeded", "resourceGroup": "openshiftcluster", "servicePrincipalProfile": { "clientId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientSecret": null }, "systemData": { "createdAt": "2022-11-30T17:42:12.708386+00:00", "createdBy": "a@acom", "createdByType": "User", "lastModifiedAt": "2022-11-30T17:42:12.708386+00:00", "lastModifiedBy": "a@acom", "lastModifiedByType": "User" }, "tags": null, "type": "Microsoft.RedHatOpenShift/openShiftClusters", "workerProfiles": [ { "count": 1, "diskEncryptionSetId": null, "diskSizeGb": 128, "encryptionAtHost": "Disabled", "name": "openshiftcluster-np6vl-worker-westus21", "subnetId": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/worker-subnet", "vmSize": "Standard_D4s_v3" }, { "count": 1, "diskEncryptionSetId": null, "diskSizeGb": 128, "encryptionAtHost": "Disabled", "name": "openshiftcluster-np6vl-worker-westus22", "subnetId": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/worker-subnet", "vmSize": "Standard_D4s_v3" }, { "count": 1, "diskEncryptionSetId": null, "diskSizeGb": 128, "encryptionAtHost": "Disabled", "name": "openshiftcluster-np6vl-worker-westus23", "subnetId": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/openshiftcluster/providers/Microsoft.Network/virtualNetworks/aro-vnet/subnets/worker-subnet", "vmSize": "Standard_D4s_v3" } ] }
クラスターに接続
クラスターに接続するには、最初にパスワードを確認します。
az aro list-credentials \ --name $CLUSTER \ --resource-group $RESOURCEGROUP
結果
{ "kubeadminPassword": "M9e6y-86VWH-XXXXX-XXXXX", "kubeadminUsername": "kubeadmin" }
ブラウザからアクセスするためのURLを確認します。
az aro show \ --name $CLUSTER \ --resource-group $RESOURCEGROUP \ --query "consoleProfile.url" -o tsv
結果
https://console-openshift-console.apps.vwtwulbg.westus2.aroapp.io/
出力されたURLにアクセスしてみます。上記のユーザー名、パスワードを利用してログインします。
ダッシュボードが表示されています。
折角なのでhttpdを構築してみましょう。
Webサーバーを立ち上げる
Webサーバーと言ってもnginxを立ち上げて、外部からアクセスできるようにするだけです。
Podの作成
メニューからPodを開き作成します。
サンプルが入っていますがnginxが立ち上がるようにYAMLを書き換えます。k8sと同じで大丈夫です。
作成後はRunningされることを確認します。
Serviceを設定する(ロードバランサー作成)
外部に公開するためにロードバランサーを配置します。
tyoe:LoadBalancerを追加してappもpodのapp名に変更します。
あとは作成されるのを待ちます。作成後にサービスアドレスが表示されるのでブラウザからアクセスします。
アクセスできればOKです。これでOpenShiftでnginxが動いた感を感じてもらえると思います。
当然、PodでのCPUの使用率なども確認することができます。
まとめ
GUIは最高ですね。OpenShift は初めて起動してみました。ポータルからだとエラーが出た理由も分からない感じでしたが、CLIで行うと非常に簡単に行えました。また、Podを立ち上げただけですがすべてがブラウザで対応できるため、運用するには非常に強力なツールになると思います。機能は様々あるのですが、今回はここまでです。