POD基础知识

1. Pod不是容器,是kubernetes中最小的编排单位

        容器就成了Pod属性里普通的字段

2. Pod扮演的事传统部署环境里 "虚拟机" 的角色

        2.1 凡是调度、网络、存储,以及安全相关的属性,基本上是Pod级别的

        2.2 凡是跟容器的Linux Namespace相关的属性,也一定是Pod级别的

        2.3 凡是Pod中的容器要共享宿主机的Namespace,也一定是Pod级别的

3. Pod中比较重要的字段

        3.1 NodeSelector:是一个使Pod与Node进行绑定的字段

apiVersion: v1
kind: Pod
...
spec:
 nodeSelector:
   disktype: ssd
...


# 意味着这个 Pod 永远只能运行在携带了“disktype: ssd”标签(Label)的节点上

        3.2 HostAliases:定义了容器中hosts文件内容

 在kubernetes项目中,如果要设置hosts文件里的内容,一定要通过这种方法。否则,如果直接修改了hsots文件,在Pod被删除重建之后,kubernetes会自动覆盖掉被修改的内容

apiVersion: v1
kind: Pod
...
spec:
  hostAliases:
  - ip: "10.1.2.3"
    hostnames:
    - "foo.remote"
    - "bar.remote"
...

        3.3 shareProcessNamespace:pod 配置进程命名空间共享。

当启用进程命名空间共享时,容器中的进程对该 pod 中的所有其他容器都是可见的。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
...
  shareProcessNamespace: true
  containers:
  - name: nginx
    image: nginx
  - name: shell
    image: busybox
    stdin: true
    tty: true
...

        3.4 共享宿主机的Namespace

共享宿主机的 Network、IPC 和 PID Namespace

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
...
  hostNetwork: true
  hostIPC: true
  hostPID: true
  containers:
  - name: nginx
    image: nginx
  - name: shell
    image: busybox
    stdin: true
    tty: true
...

        3.5 container字段

                3.5.1 imagePullPolicy: 定义了镜像拉取的策略

                        Always:默认策略,仅下载镜像

                        Never:仅使用本地镜像

                        IfNotPresent:优先使用本地镜像,否则下载远程镜像

                3.5.2 lifecycle:在容器状态发生变化时触发一系列"钩子"

                        postStart:在容器启动后,立即执行一个指定动作

虽然是在Docker容器ENTRYPOINT执行之后,但它并不严格保证顺序。也就是说,在postStart启动时,ENTRYPOINT有可能还没有结束。如果postStart执行超时或者错误,kubernetes会在该Pod的Events中报出该容器启动失败的错误信息,然后Pod也会处于失败的状态

                        preStop:发生的时机是容器被杀死之前

需要明确的是,preStop操作的执行,是同步的。所以,它会阻塞当前的容器杀死流程,直到这个Hook定义操作完成之后,才允许容器被杀死。项目在需要优雅退出的时候,可以使用该功能

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
....
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/usr/sbin/nginx","-s","quit"]
...

4. Pod状态

  • Pending。这个状态意味着,Pod 的 YAML 文件已经提交给了 Kubernetes,API 对象已经被创建并保存在 Etcd 当中。但是,这个 Pod 里有些容器因为某种原因而不能被顺利创建。比如,调度不成功
  • Running。这个状态下,Pod 已经调度成功,跟一个具体的节点绑定。它包含的容器都已经创建成功,并且至少有一个正在运行中。
  • Succeeded。这个状态意味着,Pod 里的所有容器都正常运行完毕,并且已经退出了。这种情况在运行一次性任务时最为常见。
  • Failed。这个状态下,Pod 里至少有一个容器以不正常的状态(非 0 的返回码)退出。这个状态的出现,意味着你得想办法 Debug 这个容器的应用,比如查看 Pod 的 Events 和日志。
  • Unknown。这是一个异常状态,意味着 Pod 的状态不能持续地被 kubelet 汇报给 kube-apiserver,这很有可能是主从节点(Master 和 Kubelet)间的通信出现了问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值