Kubernetes----Pod中的初始化容器

简介: Kubernetes----Pod中的初始化容器

一、初始化容器简介与应用场景

1.1 初始化容器简介

初始化容器是在pod的主容器启动之前要运行的容器,主要是做一些主容器的前置工作,它有两大特征:

  • 1、初始化容器必须运行完成直到结束,若某初始化容器运行失败,那么kubernetes需要重启它直到成功完成
  • 2、初始化容器必须按照定义的顺序执行,当且仅当前一个成功之后,后一个才能执行

1.2 初始化容器使用场景

初始化容器有很多应用场景,如下为最常见的几个:

  • 提供主容器镜像中不具备的工具程序或者自定义代码
  • 初始化容器要先于应用容器串行启动并运行完成,因此可用于延后应用容器的启动直至其依赖的条件得到满足

二、创建初始化容器

2.1 编写yaml文件

如下,编写pod_init_container.yaml文件,内容如下,设置一个初始化容器,用于ping 192.168.16.41,如果ping通了则继续,如果ping不通,则继续等待直到ping通

apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: pod-init-container
  namespace: dev
  labels:
    user: redrose2100
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
  initContainers:
  - name: test-ping
    image: busybox:1.30
    command: ["sh","-c","until ping 192.168.16.41 -c 1 ; do echo 'waiting for ping...'; sleep 2; done;"]

2.2 创建资源

使用如下命令创建资源

[root@master pod]# kubectl apply -f pod_init_container.yaml
namespace/dev created
pod/pod-init-container created
[root@master pod]#

2.3 查看资源创建状态

如下,可以看到pod创建过程中,首先创建并执行的初始化容器

[root@master pod]# kubectl get pod -n dev
NAME                 READY   STATUS    RESTARTS   AGE
pod-init-container   1/1     Running   0          2m15s
[root@master pod]# kubectl describe pod pod-init-container -n dev
Name:         pod-init-container
Namespace:    dev
Priority:     0
Node:         node2/192.168.16.42
Start Time:   Tue, 22 Mar 2022 17:02:15 +0800
Labels:       user=redrose2100
Annotations:  <none>
Status:       Running
IP:           10.244.2.37
IPs:
  IP:  10.244.2.37
Init Containers:
  test-ping:
    Container ID:  docker://ad5638803015fa3aec476117828a68561c3b11e478e3ea50c036700871a6e318
    Image:         busybox:1.30
    Image ID:      docker-pullable://busybox@sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3d
    Port:          <none>
    Host Port:     <none>
    Command:
      sh
      -c
      until ping 192.168.16.41 -c 1 ; do echo 'waiting for ping...'; sleep 2; done;
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Tue, 22 Mar 2022 17:02:15 +0800
      Finished:     Tue, 22 Mar 2022 17:02:15 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-z8w87 (ro)
Containers:
  nginx:
    Container ID:   docker://e1f0e2f09720dcd0f467288e8984b7741f2e6d73825428e50c9b025779a307cc
    Image:          nginx:1.17.1
    Image ID:       docker-pullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a967c03dbb
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 22 Mar 2022 17:02:16 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-z8w87 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-z8w87:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m29s  default-scheduler  Successfully assigned dev/pod-init-container to node2
  Normal  Pulled     2m29s  kubelet            Container image "busybox:1.30" already present on machine
  Normal  Created    2m29s  kubelet            Created container test-ping
  Normal  Started    2m29s  kubelet            Started container test-ping
  Normal  Pulled     2m28s  kubelet            Container image "nginx:1.17.1" already present on machine
  Normal  Created    2m28s  kubelet            Created container nginx
  Normal  Started    2m28s  kubelet            Started container nginx
[root@master pod]#

2.4 删除资源

使用如下命令删除资源

[root@master pod]# kubectl delete -f pod_init_container.yaml
namespace "dev" deleted
pod "pod-init-container" deleted
[root@master pod]#
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1134 108
|
7月前
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
655 115
|
7月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
760 2
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
741 275
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
772 16
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
389 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
296 1
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多