kubernetes之初始化容器

参考:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

初始化容器是什么?

在kubernetes中,一个pod可以包含多个容器,其中的init container,顾名思义主要负责初始化工作,一个pod也可以包含多个init container。后文统一用"初始化容器"表示"init container"。初始化容器也是容器,在pod的定义中,如果将"containers"改成"initContainers",那么这个数组内定义的所有容器就都是初始化容器,定义初始化容器与普通应用容器的语法相同。但是,初始化容器不支持readiness类型探针,这个很容易理解,初始化容器主要负责初始化工作,在它没有运行完成之前pod一定处于未就绪状态(unready),所以readiness类型探针一定会诊断失败,没有意义。另外初始化容器在资源请求与限制方面与普通的应用容器有细微差别,后文详细描述。

初始化容器先于普通应用容器执行,如果pod有多个初始化容器,那么它们按定义的顺序逐个执行,并且前一个必需执行成功后一个才可以执行,所有的初始化容器执行成功后,普通应用容器才可以执行。当初始化容器执行失败时,如果restart policy是OnFailure或者Always,那么会重复执行失败的初始化容器一直到成功,如果restart policy是Never,则不会重启失败的初始化容器。如果初始化容器执行成功,那么无论restart policy是什么,即使是Always,也不会再次被重启。

初始化容器的状态可以通过pod的.status.initContainerStatuses字段查看,它的值是一个数组,分别表示每个初始化容器的状态。数组中每个成员的结果与表示普通应用容器状态的结构一样,字段含义相同。

初始化容器有什么用?

在开发一个程序时,通常初化代码与主体业务代码放置在同一个程序中。为什么kubernetes提供初始化容器这种功能,将初始化工作从普通容器中隔离出来?这种特性有什么用呢?初始化容器与普通容器有各自独立的image,本质上是将初始化逻辑与主体业务逻辑分离并放置在不同的image中,以下是初始化容器的主要用处:

  • 初始化容器可以包含不能随普通容器一起发布出去的敏感信息。
  • 初始化容器可以包含用户自定义的代码、工具,如sed、awk、python等方便完成初始化、设置工作。
  • 因为初始化逻辑与主体业务逻辑分布在不同的image中,因此image构建者与主体业务逻辑开发者可以各自独立的工作。
  • 初始化容器使用Linux namesp
### 初始化Kubernetes主节点 为了成功初始化Kubernetes主节点,在CentOS 7环境中需遵循一系列特定操作[^1]。 #### 准备工作 确保操作系统已更新至最新状态并安装必要的依赖项。对于Docker版本的选择至关重要,过新的Docker版本可能会引发兼容性问题从而阻止集群正常初始化[^2]。 #### 安装kubeadm、kubelet和kubectl 通过官方文档指导完成这三个组件的安装。这些工具分别用于设置集群、管理节点以及与API服务器交互。 ```bash sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes ``` #### 配置网络策略插件 在执行`kubeadm init`命令之前,应先部署合适的容器网络接口(CNI),比如Calico或Flannel等。这一步骤决定了Pod间的通信方式。 #### 执行kubeadm init 当一切准备就绪后,可以运行如下命令来启动主节点初始化过程: ```bash sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 上述命令中的CIDR参数取决于所选CNI的要求;这以Flannel为例设置了默认值。如果遇到连接被拒绝(`connection refused`)的情况,则可能是由于端口未开放或是防火墙规则阻碍了访问[^3]。 #### 加入其他节点到集群 一旦主节点建立完毕,可利用输出的日志信息中给出的指令让worker节点加入进来。通常形式如下所示: ```bash kubect join <master-ip>:<master-port> --token <token-value> ``` 需要注意的是,某些情况下即使显示“node 'k8s-master' not found”,也不必过分担心,因为这只是暂时现象,并不影响后续步骤继续进行。 #### 启动控制平面服务监听外部请求 最后要确认所有必需的服务都在正确地监听相应的TCP端口(如表一所列)[^4],特别是API Server使用的6443/tcp端口是否畅通无阻。 | 组件 | 端口号(TCP) | | --- | --- | | API Server | 6443/tcp | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值