kubeadm 中的类负载或 minikube 缓存的等价物

Equivalent of kind load or minikube cache in kubeadm

我有 3 个使用 kubeadm 管理的节点 kubernetes 集群。以前我用过 kind 和 minikube。当我想基于 docker 图像进行部署时,我只需要 make:

现在,当我想在 kubeadm 中进行部署时,我显然得到了 ImagePullBackOff。 问题:是否有等效的注释将图像添加到 kubeadm 而我找不到它,或者完全有其他方法可以解决该问题?

编辑

可能问题不够清楚,所以我没有删除它,而是尝试提供更多细节。

我有树节点(一个控制平面和两个工人),每个节点上都安装了 docker、kubeadm、kubelet 和 kubectl。我未来集群的一个部署是机器学习模块,所以我需要 tensorflow:

docker pull tensorflow/tensorflow

我使用这个图像构建了自己的图像:

docker build -t mlimage:cluster -f ml.Dockerfile .

接下来我准备deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mldeployment
spec:
  selector:
    matchLabels:
      app: mldeployment
      name: mldeployment
  replicas: 1
  template:
    metadata:
      labels:
        app: mldeployment
        name: mldeployment
    spec:
      containers:
      - name: mlcontainer
        image: mlimage:cluster
        imagePullPolicy: Never
        ports:
        - name: http
          containerPort: 6060

并创建它:

kubectl create -f mldeployment.yaml

现在,当我输入时

kubectl describe pod

在 mldeployment 中有这些事件:

在 minikube 或 kind 的情况下,只需将图像添加到集群类型就足够了

minikibe cache add ...

kind load docker-image ...

分别

问题是在从 kubeadm 管理图像的情况下如何将图像从我的机器添加到集群。我认为对于 minikube 或 kind 有类似的方法(无需创建与 docker 集线器的任何连接,因为一切都在本地)。

你得到 ImagePullBackOff 因为 kubeadm 可能会检查注册表。

而如果您同时查看命令 minikube 缓存kind load 用于将本地图像加载到集群中。

据我所知,通过 kubeadm 管理的集群镜像应该存储在受信任的注册表中,例如 dockerhub 或云。但是如果你想在分离的网络中做出快速的解决方案,有一个可能性:Docker registry。 还有一些工具可以使用,例如Trow, or simpler solution。 我使用了第二种方法,并且有效(代码有点旧,因此可能需要一些更改,此链接可能会有所帮助:,

修改后,首先创建deployment和daemonSet:

kubectl create -f docker-private-registry.json
kubectl create -f docker-private-registry-proxy.json

将本地主机地址添加到图像:

docker tag image:tag 127.0.0.1:5000/image:tag

检查 docker 私有注册表部署的全名和转发端口(将 x 替换为准确的部署名称:

kubectl get pod
kubectl port-forward docker-private-registry-deployment-xxxxxxxxx-xxxxx 5000:5000 -n default

打开下一个终端 window 并将图像推送到私有注册表:

docker push 127.0.0.1:5000/image:tag

最终更改 deployment.yaml 文件容器映像(添加 127.0.0.1:5000/...)并创建部署。

此解决方案非常不安全且易受攻击,因此请明智地在单独的网络中使用它以进行测试和开发。