ページの先頭です

ページ内を移動するためのリンク
本文へ (c)

ここから本文です。

Tanzu Kubernetes Grid on Azure VMware Solution

ライター:奈良 昌紀
通信事業者のデータセンターにおいてネットワーク・サーバー運用を経験した後、ネットワンシステムズに入社。帯域制御やWAN高速化製品担当を経て、2008年から仮想化関連製品を担当。現在は主にクラウド、仮想インフラの管理、自動化、ネットワーク仮想化を担当。

目次

はじめに

今回はVMwareのTanzu™ Kubernetes Grid™ (TKG) をAVS上で利用する方法をご紹介します。

本内容は2021年1月に実施した検証に基づいています。各サービス、コンポーネントの最新のバージョンや対応状況は、記事作成時と異なる可能性がありますのでご了承ください。

Azure VMware® Solution (AVS) は、Azureのインフラストラクチャ上でMicrosoftが提供するvSphere®環境です。AVSのvSphere環境はVMware Cloud Foundation™をベースに構築されており、VMwareのvSphere、vSAN™、NSX-T™ DataCenterによって構成されています。Azureが持つ様々なネットワークサービスを利用することができるため、ExpressRouteを利用してハイブリッドクラウドを実現し、Azure VNetと直接接続することによりAzureのネイティブサービスと組み合わせて利用する等、非常に柔軟にネットワークを構成することが可能です。概要はこちらの匠コラムでご紹介しています。

Tanzu Kubernetes Gridとは

Tanzu Kubernetes Grid (TKG) はオープンソースとして開発されているCluster APIを利用して、Kubernetesクラスターのプロビジョニングを行います。Clsuter APIはKubernetesクラスター上で機能する拡張機能で、vSphereやAWS、Azure等のパブリッククラウド環境にKubernetesクラスターをプロビジョニングすることが可能です。

現在、TKGには3つの種類があります。vSphere 7から利用可能になったVMware vSphere® with VMware Tanzu™は、vSphereにTKGをTanzu Kubernetes Grid Service (TKGS) として統合し、vSphere環境にKubernetesクラスターをプロビジョニングすることに特化しています。Tanzu Kubernetes Grid Multicloud (TKGM) は、vSphereのほか、AWSやAzure等のパブリッククラウドに対してもKubernetesクラスターをプロビジョニングすることが可能です。また、VMwareに買収されたPivotal社が提供していたPivotal Container Service (PKS) は、現在VMware Tanzu™ Kubernetes Grid™ Integrated Edition (TKGI) に名称変更されています(TKGの中でTKGIだけはCluster APIではなく、boshという仕組みを利用してKubernetesクラスターをプロビジョニングします)。

2021年3月現在、AVSのvSphereバージョンが6.7であるため、AVS上でTKGSを利用することができませんが、TGKMはvSphere 6.7以降に対応しており、AVS環境ではTKGMを利用することによりKubernetesクラスターのプロビジョニングが可能です。

Tanzu Kubernetes Gridの準備

AVS上でTanzu Kubernetes Grid Multicloudを利用するためには、Cluster APIをホストするManagement ClusterをAVS上にデプロイする必要があります。このデプロイは、ブートストラップノードと呼ばれるマシンでtkgコマンドを利用して行います。ブートストラップノードでは、内部的にkind (Kubernetes in Docker)と呼ばれる小規模なKubernetesクラスター作成し、このKubernetesクラスターに構成されるCluster APIを利用してAVS上にManagement Clusterを構成します。

Management Cluster/Tanzu Kubernetes Clsuterは、TKG用のベースOSイメージテンプレートを利用して仮想マシンを作成するため、TKG用のOVAをインポートしてテンプレート化します。また、Kubernetesクラスターが利用するネットワークはDHCPが必要となるため、NSX Managerでセグメントを追加し、DHCPを有効化しておきます。

