由于子网管理器故障,Flannel在kubernetes集群中失败

时间:2017-09-12 14:10:24

标签: docker kubernetes containers kubectl flannel

我在主节点上运行etcdkube-apiserverkube-schedulerkube-controllermanager以及kubeletkube-proxy minion节点如下(所有kube二进制文件来自kubernetes 1.7.4):

# [master node]
./etcd
./kube-apiserver --logtostderr=true --etcd-servers=http://127.0.0.1:2379 --service-cluster-ip-range=10.10.10.0/24 --insecure-port 8080 --secure-port=0 --allow-privileged=true --insecure-bind-address 0.0.0.0
./kube-scheduler --address=0.0.0.0 --master=http://127.0.0.1:8080
./kube-controller-manager --address=0.0.0.0 --master=http://127.0.0.1:8080

# [minion node]
./kubelet --logtostderr=true --address=0.0.0.0 --api_servers=http://$MASTER_IP:8080 --allow-privileged=true
./kube-proxy --master=http://$MASTER_IP:8080

在此之后,如果我执行kubectl get all --all-namespaceskubectl get nodes,我就会

NAMESPACE   NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
default     svc/kubernetes   10.10.10.1   <none>        443/TCP   27m

NAME       STATUS    AGE       VERSION
minion-1   Ready     27m       v1.7.4+793658f2d7ca7

然后,我按照以下方式涂抹法兰绒:

kubectl apply -f kube-flannel-rbac.yml -f kube-flannel.yml

现在,我看到创建了一个pod,但错误:

NAMESPACE     NAME                    READY     STATUS             RESTARTS   AGE
kube-system   kube-flannel-ds-p8tcb   1/2       CrashLoopBackOff   4          2m

当我检查minion节点中失败容器内的日志时,我看到以下错误:

Failed to create SubnetManager: unable to initialize inclusterconfig: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory

我的问题是:如何解决这个问题?这是SSL问题吗?我在设置群集时缺少哪一步?

2 个答案:

答案 0 :(得分:1)

也许是你的法兰绒yaml文件有问题, 你可以尝试这个来安装你的法兰绒, 检查旧的IP链接

ip link

如果显示法兰绒,请删除它

ip link delete flannel.1

并安装,其默认的pod网络cdir为10.244.0.0/16

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.0/Documentation/kube-flannel.yml

答案 1 :(得分:0)

你可以尝试将 - etcd-prefix = / your / prefix - etcd-endpoints = address 传递给flanneld而不是 - kube -subnet-mgr 所以flannel从etcd服务器获取 net-conf ,而不是从api服务器获取。

请记住,您必须将net-conf推送到etcd服务器。

<强>更新

问题(/var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory)可以在没有 - admission-control = ...,ServiceAccount,... 的执行apiserver时出现,或者如果kubelet在容器内(例如:超立方体)这最后是我的情况。如果要在容器内执行k8s组件,则需要将“shared”选项传递给kubelet卷

  

的/ var / lib中/ kubelet /:在/ var / lib中/ kubelet:RW,共享

此外,在docker.service

中启用与docker相同的选项
  

MountFlags =共享

现在的问题是:是否存在共享安装的安全漏洞?