首页 » 翻译 » Kubernetes » 正文

Kubernete ,如何通过yaml文件创建一个Pod

我们很多情况下都知道通过yaml文件创建一个pod,但是一直不知道里边的参数到底由多少的,只是知道简单的参数,下面说说从官网找到的如何创建一个pod的“标配”

先看一个标准的
{
“kind”: “Pod”,
“apiVersion”: “v1″,
“metadata”: {
“name”: “”,
“labels”: {
“name”: “”
},
“generateName”: “”,
“namespace”: “”,
“annotations”: []
},
“spec”: {
//See ‘The spec schema’ for details.
}
}

我们逐个来分析以下:

kind: 因为我们创建的是POD,所以,这个值是固定的
apiVersion:现在来说是V1
metadata:包含了对象的如下信息:
name:Pod的名称,如果generateName没有指定的话,这个值是必须有的
labels:可选,一组key/value值,用来让 replication controllers 和service 来筛选的
generateName:如果name的值没有设定,这个就是自动生成的唯一的名称的前缀
namespace:这个值是必须有的,Pod的命名空间
annotations:可选解释,提供一组key/value,主要是为了外部对象进行检索

spec:Pod的详细描述
先看一个例子

“spec”: {
“containers”: [
{
“name”: “”,
“image”: “”,
“command”: [
“”
],
“args”: [
“”
],
“env”: [
{
“name”: “”,
“value”: “”
}
],
“imagePullPolicy”: “”,
“ports”: [
{
“containerPort”: 0,
“name”: “”,
“protocol”: “”
}
],
“resources”: {
“cpu”: “”
“memory”: “”
}
}
],
“restartPolicy”: “”,
“volumes”: [
{
“name”: “”,
“emptyDir”: {
“medium”: “”
},
“secret”: {
“secretName”: “”
}
}
]
}

可以看到,spec中的重要对象就是containers[],也就是我们创建了pod的目的肯定是为了创建container,否则创建了也没用,而且Containers在Pod创建后就不能在追加了。一个Pod至少包含一个container

containers 必须包含如下字段:
name:名称
image:Docker镜像名称

containers 一般包含如下可选字段:
command[]:The entrypoint array. Commands are not executed within a shell. The docker image’s entrypoint is used if this is not provided. Cannot be updated.
args[]:A command array containing arguments to the entrypoint. The docker image’s cmd is used if this is not provided. Cannot be updated
env[]:环境变量,有两个变量,name,value
name:环境变量的名称
value:环境变量的值
imagePullPolicy:镜像拉取策略,有如下几个值:
Always(默认)
Never
IfNotPresent
ports[]:containers要暴露的端口,
containerPort:pod的ip上要暴露的端口
name:端口的名称,
protocol:TCP/UDP
resources:资源,一般包含如下:
CPU:可用的CPU资源
memory:可用的内存资源

除了containers[]之外,另外一个就是restartPolicy

restartPolicy 有如下三个值:

Always
OnFailure
Never

除了containners和restartPolicy,剩下的就是volumes[]
volumes[]:一系列可以被挂在到containner中的磁盘,这些磁盘属于pod,我们要对每一个磁盘资源命名,然后containner需要包含这个名字才可以使用

emptyDir:临时目录,和pod的生命周期相同,包含如下项目:
medium:用来支持的技术,必须为空或者Memory
hostPath:主机上已经存在的目录
path:
secret:加密
secretName:Pod命名空间下加密的名称

下面是简单的例子

{
“kind”: “Pod”,
“apiVersion”: “v1″,
“metadata”: {
“name”: “redis-controller”,
“labels”: {
“app”: “redis-controller”
}
},
“spec”: {
“containers”: [
{
“name”: “redis”,
“image”: “redis”,
“ports”: [
{
“containerPort”: 6379,
“protocol”: “TCP”
}
]
}
]
}
}

发表评论