🐃

Rancher から AKS 構築

2021/12/13に公開

https://qiita.com/advent-calendar/2021/ap-com

はじめに

こちらは エーピーコミュニケーションズ Advent Calendar 2021 13日目の記事となります。

前日にも Rancher の記事が投稿されていたので是非御覧ください。同じ製品を扱っているだけでテンションが上がりますね。

https://qiita.com/miyuk/items/a4ec4c63311b5e6dc136

今回は Rancher を用いて、新規に AKS を構築したいと思います。
Rancher はマルチクラウド・マルチクラスタでデプロイされている Kubernetes を管理できます。AKS や EKS、GKE などのクラウドだけでなく、vSphere や EC2 などのベアメタルへのデプロイ、管理もできるため、複数のクラスタを管理するのに重宝するのではと思います。

環境情報

Rancher:2.6.2

Azure アプリ登録

最初に Rancher から AKS の構築を実行するために Azure 上で「アプリ登録」を行います。アプリを登録することで、Rancher から Azure のリソースを操作するためのクライアント ID やシークレット情報を取得します。

まずは Azure Acitve Directory でアプリ登録を行います。

「Azure Acitve Directory」⇒「アプリの登録」から「新規登録」で作成します。
今回は以下のパラメータで作成しました。

  • 名前:任意
  • サポートされているアカウントの種類:この組織ディレクトリのみに含まれるアカウント
  • リダイレクトURI:パブリック クライアント/ネイティブ(~)、URLは空

次に作成したアプリに Azure ロールを付与します。
「サブスクリプション」⇒「アクセス制御(IAM)」から作成したアプリにロールを付与します。今回は「共同作成者」のロールを付与しました。

https://techblog.ap-com.co.jp/entry/2021/05/17/150212
https://techblog.ap-com.co.jp/entry/2021/05/25/170717

最後に Rancher に登録するシークレットを払い出します。
「Azure Active Directory」⇒「アプリの登録」から先程作成したアプリを選択します。
「概要」ページに「アプリケーション(クライアント)ID」が記載されているのでメモしておきます。

左メニューの「証明書とシークレット」⇒「新しいクライアントシークレット」をクリックします。「説明」、「有効期限」を任意の値で入力し「追加」します。
「値」がクライアントシークレットになるのでメモしておきます。「シークレット ID」は今回利用しません。

ここまでで以下の情報が取得できました

  • サブスクリプション ID
  • アプリケーション(クライアント)ID
  • クライアントシークレット

クレデンシャル登録

先程取得したクレデンシャル情報を Rancher に登録していきます。
Rancher にログインし、左上ハンバーガーメニューから「Cluster Management」⇒「Cloud Credentials」に移動し、右上「Create」ボタンをクリックします。

クレデンシャルのタイプで「Azure」を選択すると以下の画面が表示されます。

「Name」に任意の名前を入力し、「*」が付いた必須項目に前章で取得したクレデンシャル情報を入力します。
取得した情報、権限が適切であれば無事にクレデンシャルが登録されます。

AKS デプロイ

登録できたクレデンシャルを使って AKS をデプロイしたいと思います。
「Cluster Management」の画面の「Clusters」をクリックし、「Create」から作成できます。次の画面で対象のクラウドを選ぶことができるので、「Azure AKS」を選択します。

「Add Cluster」画面でクラスタ名(Cluster Name)を入力します。AKS の名前がこちらになります。
「Cloud Credentials」に登録したクレデンシャルが指定されているのを確認し、「Next: Configure Cluster」をクリックします。

下に「Location」を選択するプルダウンが表示されます。デプロイ先のリージョンを指定します。今回は「Japan East」を選択し「Configure Cluster」をクリックしました。


最後に AKS の設定を入力していきます。

まずは Cluster Options で Kubernetes のバージョンや 作成先の ResourceGroup などを指定します。ノードにアクセスする際のユーザ名や SSH の鍵の指定もここで行います。今回は以下で指定しました。

  • Kubernetes Version:1.21.2(デフォルト)
  • Cluter Resource Group:任意(既にあるリソースグループを指定)
  • Linux Admin Username:azureuser(デフォルト)
  • Cotainer Monitoring:チェックオフ
  • 他:デフォルト

次に Networking Options です。
ここでは AKS のネットワーク設定を指定します。ネットワークプラグインなどを指定できます。また、advanced options として、Private Cluster も指定できます。
ここでは以下を指定しました。

  • DNS Prefix 以外:デフォルト
  • DNS Prefix:任意(aks-dns-<クラスタ名>-<Resource Group 名> で指定)
    ※数字、英字とハイフンだけ指定可能

DNS Prefix については、以下がポータルの説明文の引用となります。

ホストされた Kubernetes API サーバー FQDN で使用する DNS 名プレフィックス。クラスターの作成後にコンテナーを管理するときに、これを使用して Kubernetes API に接続します。

最後にノードプールの設定です。実際にコンテナが稼働するノードに関連する設定となります。AZ の設定や VM のサイズ、オートスケールの設定ができます。
ここでは以下で指定しました。

  • Enable Auto Scaling:チェック
    • Min Node Coumt:1
    • Max Node Count:3

最後に Create でデプロイが始まります。
デプロイが始まるとプロビジョニングの状況を表示してくれます。

クラスタの画面に遷移すると詳細なデプロイ状況も見れます。

ちなみにデプロイが失敗すると以下のようにエラーと表示されます。今回は Azure あるあるの VM のクォータに引っかかってエラーとなっています。ヘルプからクォータを上げてリトライですね。

デプロイが完了すると以下のように Active になります。しかし、Explorer ボタンがいつまで経っても非活性・・・

Azure Cloud Shell から kubectl で確認したところ、cattle-cluster-agent が CrashLoopBackOff に。。。

cattle-system         cattle-cluster-agent-555744b8f8-hcq6f   0/1     CrashLoopBackOff   6          8m44s

ログを確認すると Rancher との通信ができないとのこと・・・グローバルのDNSに登録していないツケがここで・・・

ERROR: https://www.rancher.internal/ping is not accessible (Could not resolve host: www.rancher.internal)

今回はここまでにしようと思います。DNS の解決は、また機会がありましたら・・・

まとめ

今回は Rancher から AKS をデプロイしてみました。GUI で簡単にデプロイできるのは、初学者にも易しいですし、そのまま Rancher の管理化におけるのも便利でした。
Azure の場合はアカウントや権限周りの理解が少し難しかったので、その辺りはもう少し復習する必要があると思いました。

Discussion