首页 > 其他分享 >D3 k8s之pod共享网络和文件的实现原理

D3 k8s之pod共享网络和文件的实现原理

时间:2024-08-22 20:14:55浏览次数:14  
标签:status 容器 pause network nginx pod k8s D3

》  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

相关文章

  • D2 k8s之pod存在的意义
    1、pod简介》 kubernetes提供的一系列资源和功能都是以pod为中心展开的,旨在高效的管理和编排这些pod》 pod是kubernetes中最小的调度单元,一个pod可以包含一个或多个容器,这些容器运行在同一节点上,从而可以实现共享网络、存储以及其他资源。这种涉及使得pod能够满足复杂的应用程序......
  • POD基本操作
    一.Pod生命周期在Kubernetes中,Pod的生命周期经历了几个重要的阶段。下面是Pod生命周期的详细介绍:1.Pending(待处理):调度:Pod被创建后,首先进入“Pending”状态。此时,Kubernetes的调度器(Scheduler)会选择一个合适的节点来运行Pod。资源分配:在调度器选择了节点后,Pod仍在“Pen......
  • kubeadm升级k8s之1.23.17->1.24.17
    查看当前版本[root@k8s-master31~]#kubectlgetnodes-owideNAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIMEk8s-master31Ready......
  • 用Podman从零开始构建并运行一个Apache+PHP的容器镜像 (三)
    昨天我在之前从零开始创建的容器中实现了Apache服务的自动启动(详情记录在上一篇博文中:https://blog.csdn.net/arthurchan2021/article/details/141371026)。但是离实用性还有一段距离,所以今天继续折腾。到目前为止访问http://localhost:8080返回的页面还是Ubuntu给Apache......
  • Docker受限?试试Podman,手动搭建Ubuntu容器镜像
    Docker受限?试试Podman,手动搭建Ubuntu容器镜像最近,我打算用Docker来搭建一个开发环境,但遗憾的是,我发现DockerHub无法使用,甚至国内的镜像源也无法访问。这让我有些头疼,但好在我在寻找解决方案的过程中,发现了一个Docker的替代方案:Podman。Podman的使用方法与Docker几乎一模......
  • k8s限制外部管理访问
    #允许控制节点iptables-AINPUT-smaster-node-ptcp--dport6443-jACCEPT#允许数据节点iptables-AINPUT-sdata-node-ptcp--dport6443-jACCEPT#允许k8s内部服务网段iptables-AINPUT-s10.40.0.0/16-ptcp--dport6443-jACCEPT#允许k8s内部POD网段iptab......
  • centos 7 部署k8s
    一、环境准备集群角色主机名操作系统IP地址内核Masterk8s-masterCentOSLinuxrelease7.9.2009(Core)172.16.99.713.10.0-957.el7.x86_64Nodek8s-node01CentOSLinuxrelease7.9.2009(Core)172.16.99.723.10.0-957.el7.x86_64Nodek8s-node02Cent......
  • “风色幻想XX:交错轨迹游戏卡顿:从解决d3dx9_xx.dll缺失开始——风色幻想XX优化指南
    《风色幻想XX:交错轨迹》作为一款深受玩家喜爱的角色扮演游戏,以其丰富的剧情、独特的角色设定和精美的画面赢得了广泛的赞誉。然而,在游戏过程中,部分玩家可能会遇到游戏卡顿的问题,这不仅影响了游戏体验,还可能让玩家错失精彩的剧情和战斗瞬间。在众多导致游戏卡顿的因素中,d3dx9_xx......
  • 一次Kubernetes Pod内存异常导致的测试环境耗时异常问题排查过程
    概述在使用公司内部后台系统测试环境时发现一个请求加载慢的问题,简简单单的列表,查询MongoDB数据库,测试环境不过几百上千条数据而已,请求耗时居然高达5~6秒:作为对比,生产环境的请求响应截图如下:经过持续跟进,该后台系统所有列表页面测试环境普遍比生产环境慢,不管是MongoDB还是MyS......
  • MAC安装CocoaPods
    如果已经安装过,则先执行卸载gemuninstallcocoapodssudorm-fr~/Library/Caches/CocoaPods/sudorm-fr~/.cocoapods/repos/master/新安装先执行geminstallcocoapods如果报错可尝试使用下面的命令sudogeminstall-n/usr/local/bincocoapods预览版sudogem......