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

前回の記事(2)の続きです。
今回はWeaveの構成を見て行きます。

インストールされているKubernetesのコンテナイメージをpodmanコマンドで表示します。

[root@master-node ~]# podman images
REPOSITORY                          TAG       IMAGE ID      CREATED        SIZE
k8s.gcr.io/kube-apiserver           v1.21.1   771ffcf9ca63  2 months ago   127 MB
k8s.gcr.io/kube-controller-manager  v1.21.1   e16544fd47b0  2 months ago   121 MB
k8s.gcr.io/kube-scheduler           v1.21.1   a4183b88f6e6  2 months ago   51.9 MB
k8s.gcr.io/kube-proxy               v1.21.1   4359e752b596  2 months ago   133 MB
docker.io/weaveworks/weave-npc      2.8.1     7f92d556d4ff  6 months ago   39.7 MB
docker.io/weaveworks/weave-kube     2.8.1     df29c0a4002c  6 months ago   89.8 MB
k8s.gcr.io/pause                    3.4.1     0f8457a4c2ec  6 months ago   690 kB
k8s.gcr.io/coredns/coredns          v1.8.0    296a6d5035e2  9 months ago   42.6 MB
k8s.gcr.io/etcd                     3.4.13-0  0369cf4303ff  11 months ago  255 MB
k8s.gcr.io/pause                    3.2       80d28bedfe5d  17 months ago  688 kB
docker.io/metallb/speaker           v0.8.2    4fa93685c115  21 months ago  43.8 MB

weave-kubeコンテナイメージの内容を表示します。

