



本节以示例的形式来介绍Pod的典型使用。
1.创建Pod
Pod有3种创建方式:命令、YAML文件和JSON文件,具体示例如下。
(1)使用命令创建Pod
1)使用“kubectl run”创建指定的Pod,命令如下。
上述命令参数说明如下。
● --generator=run-pod/v1用来指定API generator的名字为run-pod/v1。
● mynginx为Pod标识。
● --image=nginx用来指定Pod中容器的镜像名字为nginx。
2)查看Pod信息,命令如下。
系统会打印新创建的Pod,内容如下。
因为Pod是Kubernetes object,因此,一旦Pod创建后,即使Kubernetes崩溃,当其重新恢复运行后,Kubernetes依然会根据之前Pod的配置信息,创建Pod。
3)使用下面的命令来删除Pod。
上述命令的参数说明如下。
● delete是选项,表示删除动作。
● pod表示删除的resource类型。
● mynginx是要删除的resource标识。
(2)使用YAML创建Pod
首先将Pod Object信息写入YAML,步骤如下。
1)编辑pod.yml文件,命令如下。
2)在pod.yml中输入以下内容。
上述Pod Object的YAML文件说明如下。
● 第一个成员是apiVersion,值是v1。
● 第二个成员是kind,值是Pod。
● 第三个成员metadata是一个Object,用来指定Pod的标识,它有一个成员name,其值是mynginx。
● 第四个成员spec是一个Object,用来指定Pod中的容器信息,它有一个成员containers,因为Pod可以运行多个容器,所以containers是一个数组,数组中的每个元素就是一个容器的信息,目前container数组中只有1个元素,说明该Pod只运行一个容器,该元素有两个成员,name用来指定容器的名字,image用来指定容器的镜像名。特别注意:image的首字母一定要和name的首字母上下对齐。
上述YAML内容是创建一个Pod的最简模板,每一项都是必填项,缺少任何一项,创建Pod就会失败。如果要指定Pod更多的特性,可以使用“kubectl explain pod--recursive=true”获取Pod Object的完整信息。
3)创建Pod
创建Pod的命令如下,其中apply是选项,指定使用配置文件来创建resource;-f后面跟配置文件名;pod.yml是Pod的YAML配置文件名。
如果系统打印如下信息,则说明Pod创建成功。
(3)使用JSON创建Pod
将Pod Object信息写入JSON文件,步骤如下。
1)编辑pod.json文件,命令如下。
2)在pod.json中输入以下内容。
上述内容由我们在http://nodeca.github.io/js-yaml/中输入pod.yml内容转换而来,转换后的内容如下所示。注意要给以下内容的每个Key和Value加上双引号",才能转换成kubectl所能解析的JSON格式。
3)创建Pod。因为Pod不能重名,因此需要先删除前面创建的Pod,命令如下。
创建Pod的命令如下,其中apply是选项,指定使用配置文件来创建resource;-f后面跟配置文件名;pod.json是Pod的JSON配置文件名。
如果系统输出以下信息,则说明Pod创建成功。
2.查看Pod信息
(1)查看指定Pod的信息
使用下面的命令来查看指定Pod信息。
上述命令的部分输出信息如图3-4所示,除了创建Pod时设置的Pod Name为mynginx,容器名字为nginx-container,容器Image为nginx等配置信息外,系统还输出了Pod的状态(Status)是Running,容器的状态(State)是Running等,这些信息都是Pod创建后,由Kubernetes所填入和更新的。
图3-4 mynginx Pod信息图
(2)查看所有Pod的情况
可以使用下面的命令来获取Kubernetes中Pod的所有信息。
上述命令的输出如图3-5所示,总共有9列,说明如下。
图3-5 Pod全部信息图
1)第1列NAME,表示Pod的名字。
2)第2列READY,表示Pod的状态,它由两个数字组成,例如0/1,其中第一个数字0表示运行的Pod个数为0,它表示Pod的运行状态,数字1表示用户期望运行的Pod个数是1,它是由用户在创建Pod时,或者更新Pod时所写入配置文件的值。
3)第3列STATUS表示当前Pod的状态(阶段),Running表示Pod正在运行,如果不是正常运行,则会给出原因,如ImagePullBackOff表示拉取镜像失败,ContainerCreating。
4)第4列RESTARTS,表示重启Pod的次数。
5)第5列AGE,表示该Pod的年龄。
6)第6列IP是Pod的IP地址。
7)第7列NODE表示Pod所在的节点。
8)第8列NOMINATED NODE,表示该节点上发生了抢占,为该Pod的运行预留了所需资源,并期望Kubernetes调度器将该Pod调度到该节点上运行。
9)第9列READINESS GATES用于评估Pod准备状态的附加条件,包括两个数字,例如2/3,其中第一个数字2表示满足附加条件的个数,第二个数字3表示所有附加条件的个数。
如果要列出所有Namespace的Pod,可以加上以下参数。
上述命令的输出如图3-6所示。
图3-6 所有Namespace的Pod全部信息图
3.编辑和导出Pod配置信息
可以使用下面的命令来查看Pod信息,默认是YAML格式。
上述命令输出内容如下,这部分内容是在vi中打开的,因此既可以查看,又可以编辑,还可以将其导出成文件。
修改Pod中Container的Image为nginx01,然后保存退出。
Kubernetes会检测到Pod定义发送修改,并按照新的Pod定义重新启动Pod并运行容器,拉取新的Image nginx01,如下所示。
由于nginx01是一个不存在的镜像,因此,最终拉取的结果是失败。
上述配置文件中,很多选项是不能在线修改的,诸如apiVersion、kind、name等,这些选项在修改后保存的时候,会提示修改失败。
也可以查看JSON格式的Pod信息,命令如下。