ブートストラップノードがManagement Clusterを作成するために必要な各種パラメータは、~/.tkg/config.yaml に以下のように設定します(VSPHERE_SERVERやVSPHERE_PASSWORD、VSPHERE_NETWORK 等環境に合わせて修正する必要があります)。

VSPHERE_SERVER: 10.43.224.2
VSPHERE_USERNAME: cloudadmin@vsphere.local
VSPHERE_PASSWORD: <vsphere password>
VSPHERE_DATACENTER: SDDC-Datacenter
VSPHERE_DATASTORE: vsanDatastore
VSPHERE_NETWORK: tanzu-pg
VSPHERE_RESOURCE_POOL: /SDDC-Datacenter/host/Cluster-1/Resources/tkg
VSPHERE_FOLDER: /SDDC-Datacenter/vm
VSPHERE_SSH_AUTHORIZED_KEY: ssh-rsa AAAAB3NzaC1….
SERVICE_CIDR: 100.64.0.0/13
CLUSTER_CIDR: 100.96.0.0/11
VSPHERE_WORKER_DISK_GIB: 50
VSPHERE_WORKER_NUM_CPUS: 2
VSPHERE_WORKER_MEM_MIB: 4096
VSPHERE_CONTROL_PLANE_DISK_GIB: 30
VSPHERE_CONTROL_PLANE_NUM_CPUS: 2
VSPHERE_CONTROL_PLANE_MEM_MIB: 2048

上記設定ファイルを作成後、ブートストラップノードで tkg init コマンドを実行すると、Management Clusterの作成が行われます。このときDHCPの範囲外にあるIPアドレスを --vsphere-controlplane-endpoint-ip として指定し、Management ClusterのKubernetes APIのIPアドレスを設定します。

$ tkg init --infrastructure-vsphere --name=mgmt \
--vsphere-controlplane-endpoint-ip=10.43.235.253

Tanzu Kubernetes Gridの利用

AVS上にManagement Clusterが作成されると、tkgコマンドによりManagement ClusterのCluster APIを利用してAVS上にTanzu Kubernetes Clusterを作成することが可能になります。

tkg create cluster コマンドでクラスターを作成することが可能です。クラスター作成時のオプションは以下の通りです。

  • --kubernetes-version : Tanzu Kubernetes ClusterのKubernetesバージョンの指定。該当バージョンのベースOSイメージテンプレートがvSphere環境にインポートされている必要がある。
  • --vsphere-controlplane-endpoint-ip : Management Clusterと同じく、オプションによりKubernetes API向けのStatic IPアドレスを指定する。
  • --plan=prod/dev : prodを指定するとControl Plane 3台/Worker Node 3台構成となり、devを指定するとControl Plane 1台/Worker Node 1台構成となる。
  • --worker-machine-count : Workerノード数の指定。上記planの構成を変更する場合に利用する。
$ tkg create cluster tkg1 --kubernetes-version=v1.19.1 --plan=prod \
  --vsphere-controlplane-endpoint-ip=10.43.235.252 --worker-machine-count 4

作成したクラスターは、tkg get cluster コマンドで確認可能です。

$ tkg get cluster
NAME  NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES
tkg1  default    running  3/3           3/3      v1.19.1+vmware.2  <none>

作成したクラスターを利用するには、tkg get credentials コマンドでクレデンシャルを取得する必要があります。取得したクレデンシャルはKUBECONFIGのContextとして設定されるため、kubectl config use-context で接続先を切り替えることが可能です。

$ tkg get credentials tkg1
Credentials of workload cluster 'tkg1' have been saved
You can now access the cluster by running 'kubectl config use-context tkg1-admin@tkg1'

ロードバランサー/Ingressコントローラーの利用

通常Kubernetesクラスターを利用する場合、外部のロードバランサーを利用してクラスターのサービス向けのロードバランサーを構成します。AVS上にデプロイされたTanzu Kubernetes Clusterではロードバランサーが構成されないため、今回はMetalLBを利用しました。MetalLBはソフトウェアとして提供されるロードバランサーです。

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

