首页 > 其他分享 >Kubernetes-Init容器的6个特性

Kubernetes-Init容器的6个特性

时间:2024-02-11 11:11:51浏览次数:28  
标签:容器 name Kubernetes Init 应用 Pod 运行

本文主要从以下4个方面介绍Init容器:Init容器作用、Init容器特性、Init容器与应用容器的区别、Init容器实战。

Kubernetes中的Pod内可以运行多个容器,主要分为2种:Init容器、应用容器,Sidecar容器也是一种特殊的Init容器。

Init容器的作用

Init 容器是一种特殊容器,在Pod内的应用容器启动之前运行。用于执行一些初始化的任务或设置,或者用于延迟执行应用容器。

有不少场景都需要在应用容器启动之前进行部分初始化操作,比如:等待某个服务需要等待其关联的服务可用后才启动、从配置中心获取配置后再启动 等。

Init容器的特性

  • Pod中的所有Init容器按定义的顺序串行运行,直到它们全部成功结束后,才能启动应用容器。
  • Init容器通常很小,执行简单的逻辑,它们以轻量的方式快速运行
  • Init容器与编程语言中的初始化对象类似,只会执行一次
  • 在所有的 Init 容器没有成功完成之前,Pod不会变成 Ready 状态。
  • 某个Init容器运行失败后,会导致整个Pod重新启动(重启策略为 Never 时例外)。如果 Pod 对应的重启策略为Never,并且 Pod 的 Init 容器失败,则Kubernetes会将Pod状态设置为失败。
  • Pod重启后,初始化容器也会再次运行,因此需要确保所有Init容器的操作具有幂等性。这一点与应用开发中要保证某个接口的幂等性类似。

Init容器与应用容器的关系

Init 容器与应用容器非常像,Init容器支持应用容器的全部字段和特性,包括资源限制、数据卷和安全设置,Init容器与应用容器共享数据卷和网络。关系如下图:

但是Init容器与应用容器也有3点不同:

  • 应用容器运行后没有特殊情况不会停止,他们持续提供服务,没有运行完成的概念。但是Init容器的存在就是为了初始化任务,所以必须是一个从开始到结束的过程。
  • 应用容器可以多个并行运行。但是Init容器必须当前这个启动完成后,才能启动下一个。
  • Init容器的设计是为了完成初始化任务,所以Init容器必须要在 Pod 就绪之前运行完成。自然的Init容器就不支持 生命周期存活探针就绪探针

Init容器使用实战

实战描述

  1. 定义一个Pod,Pod里定义了Init容器和应用容器。
  2. Pod里的Init容器先从网络上下载数据,将下载的数据放到emptyDir。
  3. 等待init容器执行完毕后,应用容器会自动启动,在应用容器中挂载emptyDir,此时应用容器可以看到Init容器之前下载的数据。

yaml编排文件如下

apiVersion: v1
kind: Pod
metadata:
  name: init-container-test
  namespace: demo
  labels:
    app: init-container-test
spec:
  nodeName: k8s-worker-1
  initContainers:
    - name: download
      image: busybox
      command:
        - wget
        - -O
        - /temp-dir/index.html
        - http://www.baidu.com
      volumeMounts:
        - name: temp-dir
          mountPath: /temp-dir
  containers:
    - name: web-app
      image: nginx
      ports:
        - containerPort: 80
          hostPort: 8082
      volumeMounts:
        - name: temp-dir
          mountPath: /usr/share/nginx/html
  volumes:
    - name: temp-dir
      emptyDir: {}

执行kubectl describe pod init-container-test -n demo命令,可以看到有两处容器:

如果Init容器执行有异常,可以看到Pod会被不停地重启。

总结

本文主要从以下4个方面介绍Init容器:Init容器作用、Init容器特性、Init容器与应用容器的区别、Init容器实战。

重点要注意:

  • Init容器按定义的顺序串行运行。
  • 确保所有Init容器的操作具有幂等性

本篇完结!感谢你的阅读,欢迎点赞 关注 收藏 私信!!!

