网站首页 文章专栏 02pod.md
pod是k8s的最小调度资源。一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或者多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。
apiVersion: v1
kind: Pod
metadata:
name: tensorflow-simple
spec:
containers:
- name: tensorflow-simple
image: tensorflow1_18:v2
Volume可以为容器提供持久化存储,比如
apiVersion: v1
kind: Pod
metadata:
name: tensorflow-simple
spec:
containers:
- name: tensorflow-simple
image: tensorflow1_18:v2
volumeMounts:
- name: tensorflow-storage
mountPath: /data/tensorflow
volumes:
- name: tensorflow-storage
emptyDir: {}
apiVersion: v1
kind: Pod
metadata:
name: tensorflow-simple
spec:
containers:
- name: tensorflow-simple
image: tensorflow1_18:v2
ports:
- containerPort: 6081
环境变量为容器提供了一些重要的资源,包括容器和Pod的基本信息以及集群中服务的信息等:
Pod的名字、命名空间、IP以及容器的计算资源限制等可以以Downward API的方式获取并存储到环境变量中。
apiVersion: v1
kind: Pod
metadata:
name: tensorflow-simple
spec:
containers:
- name: tensorflow-simple
image: tensorflow1_18:v2
ports:
- containerPort: 6081
env:
- name: MY_CPU_REQUEST
valueFrom:
resourceFieldRef:
resource: requests.cpu
- name: MY_TEST_VALUE
value: "MY_VALUE"
command、args两项实现覆盖Dockerfile中ENTRYPOINT的功能,具体的command命令代替ENTRYPOINT的命令行,args代表集体的参数。
command:/test.sh,p1,p2 args: p3,p4
另:多命令执行使用sh,-c,[command;command,…]的形式,单条命令的参数填写在具体的command里面,例如: command:[sh,-c,echo ‘123’;/test.sh,p1,p2,p3,p4] args: 不填
apiVersion: v1
kind: Pod
metadata:
name: tensorflow-simple
spec:
containers:
- name: tensorflow-simple
image: tensorflow1_18:v2
imagePullPolicy: IfNotPresent
支持三种ImagePullPolicy
注意: 默认为
IfNotPresent
,但:latest
标签的镜像默认为Always
。 拉取镜像时docker会进行校验,如果镜像中的MD5码没有变,则不会拉取镜像数据。 生产环境中应该尽量避免使用:latest
标签,而开发环境中可以借助:latest
标签自动拉取最新的镜像。
Kubernetes通过cgroups限制容器的CPU和内存等计算资源,包括requests(请求,调度器保证调度到资源充足的Node上)和limits(上限)等:
spec.containers[].resources.limits.cpu
:CPU上限,可以短暂超过,容器也不会被停止 可以是300m
这样的百分比格式,也可以是1
这样的核心数格式spec.containers[].resources.limits.memory
:内存上限,不可以超过;如果超过,容器可能会被停止或调度到其他资源充足的机器上spec.containers[].resources.requests.cpu
:CPU请求,可以超过spec.containers[].resources.requests.memory
:内存请求,可以超过;但如果超过,容器可能会在Node内存不足时清理比如nginx容器请求30%的CPU和56MB的内存,但限制最多只用50%的CPU和128MB的内存:
apiVersion: v1
kind: Pod
metadata:
name: tensorflow-simple
spec:
containers:
- name: tensorflow-simple
image: tensorflow1_18:v2
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: "300m"
memory: "128Mi"
limits:
cpu: "1" # 限定1个cpu核心
memory: "512Mi"
注意,CPU的单位是milicpu
,500mcpu=0.5cpu;而内存的单位则包括E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki
等。
参考: