K8s 如何通过harbor 拉取镜像?
K8S 在那些情况下需要进行镜像的拉取?
- 在需要进行新的pod的调度时,基于镜像拉取策略,完成镜像的获取:
- Always: 在任何情况下都需要重新拉取镜像
- 即使设置为总是进行镜像拉取,也不代表每一次都需要重新进行镜像的完成拉取
- 容器镜像的层次结构决定了镜像的每一层都有一个唯一不重复的ID
- 每一次进行镜像拉取的操作时,都需要对比本地和仓库中镜像层的ID,只有在ID 不一致的情况下,才会重新拉取不一致的层
- 主要的使用场景,pod的镜像默认使用最新版镜像,即tag为latest,而tag为latest的镜像会不断更新,在最新版镜像更新的时候,重新拉取镜像。
- IfNotPresent: 在需要调度pod的节点上不存在镜像的情况下,才会进行镜像的拉取
- Always: 在任何情况下都需要重新拉取镜像
- 过程如下:
- 客户端发出后指令要求调度一个pod,并制定了pod的镜像
- K8S的APIserver将pod调度的指令转发给对应的控制器
- 控制器创建pod运行需要的基本配置
- 调度器决定新创建的pod应该在那个工作节点上运行
- 对应工作节点上的kubelet 来完成pod的最终的创建,这里就包括拉取镜像、启动容器等
- Kubelet 对应的容器运行时(OCI) 使用的是 containerd 服务,
- 如果k8s 需要从harbor中拉取镜像重点是,配置各个工作节点使用harbor。
配置过程如下:
- 需要在工作节点上,基于工作节点使用的OCI ,配置OCI 使用harbor的tsl证书
- 如果需要拉取私有仓库的镜像,那么还需要提前设置好,登录仓库使用的用户名密码的信息
在k8s的工作节点:
[root@node1 ~]# vim +162 /etc/containerd/config.toml