Pod 为了亲密性应用而存在:

  • 两个应用需要通过 127.0.0.1 或者 Socket 通信;
  • 两个应用之间发生文件交互;
  • 两个应用发生频繁的调用

共享网络

Pod 中的所有容器拥有同一个 IP 地址:

# 生成 Pod 的  YAML 文件
[root@k8s-master01 ~]# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: my-podz
name: my-podz
namespace: default
spec:
containers:
- name: nginx-demoz
image: nginx:1.8
- name: java-demoz
image: www.myharbor.com/wangqihan/java-demo:v1 # 创建 Pod
[root@k8s-master01 ~]# kubectl apply -f pod.yaml [root@k8s-master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-podz 2/2 Running 0 11s # 进入 java-demoz 查看 IP 地址
[root@k8s-master01 ~]# kubectl exec -it my-podz -c java-demoz bash
root@my-podz:/usr/local/tomcat# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
3: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
link/ether ce:67:02:aa:10:c2 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.244.1.15/24 brd 10.244.1.255 scope global eth0
valid_lft forever preferred_lft forever
root@my-podz:/usr/local/tomcat# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 14 01:31 ? 00:00:24 /usr/local/openjdk-8/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging
root 40 0 0 01:33 pts/0 00:00:00 bash
root 46 40 0 01:34 pts/0 00:00:00 ps -ef # 进入 nginx-demoz 查看 IP 地址
[root@k8s-master01 ~]# kubectl exec -it my-podz -c nginx-demoz bash
root@my-podz:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
3: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
link/ether ce:67:02:aa:10:c2 brd ff:ff:ff:ff:ff:ff
inet 10.244.1.15/24 brd 10.244.1.255 scope global eth0
valid_lft forever preferred_lft forever
root@my-podz:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 01:31 ? 00:00:00 nginx: master process nginx -g daemon off;
nginx 6 1 0 01:31 ? 00:00:00 nginx: worker process
root 7 0 0 01:34 pts/0 00:00:00 bash
root 13 7 0 01:34 pts/0 00:00:00 ps -ef

共享存储

为了持久化保存容器的数据,可以使用 Kubernetes Volume

Volume 存储卷 是 Pod 中能够被多个容器访问的共享目录,Kubernetes 的 Volume 概念,用途和目的与 Docker 的 Volume 类似,但两者不能等价:

  • 首先,Kubernetes 中的 Volume 定义在 Pod 上,被一个 Pod 里的多个容器挂在到具体的文件目录下;
  • 其次,Kubernetes 中的 Volume 与 Pod 生命周期相同,但与 Docker 容器生命周期不相关,容器终止或者重启时,Volume 中的数据也不会丢失;
  • 最后,Kubernetes 中的 Volume 支持多种 backend 类型,包括 emptyDir、hostPath、GCE Persistent Disk、AWS Elastic Block Store、NFS、Ceph 等。
