<p>kubeadm init 卡在“第一个节点已注册,但尚未准备好”</p>

创建于 2017-03-29  ·  52评论  ·  资料来源: kubernetes/kubeadm

在提交这个问题之前,您在 Kubernetes 问题中搜索了哪些关键字? (如果您发现任何重复项,您应该在那里回复。):kubeadm

这是错误报告还是功能请求? (选择一项):错误报告

Kubernetes 版本(使用kubectl version ):1.6.0

环境:

  • 云提供商或硬件配置:Raspberry Pi 3 Model B
  • 操作系统(例如来自 /etc/os-release):Hypriot 1.4.0(Docker 手动降级到 1.12.6,Hypriot 1.4.0 附带 Docker 17.03.0-ce)
  • 内核(例如uname -a ):4.4.50-hypriotos-v7+
  • 安装工具:kubeadm
  • 其他

发生了什么

完全遵循kubeadm 入门指南

# kubeadm init --apiserver-cert-extra-sans redacted --pod-network-cidr 10.244.0.0/16
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.6.0
[init] Using Authorization mode: RBAC
[preflight] Running pre-flight checks
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [kube-01 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local redacted] and IPs [10.96.0.1 10.0.1.101]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 206.956919 seconds
[apiclient] Waiting for at least one node to register and become ready
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet

最后一条消息“第一个节点已注册,但尚未准备好”无限重复,kubeadm 永远不会结束。 我在另一个会话中连接到主服务器,以查看所有 Docker 容器是否按预期运行,它们是:

$ docker ps
CONTAINER ID        IMAGE                                                                                                                          COMMAND                  CREATED             STATUS              PORTS               NAMES
54733aa1aae3        gcr.io/google_containers/kube-controller-manager-arm<strong i="6">@sha256</strong>:22f30303212b276b6868b89c8e92c5fb2cb93641e59c312b254c6cb0fa111b2a   "kube-controller-mana"   10 minutes ago      Up 10 minutes                           k8s_kube-controller-manager_kube-controller-manager-kube-01_kube-system_d44abf63e3ab24853ab86643e0b96d81_0
55b6bf2cc09e        gcr.io/google_containers/etcd-arm<strong i="7">@sha256</strong>:0ce1dcd85968a3242995dfc168abba2c3bc03d0e3955f52a0b1e79f90039dcf2                      "etcd --listen-client"   11 minutes ago      Up 11 minutes                           k8s_etcd_etcd-kube-01_kube-system_90ab26991bf9ad676a430c7592d08bee_0
bd0dc34d5e77        gcr.io/google_containers/kube-apiserver-arm<strong i="8">@sha256</strong>:c54b8c609a6633b5397173c763aba0656c6cb2601926cce5a5b4870d58ba67bd            "kube-apiserver --ins"   12 minutes ago      Up 12 minutes                           k8s_kube-apiserver_kube-apiserver-kube-01_kube-system_4d99c225ec157dc715c26b59313aeac8_1
1c4c7b69a3eb        gcr.io/google_containers/kube-scheduler-arm<strong i="9">@sha256</strong>:827449ef1f3d8c0a54d842af9d6528217ccd2d36cc2b49815d746d41c7302050            "kube-scheduler --kub"   13 minutes ago      Up 13 minutes                           k8s_kube-scheduler_kube-scheduler-kube-01_kube-system_3ef1979df7569495bb727d12ac1a7a6f_0
4fd0635f9439        gcr.io/google_containers/pause-arm:3.0                                                                                         "/pause"                 14 minutes ago      Up 14 minutes                           k8s_POD_kube-controller-manager-kube-01_kube-system_d44abf63e3ab24853ab86643e0b96d81_0
cfb4a758ad96        gcr.io/google_containers/pause-arm:3.0                                                                                         "/pause"                 14 minutes ago      Up 14 minutes                           k8s_POD_etcd-kube-01_kube-system_90ab26991bf9ad676a430c7592d08bee_0
a631d8b6c11c        gcr.io/google_containers/pause-arm:3.0                                                                                         "/pause"                 14 minutes ago      Up 14 minutes                           k8s_POD_kube-scheduler-kube-01_kube-system_3ef1979df7569495bb727d12ac1a7a6f_0
309b62fff122        gcr.io/google_containers/pause-arm:3.0                                                                                         "/pause"                 14 minutes ago      Up 14 minutes                           k8s_POD_kube-apiserver-kube-01_kube-system_4d99c225ec157dc715c26b59313aeac8_0