$ kubectl apply –f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml

MetalLBをLayer2構成とするためのConfigMapを作成します。「addresses」にはMetalLBが利用するVIP用のアドレス範囲を指定します。

$ cat << EOF | kubectl apply –f -
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 10.43.235.101-10.43.235.110
EOF

MetalLBを構成するDeployment/DaemonSet/Role、Secret等を作成します。

$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
$ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

MetalLBをロードバランサーとして利用することで、Ingressコントローラーを利用することが可能になります。今回は、VMwareが提供するTKGの機能拡張としてサポートされるContourを構成しました。

ダウンロードしたTKGの機能拡張バンドルを利用して、Tanzu Kubernetes ClusterにExtension Managerをインストールします。

$ tar zxvf tkg-extensions-manifests-v1.2.0-vmware.1.tar-2.gz
$ cd tkg-extensions-v1.2.0+vmware.1/extensions/
$ kubectl apply -f tmc-extension-manager.yaml
$ kubectl apply -f kapp-controller.yaml
$ kubectl apply -f ../cert-manager/

Contour向けネームスペース (tanzu-system-ingress) とロールを作成し、contour-data-values.yamlを作成、envoy.service.type: LoadBalncer を指定しEnvoyをMetalLB経由で公開する設定を追加し、Secretとして作成します。

$ kubectl apply -f ingress/contour/namespace-role.yaml
$ cp ingress/contour/vsphere/contour-data-values.yaml.example ingress/contour/vsphere/contour-data-values.yaml
$ vi ingress/contour/vsphere/contour-data-values.yaml
$ kubectl create secret generic contour-data-values --from-file=values.yaml=ingress/contour/vsphere/contour-data-values.yaml -n tanzu-system-ingress

Extension Managerを利用して、Contourを機能拡張としてインストールすると、ContourがIngressコントローラーとして利用可能になります。

$ kubectl apply -f ingress/contour/contour-extension.yaml
$ kubectl get app contour -n tanzu-system-ingress
NAME      DESCRIPTION           SINCE-DEPLOY   AGE
contour   Reconcile succeeded   3s             56s

Azure Container Registryの利用

TKGMを利用してクラスター内に、Habrorレジストリを利用することも可能ですが、Azure上であれば、Azureがサービスとして提供するAzure Container Registry (ACR) を利用することが可能です。AVSで作成されるvSphere環境は、ExpressRouteを利用してユーザーのVNetと接続されます。ACRをプライベートレジストリとして利用する場合、AzureのPrivate Linkを利用してユーザーVNet内にACRのPrivate Endpointを作成し、AVS上のTanzu Kubernetes Clusterからプライベートレジストリとして利用することが可能になります。

通常、Private Endpointは、VNet内の仮想マシンがセキュアにAzureのネイティブサービスにアクセスするために利用されるため、VNet内でAzure DNSのプライベートレコードとして、Private Endpointの名前解決が可能になります。AVS環境はAzureインフラストラクチャ上で動作していますが、VNet外のリソースであるためPrivate Endpointの名前解決を可能にするため、VNet内にDNSリゾルバとなる仮想マシンを作成し、Tanzu Kubernetes Clusterからこの仮想マシンをDNSサーバーとして指定することで、Private Endpointの名前解決が可能になり、ACRへの利用が可能になりました。

まとめ

Azure VMware Solutionを利用することにより、使い慣れたvSphere環境をAzureのインフラストラクチャ上で実行することが可能です。Azureが持つ様々なネイティブサービスと組み合わせることで、オンプレミス環境だけでは難しかった迅速なワークロードの展開が可能になります。

AVSはAzureやオンプレミスのネットワークと連携するために、柔軟にネットワークを構成することが可能となっており、オンプレミス、Azure両方のネットワークを考慮した設計が重要になります。Azure VMware Solutionの導入をご検討の際は、ぜひ弊社にご相談ください。

※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。

RECOMMEND