vSphere with kubernetes 基本機能の確認


検証自体は少し前になりますが、vSphere 7.0 GAの環境で、コンテナ基盤のプラットフォームとして登場した、vSphere with Kubernetesの基本機能を検証したので、まとめてみました。

検証環境は次の通りです。

  • VMware ESXi 7.0.0.15843807  7.0 GA
  • VMware vCenter Server 7.0.0.15952599  7.0 GA
  • VMware NSX-T Data Center 3.0.0.0.0.15946739  3.0.0

vSphere with Kubernetesとは

vSphere クラスタにてPod作成等のKubernetes ワークロードを実行する事が出来る。vSphere with Kubernetesのコンポーネントは以下の通り。

  • スーパーバイザークラスタ: vSphere with Kubernetesを有効化したクラスタ(ESXi、NSX-T)
  • 制御プレーン仮想マシン: スーパーバイザークラスタに3台展開され、Podを作成する
  • vSphere Pod: vSphere with Kubernetesで作成されるPod
  • Spherelet: ホストのKubetnetes用の追加プロセス
  • CRX: vSphere Podの実行環境

vSphere with Kubernetes の環境構築

  • スーパーバイザクラスタのシステム要件

  • ワークロード管理の有効化
    上記システム要件を満たしたクラスタを使用して、vSphere Clientホーム より[ワークロード管理] を選択し、[有効化」

  • Kubernetes を有効化するクラスタを選択

  • 制御プレーン仮想マシンのサイズを選択

  • 管理ネットワークの設定

    • ネットワーク:VMkernel アダプタが管理トラフィック用に構成されているネットワークを選択
    • 開始IPアドレス:制御プレーン仮想マシン用に、連続するアドレス(4つ必要)の開始アドレスを指定
  • ワークロードネットワークの設定

    • vSphere Distributed Switch:スーパーバイザークラスタのオーバーレイ ネットワーク用
    • ポッド CIDR:vSphere Native Pod の IP アドレス範囲、/21を指定(デフォルト値を利用可能)
    • サービス CIDR:Kubernetes サービスの IP アドレス範囲(デフォルト値を利用可能)
    • 入力/出力方向 CIDR :Kubernetes サービスの入力/出力方向 IP アドレス範囲、/27で外部からアクセス可能なアドレスを指定(Podのデプロイに外部アクセスが必要)
  • ワークロード管理の有効化 : 確認

名前空間の作成

クラスタでのvSphere with Kubernetesの有効化を確認し、名前空間を作成
名前空間に、CPU、メモリ、ストレージ及び権限を割り当てる事で、開発者によるPodへのアクセスが可能となる

Podの作成と確認

CLIにて、スーパーバイザクラスタへのログインを実施

kubectl vsphere login --server=https://<制御プレーンノードのIPアドレス> --vsphere-username <your user account name>
  • 名前空間にPodをデプロイし、確認
# Podのデプロイ
E:\vsphere-plugin\bin> kubectl apply -f E:\vsphere-plugin\bin\application.yaml --namespace=namespace1
pod/nginx created

# Podの確認
E:\vsphere-plugin\bin> kubectl get pods --namespace=namespace1
NAME    READY   STATUS    RESTARTS   AGE
nginx   0/1     Pending   0          12s

E:\vsphere-plugin\bin>kubectl get pods --namespace=namespace1
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          79s
  • Podへのアクセス
E:\vsphere-plugin\bin> kubectl exec -it nginx /bin/bash --namespace=namespace1
root@nginx:/# ls
bin   docker-entrypoint.d   home   media  proc  sbin  tmp
boot  docker-entrypoint.sh  lib    mnt    root  srv   usr
dev   etc                   lib64  opt    run   sys   var