【问题标题】:kubeadm says cni config uninitialized for node using weavekubeadm 说使用 weave 的节点的 cni 配置未初始化
【发布时间】:2017-11-01 16:49:35
【问题描述】:

我正在尝试使用 kubeadm 1.6 设置 kubernetes。主节点和节点是使用带有 Ubuntu 16.04 框的 Vagrant 创建的。我按照所有说明进行操作,但无法弄清楚。

流浪文件:

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.box_check_update = false

  config.vm.provider "virtualbox" do |vb|
    vb.cpus = 2
    vb.memory = "1024"
  end

  config.vm.provision "shell", path: "provision.sh"

  config.vm.define "master" do |c|
      c.vm.hostname = "master"
      c.vm.network "private_network", ip: "192.168.50.2", netmask: "255.255.255.0", auto_config: true, virtualbox__intnet: "k8s-net"
      c.vm.provision :shell, inline: "sed 's/127\.0\.0\.1.*master.*/192\.168\.50\.2 master/' -i /etc/hosts"

  end

  config.vm.define "node1" do |c|
      c.vm.hostname = "node1"
      c.vm.network "private_network", ip: "192.168.50.3", netmask: "255.255.255.0", auto_config: true, virtualbox__intnet: "k8s-net"
      c.vm.provision :shell, inline: "sed 's/127\.0\.0\.1.*node1.*/192\.168\.50\.3 node1/' -i /etc/hosts"
  end

  config.vm.define "node2" do |c|
      c.vm.hostname = "node2"
      c.vm.network "private_network", ip: "192.168.50.4", netmask: "255.255.255.0", auto_config: true, virtualbox__intnet: "k8s-net"
      c.vm.provision :shell, inline: "sed 's/127\.0\.0\.1.*node2.*/192\.168\.50\.4 node2/' -i /etc/hosts"
  end

end
  1. 初始化 kubeadm

    sudo kubeadm init --apiserver-advertise-address=192.168.50.2

  2. 运行提供的命令

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

  3. 设置编织

    kubectl apply --filename https://git.io/weave-kube-1.6

  4. 验证主模式已就绪且 dns pod 正在运行。

  5. 无错误地加入节点。

    kubeadm join --token 2f17fd.c5f6abcccdfa8c7a 192.168.50.2:6443

  6. 节点出现在主节点上,但从未进入就绪状态。运行 kubectl describe node node1 显示此错误:

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

为什么会出现此错误?我尝试安装 kubeadm 1.5.6 并得到同样的错误。

请帮忙。

更新 在这里找到解决方案:How to get kube-dns working in Vagrant cluster using kubeadm and Weave

首先,通过在master上运行以下命令找到公共IP。

kubectl get svc
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   10.96.0.1    <none>        443/TCP   1h

在每个节点中,确保任何使用 10.96.0.1(在我的例子中)的进程都被路由到 10.30.3.41 上的主节点。

所以在每个节点上(你可以跳过master)使用路由来设置重定向。

route add 10.96.0.1 gw 10.30.3.41

【问题讨论】:

    标签: vagrant kubernetes kubeadm


    【解决方案1】:

    您的问题是机器中的默认路由。需要修正默认路由拳头。

    • 取消配置当前配置“kubeadm reset”
    • 安装 kubernets 1.6.4
    • 删除默认路由'ip route delete default via 10.0.2.2'
    • 添加产品网络默认路由'ip route add default via 192.168.50.1'
    • 配置 kubeadm 'kubeadm init --apiserver-advertise-address=192.168.50.2'
    • 安装 wave rbac 和 wave kube

    希望这会有所帮助。

    【讨论】:

    • 谢谢。我认为这里讨论了更大的问题(github.com/mitchellh/vagrant/issues/436)。您的解决方案,就像我上面使用的一样,是临时的,必须在重新启动 master 时重新应用。
    【解决方案2】:

    为了使网络覆盖在 Kubernetes 1.6 中工作,您需要启用 RBAC 规则。

    发件人:https://github.com/weaveworks/weave/issues/2777

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: weave-net
    rules:
    - apiGroups:
      - ""
      resources:
      - pods
      - namespaces
      - nodes
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - extensions
      resources:
      - networkpolicies
      verbs:
      - get
      - list
      - watch
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: weave-net
      namespace: kube-system
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: weave-net
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: weave-net
    subjects:
    - kind: ServiceAccount
      name: weave-net
      namespace: kube-system
    

    之后,节点将处于就绪状态。

    【讨论】:

    猜你喜欢
    • 2017-03-02
    • 2020-05-31
    • 2020-09-09
    • 2019-03-11
    • 2020-12-01
    • 2021-01-01
    • 2019-03-07
    • 1970-01-01
    • 2018-08-13
    相关资源
    最近更新 更多