我将 admin kubeconfig 复制到我的本地机器并使用 kubectl (1.6.0) 查看 kubeadm 声称已注册的节点发生了什么:

$ kubectl describe node kube-01
Name:           kube-01
Role:
Labels:         beta.kubernetes.io/arch=arm
            beta.kubernetes.io/os=linux
            kubernetes.io/hostname=kube-01
Annotations:        node.alpha.kubernetes.io/ttl=0
            volumes.kubernetes.io/controller-managed-attach-detach=true
Taints:         <none>
CreationTimestamp:  Tue, 28 Mar 2017 22:06:40 -0700
Phase:
Conditions:
  Type          Status  LastHeartbeatTime           LastTransitionTime          Reason              Message
  ----          ------  -----------------           ------------------          ------              -------
  OutOfDisk         False   Tue, 28 Mar 2017 22:17:24 -0700     Tue, 28 Mar 2017 22:06:40 -0700     KubeletHasSufficientDisk    kubelet has sufficient disk space available
  MemoryPressure    False   Tue, 28 Mar 2017 22:17:24 -0700     Tue, 28 Mar 2017 22:06:40 -0700     KubeletHasSufficientMemory  kubelet has sufficient memory available
  DiskPressure      False   Tue, 28 Mar 2017 22:17:24 -0700     Tue, 28 Mar 2017 22:06:40 -0700     KubeletHasNoDiskPressure    kubelet has no disk pressure
  Ready         False   Tue, 28 Mar 2017 22:17:24 -0700     Tue, 28 Mar 2017 22:06:40 -0700     KubeletNotReady         runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Addresses:      10.0.1.101,10.0.1.101,kube-01
Capacity:
 cpu:       4
 memory:    882632Ki
 pods:      110
Allocatable:
 cpu:       4
 memory:    780232Ki
 pods:      110
System Info:
 Machine ID:            9989a26f06984d6dbadc01770f018e3b
 System UUID:           9989a26f06984d6dbadc01770f018e3b
 Boot ID:           7a77e2e8-dd62-4989-b9e7-0fb52747162a
 Kernel Version:        4.4.50-hypriotos-v7+
 OS Image:          Raspbian GNU/Linux 8 (jessie)
 Operating System:      linux
 Architecture:          arm
 Container Runtime Version: docker://1.12.6
 Kubelet Version:       v1.6.0
 Kube-Proxy Version:        v1.6.0
PodCIDR:            10.244.0.0/24
ExternalID:         kube-01
Non-terminated Pods:        (4 in total)
  Namespace         Name                        CPU Requests    CPU Limits  Memory Requests Memory Limits
  ---------         ----                        ------------    ----------  --------------- -------------
  kube-system           etcd-kube-01                0 (0%)      0 (0%)      0 (0%)      0 (0%)
  kube-system           kube-apiserver-kube-01          250m (6%)   0 (0%)      0 (0%)      0 (0%)
  kube-system           kube-controller-manager-kube-01     200m (5%)   0 (0%)      0 (0%)      0 (0%)
  kube-system           kube-scheduler-kube-01          100m (2%)   0 (0%)      0 (0%)      0 (0%)
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  CPU Requests  CPU Limits  Memory Requests Memory Limits
  ------------  ----------  --------------- -------------
  550m (13%)    0 (0%)      0 (0%)      0 (0%)