[root@master-node ~]#  podman image inspect df29c0a4002c
[
    {
...(途中省略)...
        "Config": {
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Entrypoint": [
                "/home/weave/launch.sh"
            ],
            "WorkingDir": "/home/weave",
...(途中省略)...
        "GraphDriver": {
            "Name": "overlay",
            "Data": {
                "LowerDir": "/var/lib/containers/storage/overlay/..(以降省略)..
                "UpperDir": "/var/lib/containers/storage/overlay/..(以降省略)..
                "WorkDir": "/var/lib/containers/storage/overlay/..(以降省略)..
            }
...(以下省略)...

weave-npcコンテナイメージ(Network Policy Controller)の内容を表示します。

[root@master-node ~]#  podman image inspect 7f92d556d4ff
[
    {
...(途中省略)...
        "Config": {
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Entrypoint": [
                "/usr/bin/launch.sh"
            ],
...(途中省略)...
        "GraphDriver": {
            "Name": "overlay",
            "Data": {
                "LowerDir": "/var/lib/containers/storage/overlay/..(以降省略)..
                "UpperDir": "/var/lib/containers/storage/overlay/..(以降省略)..
                "WorkDir": "/var/lib/containers/storage/overlay/..(以降省略)..
            }
...(以下省略)...

Weaveコンテナイメージが作成されたLinuxディストリビューションを確認します。

[root@master-node ~]#  kubectl exec weave-net-jz9l7 -n kube-system -c weave -- cat /etc/issue
Welcome to Alpine Linux 3.10
Kernel \r on an \m (\l)

Alpine(アルパイン) Linuxについては以下のURLが参考になります。
https://ja.wikipedia.org/wiki/Alpine_Linux

Alipine Linuxのサイト(https://alpinelinux.org/)には雪山の写真が掲載されています。
Alpineの訳:アルプスの、高山の

Weave Podの内容を表示します。

[root@master-node ~]# kubectl describe pod weave-net-jz9l7 -n kube-system
Name:                 weave-net-jz9l7
Namespace:            kube-system
...(途中省略)...
Init Containers:
  weave-init:
    Container ID:  cri-o://ecdc153623d77412ead3671690b2323b6a63d640c1664b2d4a5460ae7cc7a2af
    Image:         docker.io/weaveworks/weave-kube:2.8.1
    Image ID:      docker.io/weaveworks/weave-kube@sha256:3d04dfb38e965daa9258fc4dd14a91f9f6471b73c0d3127652b97c08ccdc8ddb
    Port:          
    Host Port:     
    Command:
      /home/weave/init.sh
    State:           Terminated
      Reason:        Completed
      Exit Code:    0
...(途中省略)...
Containers:
  weave:
    Container ID:  cri-o://0d79fdba58a523c1f34c491280546aa3d663240edb74d4b8337d739851bafd05
    Image:         docker.io/weaveworks/weave-kube:2.8.1
    Image ID:      docker.io/weaveworks/weave-kube@sha256:3d04dfb38e965daa9258fc4dd14a91f9f6471b73c0d3127652b97c08ccdc8ddb
    Port:          
    Host Port:     
    Command:
      /home/weave/launch.sh
    State:           Running
...(途中省略)...
  weave-npc:
    Container ID:   cri-o://e73387d922d787421918dba6f3af6d9d55fecaa9ed3703442e83737fe7cfdc9e
    Image:          docker.io/weaveworks/weave-npc:2.8.1
    Image ID:       docker.io/weaveworks/weave-npc@sha256:2be329164796241e72c530c4c8df5faf4e82fead28372a8cdbb651e74d4dba0a
    Port:           
    Host Port:      
    State:           Running
...(以下省略)...

注) Init Container (Initコンテナ)はPod内で最初に実行され、アプリケーションコンテナ(weave, weave-npc)の開始前に実行が完了する特別なコンテナです。

weaveコンテナ(イメージ名: weave-kube)内の実行プログラムおよびプロセスを確認します。

[root@master-node ~]#  kubectl exec weave-net-jz9l7 -n kube-system -c weave -- find / -name init.sh
/home/weave/init.sh
[root@master-node ~]#  kubectl exec weave-net-jz9l7 -n kube-system -c weave -- find / -name launch.sh
/home/weave/launch.sh
[root@master-node ~]#  kubectl exec weave-net-jz9l7 -n kube-system -c weave -- ls -lF /home/weave
total 51188
-rwxrwxr-x    1 root     root          2142 Jan 25  2021 init.sh*
-rwxr-xr-x    1 root     root      27852800 Jan 25  2021 kube-utils*
-rwxrwxr-x    1 root     root          4982 Jan 25  2021 launch.sh*
-rw-r--r--    1 root     root             0 Jul 28 19:14 restart.sentinel
-rwxrwxr-x    1 root     root         51395 Jan 25  2021 weave*
-rwxr-xr-x    1 root     root      24497352 Jan 25  2021 weaver*

(※ overlayfsによりマウントされているディレクトリの下で、fileコマンドによりファイルのタイプを表示します。
weaveコンテナにはfileコマンドが含まれていない)

[root@master-node ~]# file /var/lib/containers/storage/overlay/..(省略)../merged/home/weave/*
/var/lib/containers/storage/overlay/..(省略)../merged/home/weave/init.sh:    POSIX shell script, ASCII text executable
/var/lib/containers/storage/overlay/..(省略)../merged/home/weave/kube-utils: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
/var/lib/containers/storage/overlay/..(省略)../merged/home/weave/launch.sh:  POSIX shell script, ASCII text executable
/var/lib/containers/storage/overlay/..(省略)../merged/home/weave/weave:      POSIX shell script, ASCII text executable
/var/lib/containers/storage/overlay/..(省略)../merged/home/weave/weaver:     ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=e0f21b8c0ae03eebc4e2052e3fd5c910349f5bcf, stripped

[root@master-node ~]#  kubectl exec weave-net-jz9l7 -n kube-system -c weave -- ps -e
PID   USER     TIME  COMMAND
    1 root      0:00 {launch.sh} /bin/sh /home/weave/launch.sh 
   63 root      9:39 /home/weave/weaver  --port=6783 --datapath=datapath --name=9e:7d:35:aa:c4:51 --http-addr=127.0.0.1:6784 --metrics-addr=0.0.0.0:6782 --docker-api= --no-dns --db-prefix=/weavedb/weave-net --ipalloc-range=10.32.0.0/12 --nickname=c82-k8s-1-v3.localdomain --ipalloc-init consensus=2 --conn-limit=200 --expect-npc --no-masq-local 192.168.10.22 192.168.10.23
  156 root      0:54 /home/weave/kube-utils -run-reclaim-daemon -node-name=c82-k8s-1-v3.localdomain -peer-name=9e:7d:35:aa:c4:51 -log-level=debug

● /home/weave/launch.sh
・Bourne Shellスクリプトです。
・init.shの実行完了後に起動します。
・バイナリプログラム/home/weave/weaverを起動します。このweaverがIPアドレスの割り当てを行います。
・バイナリプログラム/home/weave/kube-utils、およびBourne Shelスクリプト/home/weave/weaveを実行して、Podネットワークの各種の設定を行います。

weave-npcコンテナ内の実行プログラムおよびプロセスを確認します。

[root@master-node ~]# kubectl exec weave-net-jz9l7 -n kube-system -c weave-npc -- find / -name init.sh
(init.shは無い)
[root@master-node ~]# kubectl exec weave-net-jz9l7 -n kube-system -c weave-npc -- find / -name launch.sh
/usr/bin/launch.sh
[root@master-node ~]# kubectl exec weave-net-jz9l7 -n kube-system -c weave-npc -- ls  /home
(/homeの下にファイルは無い)
[root@master-node ~]# kubectl exec weave-net-jz9l7 -n kube-system -c weave-npc -- find / -name weave-npc
/usr/bin/weave-npc

[root@master-node ~]# file /var/lib/containers/storage/overlay/..(省略)../merged/usr/bin/weave-npc
/var/lib/containers/storage/overlay/..(省略)../merged/usr/bin/weave-npc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

[root@master-node ~]# kubectl exec weave-net-jz9l7 -n kube-system -c weave-npc -- ps -e
PID   USER     TIME  COMMAND
    1 root      1:47 /usr/bin/weave-npc
   26 root      0:00 /usr/sbin/ulogd -v

次回はWeaveのドキュメントを見てみます。