【问题标题】:Kubernetes - Can you build a cluster with master node on x86 and worker node on arm?Kubernetes - 你可以在 x86 上构建一个主节点和在 arm 上的工作节点的集群吗?
【发布时间】:2018-08-23 17:04:17
【问题描述】:

我有一个 Intel NUC (I5) 和 Raspberry-Pi Model-B。我试图通过将 Intel-NUC 作为主节点和 Raspberry-Pi 作为工作节点来创建一个 kubernetes 集群。当我尝试上述设置时,我看到工作节点一直在崩溃。这是输出。这只发生在上述设置中。如果我尝试使用两个 Raspberry-Pi(一个主节点和一个工作节点)创建一个集群,它可以正常工作。

我做错了什么?

sudo kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY     STATUS             RESTARTS   AGE
kube-system   etcd-ubuntu                           1/1       Running            0          13h
kube-system   kube-apiserver-ubuntu                 1/1       Running            0          13h
kube-system   kube-controller-manager-ubuntu        1/1       Running            0          13h
kube-system   kube-dns-6f4fd4bdf-fqmmt                3/3       Running            0          13h
kube-system   kube-proxy-46ddk                        0/1       CrashLoopBackOff   5          3m
kube-system   kube-proxy-j48fc                        1/1       Running            0          13h
kube-system   kube-scheduler-ubuntu                 1/1       Running            0          13h
kube-system   kubernetes-dashboard-5bd6f767c7-nh6hz   1/1       Running            0          13h
kube-system   weave-net-2bnzq                         2/2       Running            0          13h
kube-system   weave-net-7hr54                         1/2       CrashLoopBackOff   3          3m

我检查了 kube-proxy 的日志,发现以下条目 Logs from kube-proxy standard_init_linux.go:178: exec user process caused "exec format error" 这似乎源于图像拾取的问题是手臂拱形而不是 x86 拱形。这是yaml文件

