大家好,欢迎来到IT知识分享网。
一、pause容器
Pause 容器,又叫 Infra 容器,是pod的基础容器,镜像体积只有几百KB 左右,配置在kubelet中,主要的功能是一个pod中多个容器的网络通信。
kubelet service配置文件里指名是pause镜像
root@k8s-master:~/yaml# cat /etc/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelet Documentation=https://github.com/GoogleCloudPlatform/kubernetes [Service] WorkingDirectory=/var/lib/kubelet ExecStart=/usr/local/bin/kubelet \ --config=/var/lib/kubelet/config.yaml \ --cni-bin-dir=/usr/local/bin \ --cni-conf-dir=/etc/cni/net.d \ --hostname-override=172.31.7.2 \ --image-pull-progress-deadline=5m \ --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \ --network-plugin=cni \ --pod-infra-container-image=harbor.host.com/k8s/pause:3.6 \ #kubelet service配置文件里指名是pause镜像 --root-dir=/var/lib/kubelet \ --v=2 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
Infra 容器被创建后会初始化 Network Namespace,之后其它容器就可以加入到 Infra 容器中共享Infra 容器的网络了,因此如果一个 Pod 中的两个容器 A 和 B,那么关系如下 :
- A容器和B容器能够直接使用 localhost 通信;
- A容器和B容器可以可以看到网卡、IP与端口监听信息。
- Pod 只有一个 IP 地址,也就是该 Pod 的 Network Namespace 对应的 IP 地址(由Infra 容器初始化并创建)。
- k8s环境中的每个Pod有一个独立的IP地址(前提是地址足够用),并且此IP被当前 Pod 中所有容器在内部共享使用。
- pod删除后Infra 容器随机被删除,其IP被回收
Pause容器共享的Namespace:
- NET Namespace:Pod中的多个容器共享同一个网络命名空间,即使用相同的IP和端口信息。
- IPC Namespace:Pod中的多个容器可以使用System V IPC或POSIX消息队列进行通信。
- UTS Namespace:pod中的多个容器共享一个主机名。
- MNT Namespace、PID Namespace、User Namespace未共享。
pause容器-宿主机的namespace:
root@k8s-master:~/yaml/1221/case3-controller# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-76878b694c-8h2vb 1/1 Running 0 5s nginx-deployment-76878b694c-dzt4z 1/1 Running 0 5s #进入其中一个pod root@k8s-master:~/yaml/1221/case3-controller# kubectl exec -it nginx-deployment-76878b694c-8h2vb bash kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. root@nginx-deployment-76878b694c-8h2vb:/# #更新apt、安装ethtool net-tools root@nginx-deployment-76878b694c-8h2vb:/# apt update -y && apt install ethtool net-tools -y root@nginx-deployment-76878b694c-8h2vb:/# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.200.228.177 netmask 255.255.255.255 broadcast 10.200.228.177 ether aa:0c:9f:da:d2:3a txqueuelen 0 (Ethernet) RX packets 6142 bytes (8.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4344 bytes (231.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@nginx-deployment-76878b694c-8h2vb:/# ethtool -S eth0 NIC statistics: peer_ifindex: 47 rx_queue_0_xdp_packets: 0 rx_queue_0_xdp_bytes: 0 rx_queue_0_xdp_drops: 0 #到pod所在的宿主机验证网卡: root@k8s-node1:~# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 ... ... 47: cali0cc@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default # 容器所用的这张网卡 root@k8s-node1:~# sudo nsenter --net=/run/docker/netns/ ifconfig 706c6e421b8c default e698b170f701 root@k8s-node1:~# sudo nsenter --net=/run/docker/netns/e698b170f701 ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.200.228.177 netmask 255.255.255.255 broadcast 10.200.228.177 ether aa:0c:9f:da:d2:3a txqueuelen 0 (Ethernet) RX packets 6142 bytes (9.0 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4344 bytes (237.1 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
pause容器-配置示例
1.在docker主机测试,准备nginx配置文件,并配置动静分离:
# pwd
/root/pause-test-case ~/pause-test# cat nginx.conf
error_log stderr;
events { worker_connections 1024; }
http {
access_log /dev/stdout;
server {
listen 80 default_server;
server_name www.mysite.com;
location / {
index index.html index.php;
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
2.部署paush容器:
~/pause-test# docker pull registry.cn- hangzhou.aliyuncs.com/google_containers/pause:3.6 ~/pause-test# docker run -d -p 80:80 --name pause-container-test \ registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
3.准备测试web页面:
~/pause-test# ls html/
index.php
4.部署nginx 容器,并使用paush容器网络:
~/pause-test-case# docker run -d --name nginx-container-test \
-v `pwd`/nginx.conf:/etc/nginx/nginx.conf \
-v `pwd`/html:/usr/share/nginx/html \
--net=container:pause-container-test \
nginx:1.20.2
5.部署php容器,并使用paush容器网络:
~/pause-test-case# docker run -d --name php-container-test \
--net=container:pause-container-test \
-v `pwd`/html:/usr/share/nginx/html \
php:5.6.40-fpm
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/49747.html