LoginSignup
0

TKG 1.6 で Whereabouts を検証してみる

Last updated at Posted at 2022-12-20

はじめに

本記事は、「TUNA-JP Advent Calendar 2022」20日目のエントリです。

こんにちは、@yama-s です。
本日は以下についてご紹介します!

  • Whereabouts

Whereabouts とは

image.png

TKG 1.6 リリースより Whereabouts がプラグインとして導入可能となりました。Whereabouts とは所在、居場所などを意味する単語です。
Whereabouts は クラスター全体に IP アドレスを割り当てる IP アドレス管理 (IPAM) CNI プラグインとして動作するものです。

Whereabouts の役割

TKG で Multus によって与えられる2つ目の NIC に与える IP アドレスを動的に管理できます。
Multus でもレンジで管理しているのになぜ必要なのでしょうか?
Multus の IP 管理を host-local で指定している場合、ホスト間での重複が許されてしまうため、バッティングの危険性があります。
Whereabouts を使えば DHCP を利用せずに簡単に動的に IP 管理ができます。

導入方法

Multus が導入の前提条件となっています。
Multus については昨年のアドベントカレンダーの記事にもなっていますので こちら をご確認ください。

まず、tanzu package コマンドを使用して、利用可能な whereabouts のバージョンを確認します。

user@boot:~$ tanzu package available list whereabouts.tanzu.vmware.com -A

  NAME                          VERSION               RELEASED-AT                    NAMESPACE
  whereabouts.tanzu.vmware.com  0.5.1+vmware.2-tkg.1  2022-08-26 07:44:23 +0900 JST  tanzu-package-repo-global
user@boot:~$

確認した内容を元に、whereabouts をインストールします。

user@boot:~$ tanzu package install whereabouts --package-name whereabouts.tanzu.vmware.com --version 0.5.1+vmware.2-tkg.1
 Installing package 'whereabouts.tanzu.vmware.com'
 Getting package metadata for 'whereabouts.tanzu.vmware.com'
 Creating service account 'whereabouts-default-sa'
 Creating cluster admin role 'whereabouts-default-cluster-role'
 Creating cluster role binding 'whereabouts-default-cluster-rolebinding'
 Creating package resource
 Waiting for 'PackageInstall' reconciliation for 'whereabouts'
 'PackageInstall' resource install status: Reconciling
 'PackageInstall' resource install status: ReconcileSucceeded

 Added installed package 'whereabouts'
user@boot:~$

インストール完了しました!
インストール後の確認をします。"ReconcileSucceeded" が確認できました。

user@boot:~$ tanzu package installed get whereabouts

NAME:                    whereabouts
PACKAGE-NAME:            whereabouts.tanzu.vmware.com
PACKAGE-VERSION:         0.5.1+vmware.2-tkg.1
STATUS:                  Reconcile succeeded
CONDITIONS:              [{ReconcileSucceeded True  }]
USEFUL-ERROR-MESSAGE:
user@boot:~$

Multus のネットワーク定義ファイルを作成します。以下は例です。

user@boot:~$ vim multus-cni-crd.yaml
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: macvlan-conf
spec:
  config: '{
      "cniVersion": "0.3.0",
      "type": "macvlan",
      "master": "eth0",
      "mode": "bridge",
      "ipam": {
        "type": "whereabouts",
        "range": "192.168.1.70-192.168.1.80/24"
      }
    }'

master に指定する インターフェースは実際のノードが持つものと一致している必要があります。
spec.config 内の ipam では multus と異なり一部のオプションしかサポートしていないため注意が必要です。
(現状、参考資料の Docs 上の表記では使えないオプションが含まれています)

作成したファイルを使用して、ネットワーク定義を適用します。

user@boot:~$ kubectl create -f multus-cni-crd.yaml
networkattachmentdefinition.k8s.cni.cncf.io/macvlan-conf created
user@boot:~$

確認方法

テスト用の pod を 2つ作成します。今後の検証に備え、node にラベルを付与し、pod に nodeSelector で node の指定も行いました。

1つ目

user@boot:~$ cat pod0.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod0
  annotations:
    k8s.v1.cni.cncf.io/networks: macvlan-conf
spec:
  containers:
  - name: pod0
    command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"]
    image: alpine
  nodeSelector:
    for: pod0
user@boot:~$

2つ目

user@boot:~$ cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  annotations:
    k8s.v1.cni.cncf.io/networks: macvlan-conf
spec:
  containers:
  - name: pod1
    command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"]
    image: alpine
  nodeSelector:
    for: pod1
user@boot:~$

pod を作成します。

user@boot:~$ kubectl create -f pod0.yaml -f pod1.yaml
pod/pod0 created
pod/pod1 created
user@boot:~$

kubectl describe pod で Whereabouts で取得した IP アドレスを確認します。
設定した IP レンジから、"net1" というインターフェース名で 2つ目の IP アドレスが設定されているのが確認できました!

  • pod0: 192.168.1.70
  • pod1: 192.168.1.71
Name:             pod0
(中略)
                    [{
                        "name": "antrea",
                        "interface": "eth0",
                        "ips": [
                            "100.96.2.55"
                        ],
                        "mac": "9e:f8:aa:91:df:18",
                        "default": true,
                        "dns": {},
                        "routes": [
                            {
                                "dst": "0.0.0.0/0",
                                "gw": "100.96.2.1"
                            }
                        ]
                    },{
                        "name": "default/macvlan-conf",
                        "interface": "net1",
                        "ips": [
                            "192.168.1.70"
                        ],
                        "mac": "a2:00:ba:ef:1e:6a",
                        "dns": {}
                    }]
(中略)

Name:             pod1
(中略)
                    [{
                        "name": "antrea",
                        "interface": "eth0",
                        "ips": [
                            "100.96.1.156"
                        ],
                        "mac": "de:c5:eb:b0:bb:b6",
                        "default": true,
                        "dns": {},
                        "routes": [
                            {
                                "dst": "0.0.0.0/0",
                                "gw": "100.96.1.1"
                            }
                        ]
                    },{
                        "name": "default/macvlan-conf",
                        "interface": "net1",
                        "ips": [
                            "192.168.1.71"
                        ],
                        "mac": "aa:b9:f4:d9:b2:ee",
                        "dns": {}
                    }]

さいごに

Whereabouts を使用して、pod に対して 2つ目の IP アドレスを指定したレンジから設定することができました!

なにか少しでも参考にしていただける部分があったら嬉しいです。
記事を読んでいただきありがとうございました。


参考資料
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-packages-cni-multus.html
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-packages-cni-whereabouts.html

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0