vm.gowatana.jp

NEOにほんごVMware(仮)

vSphere with Tanzu での「名前空間のセルフ サービス」を試してみる。(vSphere 7.0 U2a)

 vSphere 7.0 U2a の新機能である、名前空間サービスを有効化してみます。これは、kubectl を利用して、開発者自身が(vSphere の管理者に依頼しなくても)セルフ サービスでスーパーバイザー名前空間を作成できるようになる、というものです。

 

ドキュメントでは、下記のあたりです。

 

今回の内容です。

 

今回の環境

vCenter Server 7.0 U2a + NSX-T 3.1 で、下記投稿のように構成したスーパーバイザー クラスタを利用します。(7.0 U1 での投稿ですが、U2 でも同様です)

f:id:gowatana:20210509224447p:plain

 

これまでのスーパーバイザー名前空間の作成

スーパーバイザー名前空間は、これまでは kubectl ではなく、vSphere 側(vSphere Client など)から作成する必要がありました。

 

vSphere Clinet でのスーパーバイザー名前空間の作成

vSphere Clinet では、「ワークロード管理」→「名前空間」にある「新規名前空間」や・・・

f:id:gowatana:20210509230456p:plain

 

スーパーバイザー クラスタの「新規名前空間」あたりから作成します。

f:id:gowatana:20210509230607p:plain

 

従来の kubectl での名前空間作成の(エラーになる)様子

一方で、これまで、 kubectl create namespace(または ns)では、スーパーバイザー名前空間は作成できませんでした。

名前空間サービスを有効化するまえに、これまでの様子を確認しておきます。

 

kubectl vsphere login で、下記のようにスーパーバイザー クラスタにログインしておきます。

 

 

kubectl get namespaces で、名前空間を確認しておきます。この時点で作成されているスーパーバイザー名前空間は、lab-ns-31 だけです。

$ kubectl get ns --show-labels
NAME                                        STATUS   AGE   LABELS
default                                     Active   9d    <none>
kube-node-lease                             Active   9d    <none>
kube-public                                 Active   9d    <none>
kube-system                                 Active   9d    <none>
lab-ns-31                                   Active   11h   vSphereClusterID=domain-c1006
svc-tmc-c1006                               Active   9d    tmc.cloud.vmware.com/exclude-from-detach=true
vmware-system-appplatform-operator-system   Active   9d    <none>
vmware-system-capw                          Active   9d    cluster.x-k8s.io/provider=infrastructure-wcp,control-plane=capw-controller-manager
vmware-system-cert-manager                  Active   9d    <none>
vmware-system-csi                           Active   9d    <none>
vmware-system-kubeimage                     Active   9d    <none>
vmware-system-license-operator              Active   9d    <none>
vmware-system-logging                       Active   9d    <none>
vmware-system-nsop                          Active   9d    <none>
vmware-system-nsx                           Active   9d    <none>
vmware-system-registry                      Active   9d    control-plane=controller-manager,controller-tools.k8s.io=1.0
vmware-system-tkg                           Active   9d    control-plane=tkg-controller-manager
vmware-system-ucs                           Active   9d    <none>
vmware-system-vmop                          Active   9d    control-plane=controller-manager,controller-tools.k8s.io=1.0

 

kubectl create namespace で名前空間を作成しようとしても、エラーになります。ちなみに、Administrator@vsphere.local がログイン ユーザです。

$ kubectl create namespace lab-ns-32
Error from server (Forbidden): namespaces is forbidden: User "sso:Administrator@vsphere.local" cannot create resource "namespaces" in API group "" at the cluster scope

 

名前空間サービスの有効化

スーパーバイザー クラスタで、名前空間サービス(Namespace Service)を有効化することで、kubectl create namespace で名前空間を作成すると、自動的にスーパーバイザー名前空間が作成できるようになります。

 

スーパーバイザー クラスタの「設定」→「名前空間」→「全般」→「名前空間サービス」で、ステータスのスイッチを有効にします。

f:id:gowatana:20210510002559p:plain

 

スイッチを有効にすると、「名前空間テンプレートの作成」画面が表示されます。

CPU、メモリ、ストレージのパラメータを適宜入力し、ストレージ ポリシーを選択して、「次へ」をクリックして進みます。

f:id:gowatana:20210509225236p:plain

 

「権限」では、今回は administrator@vsphere.local ユーザを追加して「次へ」をクリックします。

ちなみに、本来は開発者自身が名前空間を作成するための機能なので、あらかじめ vCenter Single Sign-on の ID ソースとして登録しておいた Active Directory や LDAP を選択すべきかと思います。

f:id:gowatana:20210509225452p:plain

 

確認画面で、「完了」をクリックします。

f:id:gowatana:20210509225925p:plain

 

これで、名前空間サービスが有効化され、名前空間テンプレートが準備完了になりました。

f:id:gowatana:20210509230016p:plain

 

kubectl でのスーパーバイザー名前空間の作成

名前空間サービスの有効化の際に権限追加したユーザで kubectl vsphere login して、名前空間を作成してみます。kubectl create namespace で、エラーなくNamespace が作成できるようになります。

$ kubectl create namespace lab-ns-32
namespace/lab-ns-32 created

 

作成された Namespace です。

$ kubectl get namespace lab-ns-32 --show-labels
NAME        STATUS   AGE    LABELS
lab-ns-32   Active   8m7s   vSphereClusterID=domain-c1006

 

vSphere Client でも、lab-ns-32 というスーパーバイザー名前空間が作成されたことが確認できます。そして、さきほど名前空間テンプレートで指定したパラメータが設定されています。

f:id:gowatana:20210509231540p:plain

 

名前空間サービスを無効化した様子

ちなみに、名前空間サービスを無効化しても、作成されているスーパーバイザー名前空間は削除されず、そのまま利用できます。

f:id:gowatana:20210509233934p:plain

 

名前空間サービスが有効な状態では、namespaces での create 権限がありますが・・・

$ kubectl auth can-i create namespaces
Warning: resource 'namespaces' is not namespace scoped
yes
$ kubectl auth can-i --list | grep namespaces
namespaces                                                       []                  []                  [delete get list watch create]
namespaces/status                                                []                  []                  [get list watch]

 

名前空間サービスを無効にすると、namespaces から create 権限がなくなります。つまり、kubectl create namespace もエラーになります。

$ kubectl auth can-i create namespaces
Warning: resource 'namespaces' is not namespace scoped
no
$ kubectl auth can-i --list | grep namespaces
namespaces                                                       []                  []                  [delete get list watch]
namespaces/status                                                []                  []                  [get list watch]

 

ただ、delete 権限はあるので、kubectl delete namespace で名前空間を削除することはできます。先ほど作成した lab-ns-32 Namespace を削除してみます。

$ kubectl delete namespace lab-ns-32
namespace "lab-ns-32" deleted
$ kubectl get namespaces lab-ns-32
Error from server (NotFound): namespaces "lab-ns-32" not found

 

lab-ns-32 スーパーバイザー名前空も削除されます。タスクでは、スーパーバイザー名前空間に対応するリソース プールの削除などが見られます。

f:id:gowatana:20210510001446p:plain

 

以上、kubectl でスーパーバイザー名前空間を作成してみる話でした。