kubernetes Init Container 与静态 Pod 简介

本贴最后更新于 1623 天前,其中的信息可能已经渤澥桑田

一、Pod 概念了解

  • 最小部署单元
  • 一组容器的集合
  • 一个 Pod 中的容器共享网络命名空间
  • Pod 是短暂的

二、Pod 存在的意义

Pod 为亲密性应用而存在
亲密性应用场景;

  • 两个应用之间发生文件交互
  • 两个应用需要通过 127.0.0.1 或者 socket 通信(典型组合:nginx+php)
  • 两个应用需要发生频繁的调用

三、容器的分类

  • Infrastructure Container:基础容器:维护整个 Pod 网络空间
  • InitContainers:初始化容器:先于业务容器开始执行
  • Containers:业务容器:并行启动

四、Init Container

  • 基本支持所有普通容器特征
  • 优先普通容器执行

应用场景:

  • 控制普通容器启动(例如检测 db 是否启动来控制 web 的启动)
  • 初始化配置:
    a. 生成主应用程序配置文件
    b. 从 git 拉取代码让主业务容器使用
    c. 根据指定环境修改应用配置文件,例如连接的数据库

init 产生的初始化配置,也是需要借助 网络命名空间 或者 文件系统 让主业务容器去使用

yaml 示例:

apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: workdir
      mountPath: /usr/share/nginx/html
  initContainers:
  - name: install
    image: busybox
    command:
    - wget
    - "-O"
    - "/work-dir/index.html"
    - http://kubernetes.io
    volumeMounts:
    - name: workdir
      mountPath: "/work-dir"
  dnsPolicy: Default
  volumes:
  - name: workdir
    emptyDir: {}

可以在空卷的挂载目录下查看到 index.html 内容。

五、静态 Pod

静态 Pod 指的是固定在某个 Node 上,有 kubelet 管理生成的一种 Pod

静态 Pod 的工作目录:/etc/kubernetes/manifests/,里面默认有 etcd.yaml, kube-apiserver.yaml ,kube-controller-manager.yaml ,kube-scheduler.yaml 这几个 pod,若想在某个节点上跑静态 pod,只需要在该 node 节点上的静态 pod 工作目录下放 yaml 文件即可,若想删除该静态 pod,则需要删除静态 pod 工作目录下的 yaml 即可。静态 pod 运行的名称后面就会跟有节点名称:

image.png

若想更改工作目录,则需要去 /var/lib/kubelet/config.yaml 修改配置,将 staticPodPath 后面的路径改为其他,重启 kubelet 服务即可生效

静态 pod 特点:

  • 由特定节点上 kubelet 管理
  • 没有任何控制器
  • pod 挂了,kubelet 自动拉起
  • kubelet 定期检查 staticPodPath 状态

yaml 示例:

apiVersion: v1
kind: Pod
metadata:
  name: static-pod
spec:
  containers:
  - name: web
    image: nginx
    ports:
    - name: web
      containerPort: 80
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...