我在Ubuntu 16.04上设置了3个节点kubernetes(v1.9.3
)群集。
之前的设置我清除了iptables规则并按照k8s文件为flannel用以下命令初始化集群:
# kubeadm init --apiserver-advertise-address 192.168.56.20 --pod-network-cidr=10.244.0.0/16 --kubernetes-version 1.9.3
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
上一个命令似乎成功了:
# kubectl -n kube-system -n kube-system get pods
NAME READY STATUS RESTARTS AGE
etcd-master 1/1 Running 0 3m
kube-apiserver-master 1/1 Running 0 2m
kube-controller-manager-master 1/1 Running 0 2m
kube-dns-6f4fd4bdf-4c76v 3/3 Running 0 3m
kube-flannel-ds-wbx97 1/1 Running 0 1m
kube-proxy-x65lv 1/1 Running 0 3m
kube-scheduler-master 1/1 Running 0 2m
但问题是kube-dns
似乎分配了错误的服务端点地址,这可以通过以下命令看到:
# kubectl get ep kube-dns --namespace=kube-system
NAME ENDPOINTS AGE
kube-dns 172.17.0.2:53,172.17.0.2:53 3m
root@master:~# kubectl describe service kube-dns -n kube-system
Name: kube-dns
Namespace: kube-system
Labels: k8s-app=kube-dns
kubernetes.io/cluster-service=true
kubernetes.io/name=KubeDNS
Annotations: <none>
Selector: k8s-app=kube-dns
Type: ClusterIP
IP: 10.96.0.10
Port: dns 53/UDP
TargetPort: 53/UDP
Endpoints: 172.17.0.2:53
Port: dns-tcp 53/TCP
TargetPort: 53/TCP
Endpoints: 172.17.0.2:53
Session Affinity: None
Events: <none>
172.17.0.2
是docker bridge(docker0
)为kube-dns
容器分配的IP地址。在使用k8s网络设置时,kube-dns
的端点应具有podSubnet
(10.244.0.0/16
)的地址。
当前设置的效果是当IP通信正常时,所有pod都没有功能DNS。
我尝试删除kube-dns
pod以查看新的kube-dns
容器可以从podSubnet
获取端点,但他们不会。
从3 kube-dns
个容器的启动日志中,没有任何错误消息。
答案 0 :(得分:0)
我想我已经找到了根本原因。前一个kubeadm reset
未删除cni
和flannel.1
接口。因此,下一个kubeadm init
使kube-dns
认为在应用法兰绒纱线之前,Kubernetes网络插件已经到位。
在拆除kubernetes群集后检查并删除由flannel插件创建的任何虚拟NIC后,下一个kubeadm init
可以成功,不再出现此问题。
同样适用于需要运行weave reset
以删除剩余虚拟编织网卡的 Weave Net 。