はじめに
Azure Red Hat OpenShift で遊んでみよう。Azure上にRed Hat OpenShiftを構築できるサービスです。
これはQiita Advent Calendar 2022 の記事になります。
予定のネタはあったのですが、11月は30日までしかなかった事実を突きつけられました(w
という訳でOpenShift クラスターで遊んでみたいと思います。
問題発生
さてポータルから作成するか・・・おっふ何かエラーが!

うーむ原因はわかりませんでした。クォーターなども関係ないと思います。350vCPUなのに。
埒が明かないのでCLIで構築していきましょう。
構築
チュートリアルを参考に構築していきます。省略可能な設定はぶっ飛ばしてます。
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を立ち上げただけですがすべてがブラウザで対応できるため、運用するには非常に強力なツールになると思います。機能は様々あるのですが、今回はここまでです。
