Azure

Azure Kubernetes Fleet Manager でアプリケーションをデプロイする

はじめに

前回に引き続きAzure Kubernetes Fleet Managerの利用方法です。

Azure Kubernetes Fleet Manager でクラスタ間を連携する - 技術的な何か。
Azure Kubernetes Fleet Manager でクラスタ間を連携する - 技術的な何か。

はじめに Kubernetesでクラスタ間での連携する場合にはマルチクラスタや、サービスメッシュが思い浮かぶと思います。ASKではAzure Kubernetes Fleet Managerという機能

level69.net

Fleet Managerを追加したので次はアプリケーションを展開していきます。

環境変数

前回構築した環境を環境変数に設定します。

export GROUP=
export FLEET=
export MEMBER_CLUSTER_1=aks-member-1
export MEMBER_CLUSTER_2=aks-member-2
export MEMBER_CLUSTER_3=aks-member-3

az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet
az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1
az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_3} --file aks-member-3

デプロイ

デプロイするネームスペースを作成します。

KUBECONFIG=fleet kubectl create namespace hello-world

crp.yamlにClusterResourcePlacementを作成します。

fleet.azure.com/location: eastusを指定することでeastusだけに展開されるようになります。

apiVersion: fleet.azure.com/v1alpha1
kind: ClusterResourcePlacement
metadata:
  name: hello-world
spec:
  resourceSelectors:
    - group: ""
      version: v1
      kind: Namespace
      name: hello-world
  policy:
    affinity:
      clusterAffinity:
        clusterSelectorTerms:
          - labelSelector:
              matchLabels:
                fleet.azure.com/location: eastus

デプロイします。

KUBECONFIG=fleet kubectl apply -f crp.yaml

成功を確認します。

KUBECONFIG=fleet kubectl get clusterresourceplacements

結果

NAME          GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
hello-world   1     True        1              True      1            24s

各クラスターを確認

# KUBECONFIG=aks-member-1 kubectl get namespace hello-world
NAME          STATUS   AGE
hello-world   Active   35s
# KUBECONFIG=aks-member-2 kubectl get namespace hello-world
NAME          STATUS   AGE
hello-world   Active   47s
# KUBECONFIG=aks-member-3 kubectl get namespace hello-world
Error from server (NotFound): namespaces "hello-world" not found

複数のリージョンを追加する場合には2行指定することで展開されます。

apiVersion: fleet.azure.com/v1alpha1
kind: ClusterResourcePlacement
metadata:
  name: hello-world
spec:
  resourceSelectors:
    - group: ""
      version: v1
      kind: Namespace
      name: hello-world
  policy:
    affinity:
      clusterAffinity:
        clusterSelectorTerms:
          - labelSelector:
              matchLabels:
         fleet.azure.com/location: eastus
                fleet.azure.com/location: westus

全てに展開したい場合にはpolicyを削除すると良いです。

上記ではリージョンを指定しましたが次はクラスターを指定します。

ネームスペースを作成します。

KUBECONFIG=fleet kubectl create namespace hello-world-1

下記のClusterResourcePlacementを作成します。

apiVersion: fleet.azure.com/v1alpha1
kind: ClusterResourcePlacement
metadata:
  name: hello-world-1
spec:
  resourceSelectors:
    - group: ""
      version: v1
      kind: Namespace
      name: hello-world-1
  policy:
    clusterNames:
      - aks-member-1

クラスターを追加する場合にはPolicyに追加します。

まとめ

アプリケーションをデプロイを紹介しました。簡単ですね。Fleet managerを利用はシンプルなようです。

-Azure
-