kubernetes的基本单位Pod详解

Pod 是 kubernetes 中的基本单位,容器本身不会直接分配到主机上,而是会封装到 Pod 对象中 。一个 Pod 通常表示单个应用程序,有一个或者多个相关的容器组成,这些容器的生命周期都是相同的,而且会作为一个整体在同一个 node 上调度起来,这些容器共享环境、存储卷和 IP 控件 。尽管 Pod 中可能存在多个容器,但是在 kubernetes 中是以 Pod 为最小单位进行调度、伸缩并共享资源、管理生命周期 。
Pod 的基本操作我们先来看一下 Pod 的创建、查询、修改和删除操作 。
创建 Pod【kubernetes的基本单位Pod详解】# expod.ymlapiVersion: v1kind: Podmetadata:name: expodspec:containers:- name: expod-containerimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh', '-c']args: ['echo "Hello Kubernetes!"; sleep 3600']简单的模板含义:

  • apiVersion 表示 API 版本,v1 表示使用 kubernetes API 的稳定版本 。
  • kind 表示要创建的资源对象 。
  • metadata 表示该资源对象的元数据 。可以拥有多个元数据,name 表示当前资源的名称 。
  • spec 表示该资源对象的具体设置 。其中 containers 表示容器的集合,我们这里设置了一个简单的容器 。name: 要创建的容器名称 。image: 容器的镜像地址 。imagePullPolicy: 镜像的下载策略,支持3种策略:Always、Never、IfNotPresent 。command: 容器的启动命令列表,不配置的话就使用镜像内部的命令 。args: 启动参数列表
运行命令,创建 Pod 。
kubectl Apply -f expod.yml创建成功后,查询一下当前运行的所有 Pod
kubectl get pod
kubernetes的基本单位Pod详解

文章插图
 
查询 PodPod 信息查询的命令有多个,查询的详细度也不一样:
  • 查询默认命名空间 default 的所有 Pod
kubectl get pod
  • 查询指定 Pod 的信息
kubectl get pod expod
  • 对 Pod 状态进行持续监控
kubectl get pod -w
  • 显示更多概要信息
kubectl get pod -o wide
kubernetes的基本单位Pod详解

文章插图
 
比简要信息多显示集群内 IP 地址、所属 node
  • 按照指定格式输出 Pod 信息
kubectl get pod expod -o yaml
  • 最详细信息显示,包括 Event
kubectl describe pod expod这是最常用的资源信息查询命令,显示信息比较全面,包括资源的基本信息、容器信息、准备情况、存储卷信息和相关的事件列表 。在资源部署的时候,如果遇到问题,可以用这个命令查询详情,分析错误原因 。
  • 查询Pod的日志信息
kubectl logs Pod名称修改 Pod修改已存在的 Pod 属性可以使用 replace 命令
kubectl replace -f pod的yaml文件我们修改一下前面创建 Pod 的 yaml 文件,把输出 “Hello Kubernetes!" 修改为 "Hello Kubernetes replaced!" 。
# expod.ymlapiVersion: v1kind: Podmetadata:name: expodspec:containers:- name: expod-containerimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh', '-c']args: ['echo "Hello Kubernetes replaced!"; sleep 3600']Pod 有很多属性是无法修改的,如果一定要修改,需要加上 --force 参数,相当于重建 Pod 。
kubectl replace -f expod.yml --force可以看一下命令输出结果
kubernetes的基本单位Pod详解

文章插图
 
先删除了 expod 这个 Pod,然后创建一个替换的 expod 的 Pod,我们再查看以下 Pod 的日志 。
kubectl logs expod
kubernetes的基本单位Pod详解

文章插图
 
可以看到 Pod 信息已经修改了 。
删除 Pod删除 Pod 非常简单,执行以下命令即可:
kubectl delete pod expod如果我们是通过 Pod 模板文件创建的,推荐使用基于模板文件的删除命令 。
kubectl delete -f expod.ymlPod 与容器我们可能已经发现了,Pod 模板和 Docker-Compose 非常相似,但是 Pod 模板可以配置的参数更多、更复杂 。
Pod 创建容器的方式在 Pod 模板的 Containers 部分,指明容器的部署方式,在部署的过程中会转换成对应的容器运行命令,就以我们最开始的 Pod 模板为例:
apiVersion: v1kind: Podmetadata:name: expodspec:containers:- name: expod-containerimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh', '-c']args: ['echo "Hello Kubernetes!"; sleep 3600']


推荐阅读