首页 > 其他分享 >D15 kubernetes 初始化容器(initContainers)

D15 kubernetes 初始化容器(initContainers)

时间:2024-09-05 17:03:59浏览次数:9  
标签:初始化 kubernetes D15 容器 nginx init pod k8s initContainers

	初始化容器(initContainers)是Pod中一种特殊类型的容器,专用于在主容器启动之前执行一些初始化任务和操作,以满足主容器所需的环境。
	初始化容器在整个pod的生命周期内仅运行一次,并且在主容器启动之前完成它们的任务,既初始化容器一旦任务完成,就必须退出。
  • 初始化容器有以下应用场景
数据库初始化:在主容器启动之前执行数据库的初始化操作,如创建数据库、执行数据迁移、初始化表结构等
文件准备:在主容器启动之前准备好应用程序使用的文件,如二进制文件、配置文件、证书等
依赖其他服务:如果主容器依赖其他服务,可以在启动主容器之前检查依赖服务准备就绪。如果未准备就绪,则初始化容器不退出,以确保依赖的服务启动后再启动主容器
	例如:有一个nginx提供网站服务,其网站程序托管在代码平台上。我们希望在启动容器之前自动将完整程序下载到nginx的网站根目录中,以便提供网站服务。这一需求可以通过配置初始化容器来实现。
  • 配置示例如下:
[root@k8s-master k8s]# cat pod-init.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: pod-init
  name: pod-init
spec:
  # 初始化容器
  initContainers:
  - name: clone
    image: bitnami/git
    command: ["/bin/sh", "-c", "git clone https://gitee.com/zhenliangli/web-demo /data"]
    volumeMounts:
    - name: data
      mountPath: /data
  # 主容器
  containers:
  - name: web
    image: nginx:1.23
    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html
  volumes:
  - name: data
    emptyDir: {}

	在上述配置中,initcontainers部分定义了一个初始化容器,该容器使用bitami/git镜像启动。当这个pod被创建时,启动初始化容器并执行git clone https://gitee.com/zhenliangli/web-demo /data命令将网站程序下载到/data目录中。由于/data目录通过卷与主容器中的/usr/share/nginx/html目录是共享的,因此下载的网站程序也能被nginx访问和使用

创建pod资源
[root@k8s-master k8s]# kubectl apply -f pod-init.yaml
pod/pod-init created

