在 kubernetes 进行调度的时候,会执行如下命令:
docker run --name expod-container busybox sh -c 'echo "Hello Kubernetes!"; sleep 3600'
command 和 args 的设置会分别覆盖 Docker 镜像中定义的 EntryPoint 与 CMD 。
Pod 组织容器的方式Pod 是由各个容器组成的一个整体,同时调度到某台 Node 上,容器之间可以共享资源、网络环境和依赖,并拥有相同的生命周期 。
容器如何组成一个 Pod每个 Pod 都包含一个或一组密切相关的业务容器,但是还有一个成为”根容器“的特殊 Pause 容器 。Pause 容器是属于 Kubernetes 的一部分,如果一组业务容器作为一个整体,我们很难对整个容器进行判断,假如一个业务组容器当中的某个容器挂载了能代表整个 Pod 都挂载了吗?如果引入一个和业务无关的 Pause 容器,用它作为 Pod 的根容器,用它的状态代表整组容器的状态,就能解决这个问题 。而且一个 Pod 中的所有容器都共享 Pause 容器的 IP 地址及其挂载的存储卷,这样也简化了容器之间的通信和数据共享问题,类似于 Docker 容器网络的 Container 模式 。
我们在开始创建的 Pod,可以登录上对应的 Node 机器,查看容器信息 。
kubectl get pod -o wide
文章插图
登录 k8s-node2 以后,执行 docker ps 命令查看详细信息:
文章插图
可以看到有三个 pause 容器,其中两个是 flannel 和 proxy 容器,还有一个是我们的 expod 的容器,它与另一个 expod 容器共同组成了一个 Pod 。
Pod 中的容器共享两种资源-存储和网络 。
- 存储
文章插图
- 网络
文章插图
Docker的网络空间
从图中可以看出,容器之间通过docker0网卡连接,每个容器拥有独立的内部网络地址
文章插图
kubernetes 的网络空间
从图中可以看出,Pod 中的所有容器共享一个网络地址
Pod 之间如何通信Pod 之间的通信主要分为两种情况:
- 同一个 Node 上 Pod 之间的通信
- 不同 Node 之间的 Pod 通信
文章插图
跨 Node 的 Pod 之间的通信
我们在搭建 kubernetes 集群的时候,在每个 Node 机器上都创建了一个 kube-flannel 容器,这是在每个 Node 机器上使用 Flannel 虚拟网卡接管容器并跨主机通信,当一个节点的容器访问另一个节点的容器时,源节点上的数据会从 docker0 网桥路由到 flannel0 网卡,在目的节点处会从 flannel0 网卡路由到 docker0 网桥,然后再转发给目标容器 。Flannel 重新规划了容器集群的网络,这样既保证了容器 IP 的全局唯一性,又让不同机器上的容器能通过内网 IP 地址互相通信 。但是,容器的 IP 地址并不是固定的,Flannel 只分配子网段,所以容器的 IP 地址是在此网段的范围内进行动态分配的 。
推荐阅读
- 除了WIFI,你所不知道的低成本私有无线网络组网解决方案
- 老茶头是怎么形成的,老茶头是如何形成的呢
- 猴菇丁香沙棘茶的功效,猴头丁香沙棘茶的功效与作用
- 苦荞茶品牌排行,黑苦荞茶的价格
- 韭菜子泡茶的功效,刺五加叶茶的功效与作用
- 经常喝六安瓜片的好处,六安瓜片的功效与作用
- 荷叶茶的功效与作用,茉莉荷叶茶功效
- 好白茶的主要品种,白茶是什么茶品种
- 后起八大茶山现状简介,古六大茶山之革登茶山的地理渊源
- 花草蜜桃茶的做法,蜜桃果茶的做法