kubernetes Pod深入理解
结合这个一起看k8s-pod状态和生命周期管理(liveness and readiness)
Pod存在的意义:
解决共享存储
容器为单进程容器,每个容器之间网络空间都是隔离的,使用一个共享的容器,实现一个pod里不同的容器使用一个网络,pod的独立IP也是这个共享容器
pause就是这个共享容器的镜像
可以在node1上查看到这个镜像启动的容器
Pod为亲密性应用而存在
亲密性应用场景:
- 两个应用之间发生文件交互
- 两个应用 需要通过127.0.0.1或者socket通信(典型组合:nginx+php)
- 两个应用需要发生频繁的调用
共享存储
比如一个pod里有两个container,使用一个共享存储container存储另外两个容器
数据卷写法
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: write image: centos 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 command: ["bash","-c","tail -f /data/hello"] volumeMounts: - name: data mountPath: /data volumes: - name: data emptyDir: {} #宿主机某个空目录映射到容器里的/data
查看这个数据卷 存储在宿主机的位置
资源限制
资源限制的好处:
避免某个容器利用率异常突发影响,不染会产生雪崩效应
Pod和Container的资源请求和限制:
- spec.containers[].resources.limits.cpu
- spec.containers[].resoucres.limits.memory
- spec.containers[].resources.requests.cpu
- spec.containers[].resoucres.requests.memory
apiVersion: v1 kind: Pod metadata: name: frontend spec: containers: - name: db image: mysql env: - name: MYSQL_ROOT_PPASSWORD value: "password" resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" - name: wp image: wordpress resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
limits:实际最大
requests:申请的配额,主要用于k8s做资源调度分配时参考值
一般limits的设置要比requests大1-1.5倍
1000m = 1c
500m = 0.5c
250m = 0.25c
重启策略
请移步k8s-pod状态和生命周期管理(liveness and readiness)
调度策略
nodeName:将Pod调度到指定的Node名称上
apiVersion: v1 kind: Pod metadata: name: pod-example labels: app: nginx spec: nodeName: k8s-node2 containers: - name: nginx image: nginx:1.15
nodeSelector
请移步:K8s-对象资源格式&&标签
Taint
请移步k8s-常用命令
污点的应用场景:
- 节点独占
- 具有特殊硬件设备的节点
可取值:
- NoSchedule:一定不能被调度
- PreferNoSchedule:尽量不要调度
- NoExecute:不仅不会调度,还会去追逐已有的pod
查看Taint的方法:
[root@master01 ~]# kubectl describe node|grep Taint Taints: node-role.kubernetes.io/master:NoSchedule Taints: <none> Taints: <none>
继续阅读

我的微信
这是我的微信扫一扫
评论