{
  "kind": "Pod",
  "apiVersion": "v1",
  "metadata": {
    "name": "kube-proxy-5xc9c",
    "generateName": "kube-proxy-",
    "namespace": "kube-system",
    "selfLink": "/api/v1/namespaces/kube-system/pods/kube-proxy-5xc9c",
    "uid": "a227b43b-27ef-11e8-8cf2-b827eb03776e",
    "resourceVersion": "22798",
    "creationTimestamp": "2018-03-15T01:24:40Z",
    "labels": {
      "controller-revision-hash": "3203044440",
      "k8s-app": "kube-proxy",
      "pod-template-generation": "1"
    },
    "ownerReferences": [
      {
        "apiVersion": "extensions/v1beta1",
        "kind": "DaemonSet",
        "name": "kube-proxy",
        "uid": "361aca09-27c9-11e8-a102-b827eb03776e",
        "controller": true,
        "blockOwnerDeletion": true
      }
    ]
  },
  "spec": {
    "volumes": [
      {
        "name": "kube-proxy",
        "configMap": {
          "name": "kube-proxy",
          "defaultMode": 420
        }
      },
      {
        "name": "xtables-lock",
        "hostPath": {
          "path": "/run/xtables.lock",
          "type": "FileOrCreate"
        }
      },
      {
        "name": "lib-modules",
        "hostPath": {
          "path": "/lib/modules",
          "type": ""
        }
      },
      {
        "name": "kube-proxy-token-kzt5h",
        "secret": {
          "secretName": "kube-proxy-token-kzt5h",
          "defaultMode": 420
        }
      }
    ],
    "containers": [
      {
        "name": "kube-proxy",
        "image": "gcr.io/google_containers/kube-proxy-arm:v1.9.4",
        "command": [
          "/usr/local/bin/kube-proxy",
          "--config=/var/lib/kube-proxy/config.conf"
        ],
        "resources": {},
        "volumeMounts": [
          {
            "name": "kube-proxy",
            "mountPath": "/var/lib/kube-proxy"
          },
          {
            "name": "xtables-lock",
            "mountPath": "/run/xtables.lock"
          },
          {
            "name": "lib-modules",
            "readOnly": true,
            "mountPath": "/lib/modules"
          },
          {
            "name": "kube-proxy-token-kzt5h",
            "readOnly": true,
            "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount"
          }
        ],
        "terminationMessagePath": "/dev/termination-log",
        "terminationMessagePolicy": "File",
        "imagePullPolicy": "IfNotPresent",
        "securityContext": {
          "privileged": true
        }
      }
    ],
    "restartPolicy": "Always",
    "terminationGracePeriodSeconds": 30,
    "dnsPolicy": "ClusterFirst",
    "serviceAccountName": "kube-proxy",
    "serviceAccount": "kube-proxy",
    "nodeName": "udubuntu",
    "hostNetwork": true,
    "securityContext": {},
    "schedulerName": "default-scheduler",
    "tolerations": [
      {
        "key": "node-role.kubernetes.io/master",
        "effect": "NoSchedule"
      },
      {
        "key": "node.cloudprovider.kubernetes.io/uninitialized",
        "value": "true",
        "effect": "NoSchedule"
      },
      {
        "key": "node.kubernetes.io/not-ready",
        "operator": "Exists",
        "effect": "NoExecute"
      },
      {
        "key": "node.kubernetes.io/unreachable",
        "operator": "Exists",
        "effect": "NoExecute"
      },
      {
        "key": "node.kubernetes.io/disk-pressure",
        "operator": "Exists",
        "effect": "NoSchedule"
      },
      {
        "key": "node.kubernetes.io/memory-pressure",
        "operator": "Exists",
        "effect": "NoSchedule"
      }
    ]
  },
  "status": {
    "phase": "Running",
    "conditions": [
      {
        "type": "Initialized",
        "status": "True",
        "lastProbeTime": null,
        "lastTransitionTime": "2018-03-15T01:24:45Z"
      },
      {
        "type": "Ready",
        "status": "False",
        "lastProbeTime": null,
        "lastTransitionTime": "2018-03-15T01:35:41Z",
        "reason": "ContainersNotReady",
        "message": "containers with unready status: [kube-proxy]"
      },
      {
        "type": "PodScheduled",
        "status": "True",
        "lastProbeTime": null,
        "lastTransitionTime": "2018-03-15T01:24:46Z"
      }
    ],
    "hostIP": "192.168.178.24",
    "podIP": "192.168.178.24",
    "startTime": "2018-03-15T01:24:45Z",
    "containerStatuses": [
      {
        "name": "kube-proxy",
        "state": {
          "waiting": {
            "reason": "CrashLoopBackOff",
            "message": "Back-off 5m0s restarting failed container=kube-proxy pod=kube-proxy-5xc9c_kube-system(a227b43b-27ef-11e8-8cf2-b827eb03776e)"
          }
        },
        "lastState": {
          "terminated": {
            "exitCode": 1,
            "reason": "Error",
            "startedAt": "2018-03-15T01:40:51Z",
            "finishedAt": "2018-03-15T01:40:51Z",
            "containerID": "docker://866dd8e7175bd71557b9dcfc84716a0f3abd634d5d78c94441f971b8bf24cd0d"
          }
        },
        "ready": false,
        "restartCount": 8,
        "image": "gcr.io/google_containers/kube-proxy-arm:v1.9.4",
        "imageID": "docker-pullable://gcr.io/google_containers/kube-proxy-arm@sha256:c6fa0de67fb6dbbb0009b2e6562860d1f6da96574d23617726e862f35f9344e7",
        "containerID": "docker://866dd8e7175bd71557b9dcfc84716a0f3abd634d5d78c94441f971b8bf24cd0d"
      }
    ],
    "qosClass": "BestEffort"
  }
}

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    是的,这是可能的,我刚刚为我的一位客户做到了。

    基本上存在一个问题,即自动部署在主服务器上的 KubeProxy DaemonSet 被编译为 x64 - 因为您希望主服务器是 x64 而节点是 ARM。

    当您将 ARM 节点添加到集群时,DaemonSet 尝试在它们上部署 x64 映像,但失败了。

    您需要在安装后编辑默认 DaemonSet 以仅选择 x64 节点,并为 ARM 节点部署另一个 DaemonSet。 本要点将引导您完成: Multiplatform (amd64 and arm) Kubernetes cluster setup

    希望这会有所帮助, 奥菲尔。

    【讨论】:

      【解决方案2】:

      这样做是完全可能的,但您需要确保在适当的机器上为给定的 cpu 架构启动 pod。使用节点选择器或节点。否则,您将得到您所经历的 - amd64 二进制文件无法在 arm 上运行,反之亦然。

      提示:使用beta.kubernetes.io/arch 标签来区分 cpu 架构。

      【讨论】:

      • 对不起,我是初学者,我仍在努力解决这个问题。如何使用节点选择器。我可以请您举例说明吗?非常感谢
      猜你喜欢
      • 2021-06-22
      • 2013-04-24
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多