はじめに
本記事は、「TUNA-JP Advent Calendar 2022」20日目のエントリです。
こんにちは、@yama-s です。
本日は以下についてご紹介します!
- Whereabouts
Whereabouts とは
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