Events:
  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason          Message
  --------- --------    -----   ----            -------------   --------    ------          -------
  14m       14m     1   kubelet, kube-01            Normal      Starting        Starting kubelet.
  14m       10m     55  kubelet, kube-01            Normal      NodeHasSufficientDisk   Node kube-01 status is now: NodeHasSufficientDisk
  14m       10m     55  kubelet, kube-01            Normal      NodeHasSufficientMemory Node kube-01 status is now: NodeHasSufficientMemory
  14m       10m     55  kubelet, kube-01            Normal      NodeHasNoDiskPressure   Node kube-01 status is now: NodeHasNoDiskPressure

这揭示了 kubelet 未准备就绪的原因:

“运行时网络未准备好:NetworkReady=false原因:NetworkPluginNotReady消息:docker :网络插件未准备好:cni 配置”

在我使用 kubeadm 1.5 的实验中,不需要 CNI 来启动主节点,所以这很令人惊讶。 甚至入门指南也建议kubeadm init应该在您继续部署 CNI 插件之前成功完成。

无论如何,我在本地机器上使用 kubectl 部署了 flannel:

$ kubectl apply -f kube-flannel.yml

文件内容在哪里:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: flannel
  namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
  labels:
    tier: node
    app: flannel
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "type": "flannel",
      "delegate": {
        "isDefaultGateway": true
      }
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
  namespace: kube-system
  labels:
    tier: node
    app: flannel
spec:
  template:
    metadata:
      labels:
        tier: node
        app: flannel
    spec:
      hostNetwork: true
      nodeSelector:
        beta.kubernetes.io/arch: amd64
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      serviceAccountName: flannel
      containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.7.0-amd64
        command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr" ]
        securityContext:
          privileged: true
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        volumeMounts:
        - name: run
          mountPath: /run
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      - name: install-cni
        image: quay.io/coreos/flannel:v0.7.0-amd64
        command: [ "/bin/sh", "-c", "set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done" ]
        volumeMounts:
        - name: cni
          mountPath: /etc/cni/net.d
        - name: flannel-cfg
          mountPath: /etc/kube-flannel/
      volumes:
        - name: run
          hostPath:
            path: /run
        - name: cni
          hostPath:
            path: /etc/cni/net.d
        - name: flannel-cfg
          configMap:
            name: kube-flannel-cfg

但它从未安排:

$ kubectl describe ds kube-flannel-ds -n kube-system
Name:       kube-flannel-ds
Selector:   app=flannel,tier=node
Node-Selector:  beta.kubernetes.io/arch=amd64
Labels:     app=flannel
        tier=node
