首页 文章

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

提问于
浏览
1

我在主节点上运行 etcdkube-apiserverkube-schedulerkube-controllermanager 以及在minion节点上运行 kubeletkube-proxy (所有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 回答

  • 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

  • 0

    您可以尝试将 --etcd-prefix=/your/prefix--etcd-endpoints=address 传递给flanneld而不是 --kube-subnet-mgr ,因此法兰绒从etcd服务器获取net-conf而不是从api服务器获取 .

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

    UPDATE

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

    / var / lib / kubelet /:/ var / lib / kubelet:rw,shared

    此外,在docker.service中为docker启用相同的选项

    MountFlags =共享

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

相关问题