》 pod是一个逻辑概念,不是一个隔离的环境。引入pod目的是满足容器之间密切协作关系所需的环境,尤其是网络通信和文件共享的需求
1、容器之间网络通信
》 假设nginx应用程序启用了 http_stub_status_module 模块,以提供关于nginx运行状态的统计信息。同时,获取这些统计信息的访问路径被设置为 /nginx_status,内容如下
location /nginx_status {
stub_status; # 启用 stub_status 模块
allow 127.0.0.1; # 允许从本地访问
deny all; # 拒绝其他访问
}
》 为了能够定期将 nginx_status 路径提供的统计信息存储到数据库中,开发了一个指标采集程序 来完成这项任务。这两个应用程序之间存在密切协作关系,因此它们被定义在同一个pod中。在这种环境下指标采集程序释放可以访问 http://127.0.0.1/nginx_status ,答案是否定的,因为这两个容器的网络命名空间是隔离的
》 不过,这个在pod中是可以的。这是因为kubernetes将这两个容器共享了网络命名空间,使其在一个网络协议栈中。具体来说,当创建一个pod时,kubernetes首先会创建一个 pause容器,这是一个特殊的容器,在创建后即可进入暂停状态,仅用于创建一个容器环境。接着,我们定义的容器会被创建并加入 pause容器的网络命名空间中。
》 这样,pod中所有的容器都处于同一个网络命名空间中,应用程序就像被部署在同一台主机上,可以通过本地回环地址 127.0.0.1访问彼此。
》 接下来,运行一个pod来验证这个结论。创建一个名为pod-network.yaml的文件,内容如下:
cat pod-network.yaml
apiVersion: v1
# api版本
kind: Pod
# 资源类型
metadata:
labels:
# pod标签
app: pod-network
name: pod-network
# pod名称
namespace: default
# 指定命名空间
spec:
# pod中的容器列表
containers:
# 第一个容器
- image: uhub.service.ucloud.cn/librarys/nginx:1.23
# 镜像地址
name: web
# 容器名称
# 第二个容器
- image: uhub.service.ucloud.cn/librarys/centos:7
# 镜像地址
name: collect
# 容器名称
command: ["/bin/bash", "-c", "while true; do sleep 1;done"]
- 创建pod资源
kubectl apply -f pod-network.yaml
- 查看
kubectl get pods -l app=pod-network
NAME READY STATUS RESTARTS AGE
nginx-pod 2/2 Running 0 7m8s
》 在上述结果中,第二列ready的值为 2/2,其中左侧的2表示目前正在运行的容器数量,右侧的2表示定义的容器数量,当两个数值相等时则表示pod内所有容器均正常运行这是仅显示我们定义的两个容器,而不会显示 pause容器,这是因为它是由kubernetes内部管理的,对用户不可见。不过可以在pod所在节点上看到它
- 查看pod所在节点
kubectl get pods pod-network -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-pod 2/2 Running 0 5m31s 10.244.58.206 k8s-node01 <none> <none>
- 可以看到pod被分配到 k8s-node01节点上,进入该节点并执行docker ps命令查看容器
docker ps|grep pod-network
83b7f295c3b5 uhub.service.ucloud.cn/librarys/centos "/bin/bash -c 'while…" About a minute ago Up About a minute k8s_collect_pod-network_default_d15332d1-765c-4b75-8f71-947ba314bf4a_0
e75b90560574 a7be6198544f "/docker-entrypoint.…" 2 minutes ago Up 2 minutes k8s_web_pod-network_default_d15332d1-765c-4b75-8f71-947ba314bf4a_0
8f3339002bbc registry.aliyuncs.com/google_containers/pause:3.9 "/pause" 2 minutes ago Up 2 minutes k8s_POD_pod-network_default_d15332d1-765c-4b75-8f71-947ba314bf4a_0
》 最后一个则是pause容器,它由registry.aliyuncs.com/google_containers/pause:3.9镜像创建,进入web容器,执行curl命令测试访问,将看到统计信息
curl http://127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
15 15 15
Reading: 0 Writing: 1 Waiting: 0
- 同样在collect容器中也可以访问
kubectl exec -it pod-network -c collect -- bash
[root@pod-network /]# curl http://127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
16 16 16
Reading: 0 Writing: 1 Waiting: 0
》 这说明web和collect容器在同一个网络协议中共享 pause容器的网络
标签:status,容器,pause,network,nginx,pod,k8s,D3 From: https://www.cnblogs.com/suyj/p/18374611