从k3 s-master在k3 s-agent上运行docker container

bvpmtnay  于 2023-10-16  发布在  Docker
关注(0)|答案(3)|浏览(141)

我在ubuntu 20上做了一个k3s-master,在另一个ubuntu 20上做了一个k3s-agent。我有两个系统连接到同一个网络。我在k3 s-agent上有docker镜像,我可以在k3 s-agent上运行容器。我创建了一个集群,k3 s-agent和k3 s-master都连接到集群。我在master上使用kubectl get nodes命令进行了检查,可以看到代理和master都已列出。
我在以下几点上需要帮助。我想从k3 s-master在k3 s-agent上运行docker image。有没有办法从master在agent上运行docker image?
我知道我可以做豆荚,用豆荚我可以做到这一点。但分离舱不管用

1szpjjfi

1szpjjfi1#

如果我没有误解的话,你可以简单地用kubectl命令传递你的docker镜像,比如:kubectl run my-pod --image=your-image ...
如果您希望在代理端运行pod,那么您可以使用tainttoleration功能来匹配pod和节点。

vngu2lb8

vngu2lb82#

我们可以做两件事。

  1. nodeName
    只需在yaml文件中提到nodeName: mynode1
  2. taints and toleration
    我们可以在pod的yaml文件中设置Taints and Toleration。示例如下。
    将Taints设置为这样的节点
kubectl taint nodes mynode1 app=Device:NoSchedule

我们可以容忍在yaml文件如下。

apiVersion: v1
kind: Pod
metadata:
  name: scriptpod
spec:
  containers:
    - name: scriptdo
      image: scriptdo
      imagePullPolicy: Always
nodeName: mynode1
restartPolicy: Always
tolerations:
- key: "app"
  operator: "Equal"
  value: "Device"
  effect: "NoSchedule"

Document for taints and toleration
注:-我设置了nodeNametaints and toleration,导致nodeName在罕见情况下不工作。

4dc9hkyq

4dc9hkyq3#

在代理节点上运行Docker镜像的一个选择是,您可以在该节点上本地构建镜像。构建完成后,您可以设置imagePullPolicy: Never,使其尝试从代理的本地Docker注册表中获取它。

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: <label key>
                operator: In
                values:
                  - <agent label> 
  containers:
    - name: <container name>
      image: <image name>
      imagePullPolicy: Never

相关问题