Annotations:    kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"extensions/v1beta1","kind":"DaemonSet","metadata":{"annotations":{},"labels":{"app":"flannel","tier":"node"},"name":"kube-flannel-ds","n...
Desired Number of Nodes Scheduled: 0
Current Number of Nodes Scheduled: 0
Number of Nodes Scheduled with Up-to-date Pods: 0
Number of Nodes Scheduled with Available Pods: 0
Number of Nodes Misscheduled: 0
Pods Status:    0 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:       app=flannel
            tier=node
  Service Account:  flannel
  Containers:
   kube-flannel:
    Image:  quay.io/coreos/flannel:v0.7.0-amd64
    Port:
    Command:
      /opt/bin/flanneld
      --ip-masq
      --kube-subnet-mgr
    Environment:
      POD_NAME:      (v1:metadata.name)
      POD_NAMESPACE:     (v1:metadata.namespace)
    Mounts:
      /etc/kube-flannel/ from flannel-cfg (rw)
      /run from run (rw)
   install-cni:
    Image:  quay.io/coreos/flannel:v0.7.0-amd64
    Port:
    Command:
      /bin/sh
      -c
      set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done
    Environment:    <none>
    Mounts:
      /etc/cni/net.d from cni (rw)
      /etc/kube-flannel/ from flannel-cfg (rw)
  Volumes:
   run:
    Type:   HostPath (bare host directory volume)
    Path:   /run
   cni:
    Type:   HostPath (bare host directory volume)
    Path:   /etc/cni/net.d
   flannel-cfg:
    Type:   ConfigMap (a volume populated by a ConfigMap)
    Name:   kube-flannel-cfg
    Optional:   false
Events:     <none>

无论如何,我试图加入其他服务器之一,只是为了看看会发生什么。 我使用kubeadm token create手动创建了一个可以从另一台机器使用的令牌。 在另一台机器上:

kubeadm join --token $TOKEN 10.0.1.101:6443
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Running pre-flight checks
[discovery] Trying to connect to API Server "10.0.1.101:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://10.0.1.101:6443"
[discovery] Failed to request cluster info, will try again: [User "system:anonymous" cannot get configmaps in the namespace "kube-public". (get configmaps cluster-info)]
[discovery] Failed to request cluster info, will try again: [User "system:anonymous" cannot get configmaps in the namespace "kube-public". (get configmaps cluster-info)]
[discovery] Failed to request cluster info, will try again: [User "system:anonymous" cannot get configmaps in the namespace "kube-public". (get configmaps cluster-info)]

最后的信息永远重复了。

你期望发生的事情

kubeadm init应该完成并生成引导令牌。

最有用的评论

您需要添加 rbac 角色来授权 flannel 从 API 中读取。

如果其他人想知道这意味着什么,看起来您需要在创建 flannel 之前创建kube-flannel-rbac.yml

kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

所有52条评论

在 Ubuntu 16.04.02,GCE 和本地 VMWare 安装,Docker 版本 1.12.6,内核 4.8.0-44-generic 47~16.04.1-Ubuntu SMP 上发生了完全相同的事情。

在我们在 jimmycuadra 的报告中看到的错误之前,kubelet 日志显示了关于缺少 /etc/cni/net.d 的警告:

Mar 29 04:43:25 instance-1 kubelet[6800]: W0329 04:43:25.763117    6800 cni.go:157] Unable to update cni config: No networks found in /etc/cni/net.d
Mar 29 04:43:25 instance-1 kubelet[6800]: E0329 04:43:25.763515    6800 kubelet.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

Ubuntu AWS VM 上的相同问题。 码头工人 1.12.5

root@ip-10-43-0-20 :~# kubeadm 版本
kubeadm 版本:version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"202287-103 30Z", GoVersion:"go1.7.5"

root@ip-10-43-0-20 :~# uname -a
Linux ip-10-43-0-20 4.4.0-45-generic #66-Ubuntu SMP Wed Oct 19 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

root@ip-10-43-0-20 :~# kubeadm init --config cfg.yaml
[kubeadm] 警告:kubeadm 处于测试阶段,请不要将其用于生产集群。
[init] 使用 Kubernetes 版本:v1.6.0
[init] 使用授权模式:RBAC
[init] 警告:要使 cloudprovider 集成工作,必须为集群中的所有 kubelet 设置 --cloud-provider。
(为此应编辑/etc/systemd/system/kubelet.service.d/10-kubeadm.conf)
[预检] 运行预检
[预检] 启动 kubelet 服务
[证书] 生成的 CA 证书和密钥。
[证书] 生成的 API 服务器证书和密钥。
[证书] API 服务器服务证书已为 DNS 名称 [ip-10-43-0-20 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] 和 IPs [10.96.0.1 10.43.0.20] 签名]
[证书] 生成的 API 服务器 kubelet 客户端证书和密钥。
[证书] 生成的服务帐户令牌签名密钥和公钥。
[证书] 生成的前端代理 CA 证书和密钥。
[证书] 生成的前端代理客户端证书和密钥。
[证书] 有效的证书和密钥现在存在于“/etc/kubernetes/pki”中
[kubeconfig] 将 KubeConfig 文件写入磁盘:“/etc/kubernetes/admin.conf”
[kubeconfig] 将 KubeConfig 文件写入磁盘:“/etc/kubernetes/kubelet.conf”
[kubeconfig] 将 KubeConfig 文件写入磁盘:“/etc/kubernetes/controller-manager.conf”
[kubeconfig] 将 KubeConfig 文件写入磁盘:“/etc/kubernetes/scheduler.conf”
[apiclient] 创建API客户端,等待控制平面就绪
[apiclient] 所有控制平面组件在 16.531681 秒后健康
[apiclient] 等待至少一个节点注册并准备就绪
[apiclient] 第一个节点已注册,但尚未准备好
[apiclient] 第一个节点已注册,但尚未准备好
[apiclient] 第一个节点已注册,但尚未准备好

