kubernetes-Pod

Pod作为k8s的核心对象,所有的k8s功能都必须通过Pod来实现。

如何使用YAML描述Pod

Pod是一个API对象,它必然具有apiVersion、kind、metadata、spec这四个字段

apiVersion: v1
kind: Pod
metadata:
  name: busy-pod
  labels:
    owner: robot
    env: demo

apiVersion、kind、metadata有以上信息就足够了,metadata里应该有name和labels这两个字段。spec字段由于需要管理、维护pod这个k8s的基本调度单元,里面有非常多的关键信息。

我们在创建Pod的时候必须要有一个名字,这也是k8s里所有资源对象的一个约定。lables给Pod贴上标签,结合name就更方便识别和管理了。

spec

spec字段由于需要管理、维护Pod这个k8s的基本调度单元,里面有非常多的关键信息,这里主要说一下containers。

containers是一个数组,里面的每一个元素又是一个container对象。container对象必须有name表示名字,还有image字段来说明它使用的镜像,不然k8s会在验证时报错。

container

  • name
  • image
  • ports:容器对外暴露端口
  • imagePullPolicy:Always/Never/IfNotPresent,一般默认是IfNotPresent
  • env:定义Pod的环境变量
  • command:定义容器启动时要执行的命令
  • args:command运行时的参数
spec:
  containers:
  - image: busybox:lastest
    name: busy
    imagePullPolicy: IfNotPresent
    env:
      - name: os
        value: "ubuntu"
      - name: debug
        value: "on"
    command:
      - /bin/echo
    args:
      - "$(os), $(debug)"

如何使用kubectl操作Pod

# 创建
kubectl apply -f busy-pod.yml

# 删除
kubectl delete -f busy-pod.yml

# 通过名字删除
kubectl delete pod busy-pod

# Pod只能后台运行,查看输出信息
kubectl logs busy-pod

# 查看pod列表
kubectl get pod [-n ... 指定名字空间] [--all-namespaces 指定所有名字空间]

# 查看pod详细状态
kubectl describe pod busy-pod

# 本地文件拷贝到Pod中
kubectl cp a.txt ngx-pod:/tmp

# 进入Pod
kubectl exec -it ngx-pod -- sh

其他

  • Pod内部有一个名为infra的容器,它实际上代表了Pod,维护着Pod内多容器共享的主机名、网络和存储。infra容器的镜像叫“pause”,非常小,只有不到500KB。
  • 对于确实不需要重启的Pod,可以配置字段“re-startPolicy: Never”
  • “kubectl get pod”的“READY”栏显示的Pod内部的容器状态,格式是“x/y”,表示Pod里总共定义了y个容器,其中x是正常的(ready)
  • 准确的说“kubectl cp”,“kubectl exec”操作的应该是Pod里的容器,需要用“-c”参数指定容器名,不过因为大多数Pod里只有一个容器,所以就省略了。
posted @ 2022-12-21 00:41  robot-Z  阅读(80)  评论(0编辑  收藏  举报