Kubernetes: WeaveによるPodへのIPアドレス割り当て(2)

前回の記事(1)の続きです。
今回はWeaveにより各ノードにIPアドレスが割り当てられる様子をkubectlコマンドで確認します。

以下の図は3ノード構成での、主なコンポーネントの配置の例です。

以下の図はPodの作成をkubectlコマンドにより実行してから、PodにIPアドレスが割り当てられて起動するまでのシーケンスです。

まず、weaveによるノードへのIPアドレスの割り当ての様子をkubectlコマンドで確認します。

[root@master-node ~]# kubectl get pod -n kube-system -o wide | grep weave
weave-net-jz9l7    2/2    Running   0   5d1h   192.168.101.11   master-node.localdomain   ..(以降省略)...
weave-net-8tvnj    2/2    Running   0   5d1h   192.168.101.12   worker-node-1.localdomain  ..(以降省略)...
weave-net-hl872    2/2    Running   0   5d1h   192.168.101.13   worker-node-2.localdomain  ..(以降省略)...

[root@master-node ~]# kubectl exec weave-net-jz9l7 -n kube-system -c weave -- weaveutil bridge-ip weave
10.32.0.1 ←10.32.0.0はPodネットワークのアドレスなので、最初のIPアドレスは10.32.0.1となる。
          これをMasterノードのI/F(ブリッジ)「weave」に割り当てる
[root@master-node ~]# kubectl exec weave-net-8tvnj -n kube-system -c weave -- weaveutil bridge-ip weave
10.44.0.0
[root@master-node ~]# kubectl exec weave-net-hl872 -n kube-system -c weave -- weaveutil bridge-ip weave
10.36.0.0

[root@master-node ~]# kubectl exec weave-net-jz9l7 -n kube-system -c weave -- /home/weave/weave --local status ipam
9e:7d:35:aa:c4:51(master-node.localdomain)   524288 IPs (50.0% of total) (3 active) ←4つの分割のうち3つがアクティブ
76:80:82:a4:ed:e1(worker-node-3.localdomain)   262144 IPs (25.0% of total) 
5e:b1:91:63:1a:53(worker-node-2.localdomain)   262144 IPs (25.0% of total) 

※上記の結果から、各ノードに対するIPアドレスの割り当て個数は以下のようになっている事がわかります。
・Masterノード:524288個。  2^19個    ←4分割されたrange(アドレス範囲)のうち、2つが割り当てられている
・Workerノード1:262144 個。2^18個    ←4分割されたrange(アドレス範囲)のうち、1つが割り当てられている
・Workerノード2:262144 個。2^18個    ←4分割されたrange(アドレス範囲)のうち、1つが割り当てられている
合計:1048576個。2^20個。 32ビット - 12ビット = 20ビット

[root@master-node ~]# kubectl exec weave-net-jz9l7 -n kube-system -c weave -- /home/weave/weave --local report
..(途中省略)..
    "IPAM": {
        "Paxos": null,
        "Range": "10.32.0.0/12",
        "RangeNumIPs": 1048576,   ←IPアドレスの個数。全部で2^20個(32ビット - 12ビット = 20ビット)
        "ActiveIPs": 3,  ←4分割されたrange(アドレス範囲)のうち、3つがアクティブ
        "DefaultSubnet": "10.32.0.0/12",
        "Entries": [
            {
                "Token": "10.32.0.0",     ←Masterノードへの割り当て範囲の開始アドレス
                "Size": 262144,           ←MasterノードへのIPアドレスの割り当て個数
                "Peer": "9e:7d:35:aa:c4:51",
                "Nickname": "master-node.localdomain",
                "IsKnownPeer": true,
                "Version": 7
            },
            {
                Token": "10.36.0.0",     ←Workerノード2への割り当て範囲の開始アドレス
                "Size": 262144,           ←Workerノード2へのIPアドレスの割り当て個数
                "Peer": "76:80:82:a4:ed:e1",
                "Nickname": "worker-node-2.localdomain",
                "IsKnownPeer": true,
                "Version": 4
            },
            {
                "Token": "10.40.0.0",  ←Masterノードへの割り当て範囲の開始アドレス(2つ目の範囲。非アクティブ)
                "Size": 262144,        ←MasterノードへのIPアドレスの割り当て個数((2つ目の範囲。非アクティブ)
                "Peer": "9e:7d:35:aa:c4:51",
                "Nickname": "master-node.localdomain",
                "IsKnownPeer": true,
                "Version": 0
            },
            {
                "Token": "10.44.0.0",         ←Workerノード1への割り当て範囲の開始アドレス
                "Size": 262144,               ←Workerノード1へのIPアドレスの割り当て個数
                "Peer": "5e:b1:91:63:1a:53",
                "Nickname": "worker-node-1.localdomain",
                "IsKnownPeer": true,
                "Version": 23
            }
        ],
        "PendingClaims": null,
        "PendingAllocates": null
    }

次回はWeaveの構成を見て行きます。