++ 同样的问题(Ubuntu 16.04.1)

在 Ubuntu 16.04 上也有同样的事情

在 CentOS 7 上,我将 kubelet 降级为1.5.4 。 那为我解决了。 看起来就绪检查在1.6.0 kubelet 中的工作方式不同。

自升级到 k8s 1.6.0 以来,裸机 x64 机器上 CentOS 7 上的相同问题

Ubuntu 16.04 上的相同问题

同样的问题在 Ubuntu 16.04 上,手动降级kubelet包解决了这个问题。

# apt install kubelet=1.5.6-00

@ctrlaltdel它对我不起作用。

我怀疑这是 Kubelet 问题。 当 CNI 未配置时,它不应将节点标记为未就绪。 只有需要 CNI 的 Pod 才应标记为未就绪。

@jbeda你知道这个问题什么时候能解决吗?

@kristiandrucker——不——仍在弄清楚发生了什么。 需要先找到根本原因。

@jbeda好的,但是在问题解决之后,然后呢? 从源代码重建 kubelet?

@kristiandrucker如果是 kubelet 问题,则必须在 k8s 的单点发布中解决此问题。

我怀疑https://github.com/kubernetes/kubernetes/pull/43474是根本原因。 将提交错误并跟进网络人员。

@dcbw你在吗?

看起来问题在于 DaemonSet 没有被调度到具有 Net workReady:false条件的节点,因为调度 pod 的检查不够细粒度。 我们需要解决这个问题; 豆荚是豪stNetwork:真正应安排是网络节点上workReady:假的,但豪stNetwork:假荚不应该。

作为一种解决方法,在您的 DaemonSet 上添加scheduler.alpha.kubernetes.io/critical-pod注释是否会使事情再次运行?

@janetkuo @lukaszo你能对 DS 行为进行分类吗?

顺便说一句,#sig-network 中也有关于 slack 的正在进行的讨论。

同样的问题 CentOS 7 x64

@prapdm这似乎对您正在运行的发行版不设防。

CentOS Linux 版本 7.3.1611(核心)

我已经在 Ubuntu 16.04 的一个节点上试过了。 它与“尚未准备好”消息一起挂起。 我还手动创建了 flannel DaemonSet,但在我的情况下,它安排了一个 pod,没有任何问题。 守护进程 pod 本身进入 CrashLoopBackOff 并出现错误: E0329 22:57:03.065651 1 main.go:127] Failed to create SubnetManager: error retrieving pod spec for 'kube-system/kube-flannel-ds-z3xgn': the server does not allow access to the requested resource (get pods kube-flannel-ds-z3xgn)

我也会在 Centos 上尝试,但我不认为 DaemonSet 是这里的罪魁祸首,kubeadm 挂在这里。

这是 rbac 权限错误。

@jimmycuadra我刚刚注意到您在具有 arm 处理器的

对于法兰绒守护进程集,您有:

