pod的生命周期

目录

1 INIT 容器的介绍

2 INIT 容器的功能

3 INIT容器的示例

 3.1 以yml格式启动容器并查看其状态

3.2 查询init容器的日志

3.3 进入容器创建文件

3.4 退出容器查看状态

3.5 测试容器是否可用


1 INIT 容器的介绍

官方文档

Pod | Kubernetesicon-default.png?t=O83Ahttps://kubernetes.io/zh-cn/docs/concepts/workloads/pods/

  • Pod 可以包含多个容器,应用运行在这些容器里面,同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器。

  • Init 容器与普通的容器非常像,除了如下两点:

    • 它们总是运行到完成

    • init 容器不支持 Readiness,因为它们必须在 Pod 就绪之前运行完成,每个 Init 容器必须运行成功,下一个才能够运行。

  • 如果Pod的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。但是,如果 Pod 对应的 restartPolicy 值为 Never,它不会重新启动。

2 INIT 容器的功能

  • Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。

  • Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。

  • 应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。

  • Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问。

  • 由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。

3 INIT容器的示例

[root@k8s-master yaml]# kubectl run shuyan --image myapp:v1 \
--dry-run=client -o yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

[root@k8s-master yaml]# kubectl run shuyan --image myapp:v1 \
--dry-run=client -o yaml > shuyan.yml


[root@k8s-master yaml]# vim shuyan.yml 


apiVersion: v1
kind: Pod
metadata:
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
  initContainers:   # 定义就绪容器,只有这个容器运行成功之后才能运行其他容器
  - image: busyboxplus:latest
    name: initnode
    # 定义了一个循环测试testfile文件是否存在,如不存在会一直死循环输出打印语句
    command: ["sh","-c","until test -e /testfile;do echo wating for myservice;sleep 2;done"]

 3.1 以yml格式启动容器并查看其状态

[root@k8s-master yaml]# kubectl apply -f shuyan.yml 
pod/shuyan created
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS     RESTARTS   AGE
shuyan   0/1     Init:0/1   0          7s

# 查看状态发现一直显示init容器没有运行完成
[root@k8s-master yaml]# kubectl get pods -o wide 
NAME     READY   STATUS     RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
shuyan   0/1     Init:0/1   0          14s   10.244.2.17   k8s-node2   <none>           <none>

3.2 查询init容器的日志

查看init容器的系统日志,发现其一直在输出打印的语句,证明在这个系统当中的根目录下并没有一个testfile文件 

[root@k8s-master yaml]# kubectl logs pods/shuyan initnode 
wating for myservice
wating for myservice
wating for myservice
wating for myservice
wating for myservice
wating for myservice
wating for myservice
wating for myservice

3.3 进入容器创建文件

[root@k8s-master yaml]# kubectl exec -it pods/shuyan -c initnode  -- /bin/sh
/ # ls 
bin      dev      etc      home     lib      lib64    linuxrc  media    mnt      opt      proc     root     run      sbin     sys      tmp      usr      var
/ # touch testfile

3.4 退出容器查看状态

# ctrl + pq 退出容器
/ # command terminated with exit code 137

# 查看pods状态,发现容器已经成功运行
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS   AGE
shuyan   1/1     Running   0          2m27s

# 查看详细信息
[root@k8s-master yaml]# kubectl describe pods shuyan 

3.5 测试容器是否可用

[root@k8s-master yaml]# kubectl get pods -o wide 
NAME     READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
shuyan   1/1     Running   0          25m   10.244.2.17   k8s-node2   <none>           <none>
[root@k8s-master yaml]# curl 10.244.2.17
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍妍的宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值