CNI download for Minik8s


CNI插件的安装教程

安装CNI插件

首先执行 sudo apt install container ,然后安装cni插件的二进制文件,并配置网络,可以使用containerd仓库中的

默认情况下,当安装好cni插件和工具后,使用nerdctl启动了一个容器之后,宿主机上会出现一个cni0的网桥

# ip a s
......
3: cni0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 36:af:7a:4a:d6:12 brd ff:ff:ff:ff:ff:ff
    inet 10.66.0.1/16 brd 10.66.255.255 scope global cni0
       valid_lft forever preferred_lft forever
    inet6 fe80::34af:7aff:fe4a:d612/64 scope link
       valid_lft forever preferred_lft forever

创建容器

在执行下一步之前,首先要创建一个容器,在minik8s\kubelet\tests目录下运行go test,即可创建一个默认的busybox镜像的容器,运行过程中的问题可以参考create-pod-debug.md文件。

进入容器

#ctr -n k8s.io container ls 这行指令可以看到我们以及创建出来的所有容器,每个容器都有对应的pause容器, -n k8s.io指定了命名空间为k8s.io,我们创建的容器都在这个namespace下,如果直接执行ctr container ls将什么都看不到,因为default的命名空间下是什么都没有的

#ctr -n k8s.io task ls 这行指令可以看到所有正在运行的容器,这里我们应该能看到一个容器在运行,是我们刚刚创建的容器的pause容器

这里注意在创建一个容器时,容器的pause容器是默认运行的,但我们创建的容器本身是不会运行的,需要我们手动运行

# ctr -n k8s.io task start [容器的ID]

然后就可以进入容器了

# ctr -n k8s.io tasks exec --exec-id $RANDOM -t [容器的ID] sh  注意别写成pause容器ID,pause容器中什么都没有

然后在容器中执行以下命令

/ # ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 76:cd:1f:fd:1b:50 brd ff:ff:ff:ff:ff:ff
    inet 10.88.0.6/16 brd 10.88.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2001:4860:4860::6/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::74cd:1fff:fefd:1b50/64 scope link 
       valid_lft forever preferred_lft forever
       
在容器中ping容器宿主机IP地址
/ # ping -c 2 192.168.10.164
PING 192.168.10.164 (192.168.10.164): 56 data bytes
64 bytes from 192.168.10.164: seq=0 ttl=64 time=0.132 ms
64 bytes from 192.168.10.164: seq=1 ttl=64 time=0.044 ms

--- 192.168.10.164 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.044/0.088/0.132 ms

按照相同的步骤再创建一个容器,同一主机上的两个容器即可相互ping 通。

在容器中开启httpd服务
/ # echo "containerd net web test" > /tmp/index.html
/ # httpd -h /tmp

/ # wget -O - -q 127.0.0.1
containerd net web test
/ # exit

在宿主机访问容器提供的httpd服务
[root@localhost scripts]# curl http://10.88.0.2
containerd net web test

安装nerdctl工具

使用效果与 docker 命令的语法一致,github 下载链接:https://github.com/containerd/nerdctl/releases

精简 (nerdctl–linux-amd64.tar.gz): 只包含 nerdctl

完整 (nerdctl-full–linux-amd64.tar.gz): 包含 containerd, runc, and CNI 等依赖

原文链接:https://blog.csdn.net/m0_37843156/article/details/128277966

1)安装 nerdctl(精简版)

先去官网下载压缩包,然后将压缩包放到 /opt/nerdctl目录下,压tar -xf nerdctl-版本号-linux-amd64.tar.gz

最后执行

# ln -s /opt/nerdctl/nerdctl /usr/local/bin/nerdctl

使用以下命令可以看到所有在运行的容器

# nerdctl -n k8s.io container ls

CONTAINER ID    IMAGE          COMMAND            CREATED        STATUS    PORTS    NAME            
975eb5a7882e registry.aliyuncs.com/google_containers/pause:3.8  "/pause"  6 hours ago Up                 
ab55fa6740a0    docker.io/library/busybox:latest "sh"   6 hours ago    Up                           
c28a749c37a9    registry.aliyuncs.com/google_containers/pause:3.8 "/pause" 3 hours ago Up                 
d1c85f8d2d99    docker.io/library/busybox:latest  "sh"   3 hours ago    Up 

文章作者: Swung
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Swung !
  目录