查看pod的时候,会发现status列显示为Init:0/1,这表示pod中有一个初始化容器在工作。
[root@k8s-master k8s]# kubectl get pod -A -o wide | grep ini
default                pod-init                                     0/1     Init:0/1   0               21s    <none>           k8s-node02   <none>           <none>
当初始化容器执行完成退出后,会继续启动主容器
[root@k8s-master k8s]# kubectl get pod -A -o wide | grep ini
default                pod-init                                     0/1     PodInitializing   0               35s    10.244.58.239    k8s-node02   <none>           <none>
[root@k8s-master k8s]# kubectl get pod -A -o wide | grep ini
default                pod-init                                     1/1     Running   0               37s    10.244.58.239    k8s-node02   <none>           <none>
pod启动后,在nginx容器的目录/usr/local/nginx/html中看到网站程序文件
[root@k8s-master k8s]# kubectl exec -it pod-init -c web -- ls /usr/share/nginx/html
Dockerfile  README.md  css  img  index.html
  • 我们也可以做这样的配置:在启动主容器之前,需要确保某http服务(访问地址为http://192.168.1.1)已启动,配置示例如下
  initContainers:
  - name: check
    image: busybox:1.28
    command: ['/bin/sh', '-c', "while true;do [[ $(curl https://192.168.1.1 -o /dev/null -s -w '%{http_code}') -eq 200 ]] && break || sleep 1;done"]

	这个初始化容器执行了一个无限循环,每间隔1s向地址http://192.168.1.1发送http请求,并获取响应的http状态码。如果状态码等于200,则表示http服务已经启动,退出循环,初始化容器工作完成,继续启动主容器

标签:初始化,kubernetes,D15,容器,nginx,init,pod,k8s,initContainers
From: https://www.cnblogs.com/suyj/p/18398735

相关文章

  • Kubernetes学习指南:保姆级实操手册06——部署kubernetes集群
    Kubernetes学习指南:保姆级实操手册06——部署kubernetes集群1、配置YUM源###在所有Master节点执行#配置yum源cat>/etc/yum.repos.d/kubernetes.repo<<EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x8......
  • 最新版Kubernetes部署教程v1.31.0
    最新版Kubernetes高可用部署教程v1.31.0系统:Almalinux9架构:192.168.100.10control-plane-endpoint.k8s.localcontrol-plane-endpoint#负载均衡服务器,配置负载均衡后修改ip后续会讲解192.168.100.10masterA.k8s.localmasterA192.168.100.20masterB.k8s.localma......
  • Kubernetes学习指南:保姆级实操手册04——主机系统初始化
    四、Kubernetes学习指南:保姆级实操手册04——主机系统初始化前言:本章节主要内容是对主机操作系统的初始化操作,如发另外标注,所有的节点操作步骤一致,可以使用软件批量初始化。1.检查系统端口确保以下端口未被占用:运行后未有任务显示,表示端口未被占用。[root@k8s-master01~]#ss-......
  • Kubernetes学习指南:保姆级实操手册05——配置集群HA负载均衡
    五、Kubernetes学习指南:保姆级实操手册05——配置集群HA负载均衡简介:Keepalived提供VRRP实现,并允许您配置Linux机器使负载均衡,预防单点故障。HAProxy提供可靠、高性能的负载均衡,能与Keepalived完美配合1、配置Keepalive官方文档提供了两种运行方式(此案例使用选项1):选项1:在......
  • Kubernetes从零到精通(03-资源对象)
    资源对象的种类今天我们开始研究Kubernetes中的资源对象,资源对象是Kubernetes这个软件定义的抽象逻辑概念,这些资源对象及其对应的属性(如资源对象之间的对应关系),都会保存到ectd数据库中并通过Kubernetes各控制组件实时更新,下面我们先看一下资源对象的分类和用途,然后再根据一个......
  • kubernetes初始化集群时报错
    报错:kubernetes初始化端口占用及文件存在(本人是之前初始化过一次)[root@master~]#kubeadminit--apiserver-advertise-address=192.168.20.200--image-repository=registry.aliyuncs.com/google_containers--kubernetes-version=v1.28.0--pod-network-cidr=10.244.0.0/16--......
  • 09--kubernetes持久化存储和StatefulSet控制器
    前言:本章是k8s持久化存储的详细笔记,由持久化引申出来的statefulset控制器和无头svc都会在本章有详细记录。1、K8s持久化存储PV和PVC在前面文章已经使用卷挂载的方式将pod文件持久化保存在宿主机中,但实际工作中pod往往会以多副本形式存在,此时需要每一个宿主机上都有对应的挂载......
  • D13 kubernetes 容器资源配额
    1、资源请求与资源限制 默认情况下,容器可以无限制的使用节点上所有的资源(如内存、cpu)。 假设在一个节点上运行多个pod,其中一个pod的访问量突然增加,该pod将不断请求节点资源。最终该pod占用大量资源,导致其他的资源缺乏足够的资源可用,从而引发访问速度非常慢,甚至无法正常提供服务......
  • D12 kubernetes 中的资源对象
    1、kubernetes中的资源对象是什么,有什么作用 在Kubernetes中,资源对象是集群内的一个个实体,它们代表了集群的状态和行为。这些资源对象通过Kubernetes的API进行定义和管理,每种资源对象都有特定的作用和用途获取所有的资源kubectlapi-resourcesNAME......
  • Kubernetes存储卷
    1.存储卷基础1.1存储卷基础从概念上讲,存储卷是可供Pod中的所有容器访问的目录Pod规范中声明的存储卷来源决定了目录的创建方式、使用的存储介质以及目录的初始内容存储卷插件(存储驱动)决定了支持的后端存储介质或存储服务,例如hostPath插件使用宿主机文件系统,而nfs插件则对......