标签:容器 name kubernetes 对象 nginx Pod data pod
文章目录
Pod基本概念与存在意义
-
Pod
- 最小部署单元
- 一组(多个)容器的集合
- 一个Pod中的容器共享网络命名空间
- Pod是短暂的
-
Pod存在的意义
- 两个应用之间发送文件交互
- 两个应用通过127.0.0.1或者socke通信
- 两个应用需要发送频繁的调用
docker 引擎跑的容器里有一个或多个应用
Pod 里运行多个容器
一个 Pod 里运行的容器可以实现文件共享,网络共享 ,提高性能
1.1 共享网络
- 多个容器在一个命名空间中
namespace 与 cgroups
k8s默认使用docker 做容器引擎,而docker 使用 namespace 做隔离,权限控制,namespace 是linux内核的一种特性,为虚拟化而生,而 cgroups 是用于资源控制的
实例
查看一个已有的pods的yaml配置文件
kubectl get pods
kubectl get pods nginx-86c57db685-47gpt -o yaml > nginx.yaml
vim nginx.yaml
根据此配置文件修改新建一个配置文件,在一个pod里面放两个容器,然后构建
apiVersion: v1
kind: Pod
metadata:
labels:
app: test-pod
name: test-pod
namespace: default
spec:
containers:
- image: nginx
name: nginx
image: nginx
- image: tomcat
name: tomcat
image: tomcat
两个容器
kubectl get pod -o wide
两个容器在一个pod里,网络协议栈也是相同的
1.2 共享文件
因为docker设计初衷就是为了独立运行应用,其实容器之间的共享文件就是用的 docker数据卷实现
数据卷在k8s集群存在的意义是,如果一个pod挂了,那么k8s会在另一个node节点上启这个pod,而数据卷也会挂进新的node节点上,保证业务持续运行。
apiVersion: v1
kind: Pod
metadata:
name: test-pod2
spec:
containers:
- name: write
image: centos:latest
imagePullPolicy: IfNotPresent
command: ["bash","-c","for i in {1..100};do echo $i >> /data/hello;sleep 1;done"]
volumeMounts:
- name: data
mountPath: /data
- name: read
image: centos:latest
imagePullPolicy: IfNotPresent
command: ["bash","-c","tail -f /data/hello"]
volumeMounts: #具体挂载到容器的位置
- name: data
mountPath: /data
volumes: #指定挂载卷的类型及路径
- name: data
emptyDir: {} #临时存储类型,pod删除时也会清除
两个容器挂载一个 data目录,一个写,一个读,两个容器都有一样的数据,这代表一个pod中可以通过数据卷的方式实现共享。
kubectl get pod
kubectl get pod -o wide
kubectl exec -it test-pod2 -c read /bin/bash
标签:容器,name,kubernetes,对象,nginx,Pod,data,pod 来源: https://blog.csdn.net/qq_38626043/article/details/120252255
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。