9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TUNA-JPAdvent Calendar 2022

Day 20

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

9
0
1

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
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?