はじめに
Azure Arc enabled Kubernetesとは
Kubernetesのクラスターといっても、AKSではなく、オンプレでたてたモノやGCP, AWSで稼働するものが色々あります。
それをAzureに接続してAKSと似た感覚で使用できるようにするのが、Azure arc enabled Kubernetesです。
すみません。知ってるっぽい雰囲気で書きましたが最近知ったばかりで実はよく知りません。
このサイトにはとても分かりやすい図がはいっていますが、Azure Arc enabled Kubernetes agentをクラスター内にインストールして、それがAzureと繋がる、というものとなります。
Monitoringの有効化とは
AKSで稼働しているなら、Azure MonitorのContainer insightsにより動作を監視したりとか、アラートを飛ばす設定をしたり色々とできるかと思います。
Azure Arc enabled Kubernetesの設定をしたクラスターにすこし設定をしてあげると、たとえオンプレでも他のクラウドサービスで稼働していても、Azure Portalから同様のことができるようになります。
各種手順
ここでは、試しにインストールした時のメモを残しておきます。
1.事前準備
すこし手間取ったところも入っているので、細かいところは気にしないで、不要な場合は読み飛ばしてください。
今回試しにAzure Arc enabled Kubernetesの対象としたのは、Windows 10 Proで稼働するMinikubeとなります。
そのPCにはMinikubeがインストールされていなかったので、そこから書きます。
さらに、後述されるインストール用スクリプトに関連することとしてChocolatyやAzure CLIの最新版インストールに進行が阻まれたので、それも記載します。
2. Chocolatyのインストール
Chocolatyは後続の手順のMinikube、Helmのインストールで使用します。
https://chocolatey.org/ → このサイトのインストール手順に従います。
3. Minikubeのインストール
テスト用のクラスターをWindowsの中で動かすためにしようします。
https://v1-18.docs.kubernetes.io/docs/tasks/tools/install-minikube/ → このサイトのインストール手順に従います。
4. Helmのインストール
HelmはKubernetesで稼働するPODのインストールをお手伝いする便利なツールです。
後続の手順に出てくる、Monitoringの有効化の手順で、インストーラーのスクリプトが内部でこれを使用します。
https://helm.sh/docs/intro/install/ → このサイトのインストール手順に従います。
5. Azure CLIのインストール
Azure CLIは後続の手順の"Kubernetes - Azure Arc"リソースを作成する途中で使用します。
最新版が入っていないとインストーラーが稼働して面倒になります。
https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows?tabs=azure-cli → このサイトのインストール手順に従います。
6. Kubernetesクラスターの作成
次のように操作して、Minikube上にクラスターを作成します。
どれでもいいとは思いますが、今回はHyper-Vを使用して作成しました。
後続の手順では、管理者権限は不要です。
- 管理者権限でPowerShellコンソールを起動します。
- 次のコマンドを実行して、クラスターを作成します。
- 正常に作成ができたら、コンソールを閉じます。
minikube --kubernetes-version 1.16.15 --driver=hyperv start
また、ここで1.16.15を指定しています。これはよく調べていないのですが、バージョン番号を指定しないで作成した場合には後続のAzure Arc enabled Kubernetesの設定の手順で警告が出ていたので、このようになっています。おそらくこれは不要だったかもしれません。
Unable to install helm release: W0405 16:09:25.775265 9884 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
Azure Arc enabled Kubernetesの設定
次の手順で操作して、MinikubeのクラスターをAzure Arc enabled Kubernetesとして接続させます。
1. Azure Subscriptionの作成
持っていない場合は無料枠を使用して作成します。
2. Azure Arc enabled Kubernetesの作成
新規リソース作成の画面で、"Azure Arc Kubernetes"と検索すると出てきます。
https://portal.azure.com/#create/Microsoft.ConnectedCluster
手順としては、1~5までありますが、このAzure Portal上からすることはほとんどありません。
(1) Prerequisitesのタブ
(2) Cluster detailsのタブ
各種設定をします。
-
Resource group
で、適当なリソースグループ名の指定をします。必要な場合は、Create newを押して新規に作成します。 -
Cluster name
で、新しく作られるAzure Arc enabled Kubernetesリソースの名前を入力します。 -
Region
には、適当なリージョンを指定します。注意点としては、今のところ使用可能なリージョンに限りがあります。私は(US) East US 2
を選びました。 -
Is cluster behind proxy server?
には、そのままNoを選びました。おそらくオンプレなどでProxyを必要とするサーバーで使用したりするものでしょうか。
(3) Tagsのタブ
(4) Run scriptのタブ
Script type
で、ここではPower Shellを選択します。
コピーアンドペーストでこのコマンドをPowerShellコンソールで実行するか、もしくはダウンロードボタンによりスクリプトをダウンロードします。Download .ps1
ボタンからCreateConnectedClusterScript.ps1
をダウンロードした場合、そのままではセキュリティーのために実行不能となっているため、エクスプローラーでファイルのプロパティを開いてからUnlockする必要があります。
実行中には、初めにAzureへのログインが求められます。その後、待機しているとAzure Arcのリソースにクラスターが登録されます。
実行中には、いくつかのPodがAgentとしてazure-arc
のNamespaceにインストールされます。
なお、手元では、次のようなメッセージが出たのですが、クラスターのバージョンを調整すると直るかもしれません。
Ensure that you have the latest helm version installed before proceeding.
This operation might take a while...
'Custom-locations' feature couldn't be enabled on this cluster as the pre-requisite registration of 'Microsoft.ExtendedLocation' was not met. More details for enabling this feature later on this cluster can be found here - https://aka.ms/EnableCustomLocations
(5) Verificatoinのタブ
ここまで来ると終了となります。作成されたリソースを確認するために、Go to the cluster
を押します。
作成されたAzureリソースの確認
作成されたKubernetes - Azure Arcのリソースを開くと、次のようになります。
クラスターがminikubeであることや、使用されているバージョン番号が特に手元で指定していなくても、この画面に反映されています。
また、左のメニューにはGitOpsやPoliciesの設定があります。
Monitoringの設定
先の手順で紐づけしたMinikubeのクラスターでAzure Monitorを使用するためには、このドキュメントに従って設定をします。
ここでは、PowerShellのスクリプトを使用しますが、現在は一部に動作しない箇所があるのでそこだけ注意して進めます。
(1) PowerShell スクリプトのダウンロード
PowerShellコンソールを開きます。そこで、PowerShellスクリプトのダウンロードをします。
Invoke-WebRequest https://aka.ms/enable-monitoring-powershell-script -OutFile enable-monitoring.ps1
ダウンロードされたスクリプトenable-monitoring.ps1
をそのまま実行すると、後半のHELMの動作のところでエラーが発生します。そこで、このスクリプトをテキストエディタで開き、行67の$mcrChartVersion = "2.8.2"
を$mcrChartVersion = "2.8.1"
に変更して保存します。
これは一時的な問題であり、しばらくするとこの作業は不要になるはずと思います。
(2) PowerShell スクリプトの実行
PowerShellコンソールで引き続き、変数の定義のうえで、先ほどのスクリプトを実行します。
このスクリプトの実行により、Minikubeのkube-system
namespaceにMonitoringのためのAgentのPodのインストールと、Azure SubscriptionにLog Analytics Workspace Resource Groupの作成がされるようです。
# リソースIDの指定:この変数は、先の"作成されたAzureリソースの確認"の手順のURLの一部をコピーアンドペーストすると簡単に値を定義できます。
$azureArcClusterResourceId = "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Kubernetes/connectedClusters/<clusterName>"
# KubernetesのContextの名前を指定(`kubectl config get-contexts`で表示される名前と同様のものを指定する)
$kubeContext = "minikube"
# 実行
.\enable-monitoring.ps1 -clusterResourceId $azureArcClusterResourceId -kubeContext $kubeContext
実行後に、Successfully enabled Azure Monitor for containers for cluster: ...
と出たら終了です。
(3) Azure PortalでMonitorを確認
再度、"作成されたAzureリソースの確認"の時と同様に、Azure Portalを開きます。
左メニューからMonitoring配下の"Insights"や"Metrics"をみると、クラスターの稼働している状態を確認できます。
費用
維持費はどの程度かは調べていないので、すみませんが他のドキュメントを参照してください。
6 vCPUまで無料とあります。
Azure Policyで¥672/Server/Monthと書かれているので、もしかするとこれがかかるのかもしれないです。
最後に
Azure Arc enabled Kubernetesは最近GAされたものです。事前準備のあたりで少し手間取ったものの、それ以降のセットアップはスムーズにできました。
仕事ではオンプレのシステムの管理を容易にするなどありますが、それ以外にも、個人で作成したRaspberry PIのKubernetesクラスターで使うようにでもしても良いなと思ったりしました。
おわり