Azure

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

はじめに

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

-Azure