原文链接:http://www.mangod.top/articles/2023/10/06/1696592271318.htmlhttps://mp.weixin.qq.com/s/7ujnGC2bpr8PqmLxFfmVeA

标签:容器,name,Kubernetes,Init,应用,Pod,运行
From: https://www.cnblogs.com/mangod/p/18013262

相关文章

  • Kubernetes架构及核心部件
    Kubernetes有哪些核心部件,架构图和流程图又是怎样的,kubectl和kubelet经常分不清,声明式API和命令式API又有什么区别,本文一一详说。1、Kubernetes集群概述1.1、概述Kubernetes是一个容器编排平台,它使用共享网络将多个主机(物理服务器或虚拟机)构建成集群。分为MasterNode(主节......
  • 概念解读-云原生和容器编排
    有些概念没有标准答案,每个地方解释的也都很模糊,概念也一直被滥用,比如说云原生的概念。有些概念听起来高大上,实际上很普通,比如说容器编排的概念。本文我对这两个概念作个解释。1、云原生最近几年,“云原生”一度成为前沿的技术用语,各种业内技术大会都能看到“云原生”的字样,但是......
  • 中小企业IT基础设施要不要上Kubernetes
    中小企业IT基础设施在要不要上Kubernetes?相信你肯定有这样的疑问,先说我的结论:根据我在主导中小企业上云过程的综合实践,建议直接上kubernetes。概况我主导的上云企业研发情况概况:研发人员30人左右,云上费用规模100万左右,项目工程数80个左右,占用k8spod数量300左右,QPS-300多。在上......
  • Start a kubernetes cluster
    1.checkifserviceofcontainerruntime--containerd--isrunningonallcomputerswhowanttojointhekubernetescluster.$systemctlstatuscontainerd●containerd.service-containerdcontainerruntimeLoaded:loaded(/usr/local/lib/systemd/syst......
  • 在k8S中,初始化容器(init container)概念原理是什么?
    在Kubernetes(k8S)中,初始化容器(InitContainer)是一个特殊类型的容器,它会在应用程序容器启动之前运行。它的主要目的是执行一些必要的先决条件任务,这些任务必须在主应用容器开始服务前完成。初始化容器的概念原理如下:顺序执行:Pod中可以定义多个初始化容器,它们按照配置文件......
  • 以容器方式部署通义千问 Qwen
    准备服务器阿里云云服务器实例规格:轻量级GPU实例ecs.vgn6i-m4-vws.xlarge(4vCPU23GiB)磁盘空间:50G操作系统:Ubuntu22.04安装dockeraptinstalldocker.io安装NVIDIAGRID驱动acs-plugin-manager--exec--plugingrid_driver_install安装NVIDIAContainerToo......
  • golang容器部署时区报错
    问题:consttimezone="Asia/Shanghai"funcTimeFormat(datetime.Time,patternstring)string{location,err:=time.LoadLocation(timezone)date.In(location)returndate.Format(pattern)} 1.在本地开发使用了时区是没有问题的,但是部署到服务器上面......
  • kubernetes---namespace(命名空间)
    1.查看namespace[root@k8s-master1~]#kubectlgetnamespaces#namespaces可以简写namespace或nsNAMESTATUSAGEdefaultActive130m #所有未指定Namespace的对象都会被默认分配在default命名空间kube-node-leaseActive130m kube-publ......
  • kubernetes集群核心概念---pod
    1.pod介绍参考链接:https://kubernetes.io/zh/docs/concepts/workloads/pods/1.1.查看pod[root@centos~]#kubectlgetpod#pod或pods都可以,不指定namespace,默认是名为default的namespace [root@centos~]#kubectlgetpod-nkube-system1.2.pod的yaml资源清单格式......
  • kubernetes集群中一些常用的资源
    Pod(容器组):Pod是k8s中最小的可部署单元,它是一个或多个容器的集合,共享网络和存储资源,并在同一主机上运行。Pod通常包含一个主应用程序容器和辅助容器(如sidecar容器)。Deployment(部署):Deployment用于定义Pod的声明性配置,并支持滚动升级和回滚。它可以确保指定数量的Pod副本正在运行,......