Azure

Azure Red Hat OpenShift にnginxを立ち上げて遊んでみよう

はじめに

Azure Red Hat OpenShift で遊んでみよう。Azure上にRed Hat OpenShiftを構築できるサービスです。

これはQiita Advent Calendar 2022 の記事になります。

Azure - Qiita Advent Calendar 2022 - Qiita
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 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を立ち上げただけですがすべてがブラウザで対応できるため、運用するには非常に強力なツールになると思います。機能は様々あるのですが、今回はここまでです。

-Azure