[root@k8s-master01 ~]# vim mypodzz.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-podzz
namespace: default
spec:
containers:
- name: producer
image: centos:7
command: ["bash","-c","for i in {1..100};do echo $i >> /producer_dir/hello;sleep 1;done"]
volumeMounts:
- name: shared-volume
mountPath: /producer_dir - name: consumer
image: centos:7
command: ["bash","-c","tail -f /consumer_dir/hello"]
volumeMounts:
- name: shared-volume
mountPath: /consumer_dir volumes:
- name: shared-volume
emptyDir: {} # 创建 Pod 资源
[root@k8s-master01 ~]# kubectl apply -f podzz.yaml # 检查 Pod 资源状态
[root@k8s-master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-podzz 2/2 Running 0 20s # 查看 comsumer 容器内挂载目录
[root@k8s-master01 ~]# kubectl exec -it my-podzz -c consumer bash
[root@my-podzz /]# cat /consumer_dir/hello
1
2
3
... # 查看 producer 容器内挂载目录
[root@k8s-master01 ~]# kubectl exec -it my-podzz -c producer bash
[root@my-podzz /]# cat /producer_dir/hello
1
2
3
...

# 查看 Pod 资源详细信息,可以看到被分配到 k8s-node2 节点
[root@k8s-master01 ~]# kubectl describe pod my-podzz | tail -4
Name: my-podzz
Namespace: default
Priority: 0
Node: k8s-node2/172.16.1.54 # 到 Node 节点上观察 Docker 容器
[root@k8s-node02 data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
633ac7b61c12 7e6257c9f8d8 "bash -c 'for i in {…" About a minute ago Up About a minute k8s_producer_my-podzz_default_e1a6acc0-4903-4599-a922-4c1beb6a7b56_4
36f4c5957b51 7e6257c9f8d8 "bash -c 'tail -f /c…" 9 minutes ago Up 9 minutes k8s_consumer_my-podzz_default_e1a6acc0-4903-4599-a922-4c1beb6a7b56_0 # 观察挂载目录
[root@k8s-node02 data]# docker inspect 633ac7b61c12 | grep -i source
[root@k8s-node02 data]# docker inspect 36f4c5957b51 | grep -i source

参考:K8s Volume 存储

Pod 实现机制的更多相关文章

  1. kubernetes之node资源紧缺时pod驱逐机制

    在系统硬件资源紧缺的情况下保证node的稳定性, 是kubelet需要解决的一个重要问题 1.驱逐策略 kubelet持续监控主机的资源使用情况, 一旦出现资源紧缺的迹象, kubelet就会主动终止 ...

  2. Kubernetes — 深入解析Pod对象:基本概念(二)

    作为 Kubernetes 项目里最核心的编排对象,Pod 携带的信息非常丰富.其中,资源定义(比如 CPU.内存等),以及调度相关的字段.在本篇,我们就先从一种特殊的 Volume 开始,来帮助你更 ...

  3. [Kubernetes]容器健康检查和恢复机制

    在Kubernetes中,可以为Pod里的容器定义一个健康检查探针(Probe),这样Kubernetes会根据这个Probe的返回值决定这个容器的状态,而不是直接以容器是否允许(来自Docker返回 ...

  4. 十六, k8s集群资源需求和限制, 以及pod驱逐策略。

    目录 容器的资源需求和资源限制 QoS Classes分类 Guaranteed Burstable Best-Effort kubernetes之node资源紧缺时pod驱逐机制 Qos Class ...

  5. 15. 深入解析Pod对象(二):使用进阶

    15. 深入解析Pod对象(二):使用进阶 15.1 Projected Volume,投射数据卷 备注:Projected Volume 是 Kubernetes v1.11 之后的新特性 在 Ku ...

  6. 06 . Kubernetes之Pod控制器详细介绍及应用

    Pod API属性详解 Pod是k8s集群中的最小编排单位.将这个设计落实到API对象上,容器就成了Pod属性里一个普通的字段.那么到底哪些属性属于Pod对象,哪些属性属于容器的呢?先看下面的一段描述 ...

  7. 第6章:深入理解Pod对象

    Pod是最小的部署单元,也是后面经常配置的地方,本章节带你熟悉Pod中常见资源配置及参数. 也就是YAML这部分: ... template: metadata: labels: app: web s ...

  8. K8S——Pod

    一.Pod概念 二.Pod存在的意义 三.Pod的实现机制 四.Pod镜像拉取策略 五.Pod资源限制 六.Pod重启机制 七.Pod的健康检查 八.Pod调度策略(创建Pod流程)

  9. kubernetes核心概念

    摘抄自:  https://www.cnblogs.com/zhenyuyaodidiao/p/6500720.html 1.基础架构 1.1 Master Master节点上面主要由四个模块组成:A ...

随机推荐

  1. centos7虚拟机开启端口后 外部不能访问的问题

    转载 https://blog.csdn.net/u012045045/article/details/104219823 虚拟机新开了5005端口,系统内部是显示开了的(wget 192.168.4 ...

  2. uni-app开发经验分享三: Vuex实现登录和用户信息留存

    在做用户登录的过程中,其实最重要的是登录成功后的数据要怎么储存,储存到哪里,这里我分享一个利用vuex来实现用户登录和用户数据留存的方法 vuex代码如下: //引入vue和vuex import V ...

  3. 你真的了解Android系统启动流程吗?Android高级工程师必看系列,已开源

    前言 从毕业到现在面试也就那么几家公司,单前几次都比较顺利,在面到第三家时都给到了我offer!前面两次找工作,没考虑到以后需要什么,自己的对未来的规划是什么,只要有份工作,工资符合自己的要求就行!所 ...

  4. jmeter报Address already in use: connect

    jmeter报Address already in use: connect   用windows进行jmeter压测出现java.net.BindException: Address already ...

  5. LOJ10099矿场搭建

    HNOI 2012 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖 ...

  6. Docker是如何实现隔离的

    Docker是如何实现隔离的 2.进程的隔离 4.文件的隔离 5.资源的限制 7.与传统虚拟机技术的区别 原文地址: 微信公众号:<鲁智深菜园子>:Docker是如何实现隔离的 # 1.运 ...

  7. 后台获取日期值,前台Js对日期进行操作

    需求描述: 方法一: 方法二: 一些标签常用隐藏方法: 需求描述: 在初始化页面的时候,需要根据系统当前的时间对前台JSP页面的某项进行值的初始化,若前台JSP标签没有相关可以初始化的属性,那么可以从 ...

  8. python----类,面向对象(封装、继承、多态)(属性,方法)

    什么是对象? 对象是内存中专门用来存储数据的一块区域 对象中可以存放各种数据(数字.代码等) 对象由三部分组成(1,对象标识(id)2,对象类型(type)3,对象的值(value)) 面向对象编程是 ...

  9. [源码分析] Dynomite 分布式存储引擎 之 DynoJedisClient(1)

    [源码分析] Dynomite 分布式存储引擎 之 DynoJedisClient(1) 目录 [源码分析] Dynomite 分布式存储引擎 之 DynoJedisClient(1) 0x00 摘要 ...

  10. Yacc使用优先级

    Yacc使用优先级 本示例是龙书4.9.2的示例,见图4-59. 和前一章一样,新建xUnit项目,用F#语言.起个名C4F59安装NuGet包: Install-Package FSharpComp ...