``` 节点选择器:
beta.kubernetes.io/arch: amd64

but your node is labeled with: 

beta.kubernetes.io/arch=arm
``

所以 DaemonSet 不能在这个节点上午餐 pod,只需更改节点选择器就可以了。
您仍然会在 rbac 许可下收到错误,但也许@mikedanese会告诉您如何修复它,因为我不知道。

啊,谢谢@lukaszo! 这次我没有遵循特定于 RPi 的指南(我用于 k8s 1.5)并忘记了这一步。 当守护程序集出错时我会发现它,但事实证明我没有走那么远。 :}

当我按照此处所述的说明操作时,我也看到了这个问题:
https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/

安装正确的法兰绒网络 pod 后设法让它工作。

我认为@jimmycuadra可能会与@lukaszo评论一起使用。

当消息[apiclient] First node has registered, but is not ready yet开始泛滥时,kubernetes API 服务器将运行,因此您可以:

curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | kubectl create -f -

对于树莓派安装:

curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | sed "s/amd64/arm/g" | kubectl create -f -

然后它将完成:

[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node has registered, but is not ready yet
[apiclient] First node is ready after 245.050597 seconds
[apiclient] Test deployment succeeded
[token] Using token: 4dc99e............
[apiconfig] Created RBAC rules
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

  sudo cp /etc/kubernetes/admin.conf $HOME/
  sudo chown $(id -u):$(id -g) $HOME/admin.conf
  export KUBECONFIG=$HOME/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join --token 4dc99e........... 192.168.1.200:6443

我有同样的问题,我是这样解决的:
你应该是root

在 kubeadm 1.6.0 中,您应该删除系统文件中的环境变量 $KUBELET_NETWORK_ARGS:/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

然后重新启动恶魔

systemctl daemon-reload

kubeadm init

这需要一点时间......成功后

下载您要使用的网络插件: http :

calico 似乎是最好的,不确定但仍在测试中。

@thelastworm
我只是尝试这样做,但没有奏效。
Ubuntu 16.04.2 LTS,kubeadm 1.6.0
我做了以下步骤:

  1. 编辑 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 并删除 $KUBELET_NETWORK_ARGS
  2. kubeadm reset清除先前尝试启动它
  3. kubeadm init --token=<VALUE> --apiserver-advertise-address=<IP>

[编辑]
@srinat999指出有必要在systemctl daemon-reload之前运行kubeadm init

@jcorral的解决方案对我kubeadm不再创建不安全的 API 端口。

curl -sSL https://rawgit.com/coreos/flannel/master/Documentation/kube-flannel.yml | \
kubectl --kubeconfig /etc/kubernetes/admin.conf create -f -

@MaximF更改 conf 文件后,您必须执行systemctl daemon-reload 。 为我工作。

@jcorral您的解决方案对我

@MaximF我只是添加了重启恶魔命令行

kubeadm init 成功完成,但是当我检查版本时,出现以下错误:

客户端版本:version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-368:T 33Z", GoVersion:"go1.7.5", 编译器:"gc", 平台:"linux/amd64"}
与服务器localhost:8080的连接被拒绝 - 您是否指定了正确的主机或端口?

@haribole
你应该设置 KUBECONFIG env var

有没有人让法兰绒在与 CNI 相关的变通方法之后运行? 我可以通过 not ready 问题,但是当我运行 Flannel 时,出现如下错误:

Failed to create SubnetManager: error retrieving pod spec for 'kube-system/kube-flannel-ds-g5cbj': the server does not allow access to the requested resource (get pods kube-flannel-ds-g5cbj)

Pod 状态显示“CrashLoopBackOff”

您需要添加 rbac 角色来授权 flannel 从 API 中读取。

您需要添加 rbac 角色来授权 flannel 从 API 中读取。

如果其他人想知道这意味着什么,看起来您需要在创建 flannel 之前创建kube-flannel-rbac.yml

kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

我认为因为解决了一个根本问题并且关闭了相关的工单,我们也应该关闭这个工单:)

仅供参考:它现在在 Ubuntu 16.04 下使用更新的软件包对我有用。

1.6.1 对我有用! 感谢所有帮助解决此问题的人!

我通过执行以下步骤在 centos-release-7-3.1611.el7.centos.x86_64 上成功设置了我的 Kubernetes 集群(我假设 Docker 已经安装):

1)(来自/etc/yum.repo.d/kubernetes.repo)baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64-unstable
=> 为最新的 Kubernetes 1.6.1 使用不稳定的存储库
2) yum install -y kubelet kubeadm kubectl kubernetes-cni
3) (/etc/systemd/system/kubelet.service.d/10-kubeadm.conf) 在最后一行的末尾添加“--cgroup-driver=systemd”。
=> 这是因为 Docker 使用 systemd 作为 cgroup-driver 而 kubelet 使用 cgroupfs 作为 cgroup-driver。
4) systemctl enable kubelet && systemctl start kubelet
5) kubeadm init --pod-network-cidr 10.244.0.0/16
=> 如果你曾经添加--api-advertise-addresses,你需要使用--apiserver-advertise-address 来代替。
6) cp /etc/kubernetes/admin.conf $HOME/
须藤 chown $(id -u):$(id -g) $HOME/admin.conf
导出 KUBECONFIG=$HOME/admin.conf
=> 如果没有这一步,kubectl get 可能会报错
=> 我没有用 1.5.2 做
7) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
=> 1.6.0 引入了基于角色的访问控制,因此您应该在创建 Flannel 守护程序集之前添加 ClusterRole 和 ClusterRoleBinding
8) kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
=> 创建一个 Flannel 守护进程
9) (在每个从节点上) kubeadm join --token (你的令牌) (ip):(port)
=> 如 kubeadm init 的结果所示

以上所有步骤都是结合 Kubernetes-1.6.0,尤其是 kubeadm 的各种问题的建议的结果。

希望这会节省您的时间。

@eastcirclek @Sliim你很棒

@eastcirclek这也是我刚刚通过查询几个论坛执行的确切步骤。 也许是时区差异? 谢谢大家,这个话题真的很有帮助。

我在 AWS 上有 Ubuntu 16.04 服务器并按照步骤操作

  1. 编辑 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 并删除 $KUBELET_NETWORK_ARGS
  2. kubeadm reset 清除先前尝试启动它
  3. kubeadm init --token=--apiserver-advertise-address=

显然工作正常,但是当我尝试将 Calico 安装为网络插件时,出现以下错误
与服务器localhost:8080的连接被拒绝 - 您是否指定了正确的主机或端口?

k8s 团队正在开发补丁吗?

谢谢

@overip我认为这不需要任何补丁......你只需要在使用 kubectl 时指定正确的 kubeconfig 文件。 kubeadm 应该将它写入/etc/kubernetes/admin.conf

@jimmycuadra你能解释一下这样做的步骤吗?

@overip kubeadm init的输出有说明:

To start using your cluster, you need to run (as a regular user):

  sudo cp /etc/kubernetes/admin.conf $HOME/
  sudo chown $(id -u):$(id -g) $HOME/admin.conf
  export KUBECONFIG=$HOME/admin.conf

就个人而言,我更喜欢将文件复制到$HOME/.kube/config ,这是 kubectl 默认查找的位置。 那么你就不需要设置 KUBECONFIG 环境变量了。

如果您打算在本地机器上使用 kubectl,您可以使用scp (甚至只是复制粘贴内容)在您自己的计算机上将其写入~/.kube/config

在此 GitHub 问题中搜索“admin.conf”以获取更多详细信息。 它被提到过几次。

@eastcirclek - 按照步骤操作,但由于某种原因,节点无法正确安装法兰绒。
(注意:在主人上一切都很顺利。)

Apr 13 22:31:11 node2 kubelet[22893]: I0413 22:31:11.666206   22893 kuberuntime_manager.go:458] Container {Name:install-cni Image:quay.io/coreos/flannel:v0.7.0-amd64 Command:[/bin/sh -c set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done] Args:[] WorkingDir: Ports:[] EnvFrom:[] Env:[] Resources:{Limits:map[] Requests:map[]} VolumeMounts:[{Name:cni ReadOnly:false MountPath:/etc/cni/net.d SubPath:} {Name:flannel-cfg ReadOnly:false MountPath:/etc/kube-flannel/ SubPath:} {Name:flannel-token-g65nf ReadOnly:true MountPath:/var/run/secrets/kubernetes.io/serviceaccount SubPath:}] LivenessProbe:nil ReadinessProbe:nil Lifecycle:nil TerminationMessagePath:/dev/termination-log TerminationMessagePolicy:File ImagePullPolicy:IfNotPresent SecurityContext:nil Stdin:false StdinOnce:false TTY:false} is dead, but RestartPolicy says that we should restart it.
Apr 13 22:31:11 node2 kubelet[22893]: I0413 22:31:11.666280   22893 kuberuntime_manager.go:742] checking backoff for container "install-cni" in pod "kube-flannel-ds-3smf7_kube-system(2e6ad0f9-207f-11e7-8f34-0050569120ff)"
Apr 13 22:31:12 node2 kubelet[22893]: I0413 22:31:12.846325   22893 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/configmap/2e6ad0f9-207f-11e7-8f34-0050569120ff-flannel-cfg" (spec.Name: "flannel-cfg") pod "2e6ad0f9-207f-11e7-8f34-0050569120ff" (UID: "2e6ad0f9-207f-11e7-8f34-0050569120ff").
Apr 13 22:31:12 node2 kubelet[22893]: I0413 22:31:12.846373   22893 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/secret/2e6ad0f9-207f-11e7-8f34-0050569120ff-flannel-token-g65nf" (spec.Name: "flannel-token-g65nf") pod "2e6ad0f9-207f-11e7-8f34-0050569120ff" (UID: "2e6ad0f9-207f-11e7-8f34-0050569120ff").

只是分享我的解决方法。 首先需要 $KUBELET_NETWORK_ARGS,否则不启用/配置 CNI。 删除然后恢复 $KUBELET_NETWORK_ARGS 似乎太复杂了。
当 kubeadm init 显示“[apiclient] First node has registration, but is not ready”时,k8s 集群实际上已准备好服务请求。 那时,用户可以简单地转到https://kubernetes.io/docs/getting-started-guides/kubeadm/ 的第 3/4 步,如下所示。

To start using your cluster, you need to run (as a regular user):

  sudo cp /etc/kubernetes/admin.conf $HOME/
  sudo chown $(id -u):$(id -g) $HOME/admin.conf
  export KUBECONFIG=$HOME/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:  http://kubernetes.io/docs/admin/addons/

用户安装podnetwork时,请确保podnetwork策略的serviceaccount有足够的权限。 以法兰绒为例。 我只是将 cluster-admin 角色绑定到 flannel 的服务帐户,如下所示。 它可能并不理想,您可以为 flannel serviceacount 定义一个特定的角色。 顺便说一句,当用户部署其他插件服务如仪表板时,还需要为相关的服务帐户授予足够的权限。

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: flannel:daemonset
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: flannel
  namespace:  kube-system

在 podnetwork 服务器准备好后,kubeadm init 会显示节点准备好,用户可以继续指令。

以法兰绒为例。 我只是将 cluster-admin 角色绑定到 flannel 的服务帐户,如下所示。 它可能并不理想,您可以为 flannel serviceacount 定义一个特定的角色。

已经有https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml

感谢大家的帮助。
最终使用法兰绒完全运行 k8s 1.6.1。 现在一切都在 ansible playbooks 中。
在 Centos/RHEL 上测试。 基于 Debian 的准备工作也已开始(例如 Ubuntu),但可能需要一些改进。

https://github.com/ReSearchITEng/kubeadm-playbook/blob/master/README.md

PS:基于 sjenning/kubeadm-playbook 的工作 - 非常感谢@sjenning

Geeting 加入集群:
[discovery] 创建集群信息发现客户端,从“ https://10.100.2.158 :6443”请求信息
[发现] 请求集群信息失败,将重试:[configmaps "cluster-info" is forbidden: User " system:anonymous " cannot get configmaps in the namespace "kube-public"]
[发现] 请求集群信息失败,将重试:[configmaps "cluster-info" is forbidden: User " system:anonymous " cannot get configmaps in the namespace "kube-public"]

我将节点作为 SelfHosting 启动。

此页面是否有帮助?
0 / 5 - 0 等级