我试图安装Kubernetes
有kubeadm
与3个虚拟机Debian
在我的笔记本电脑的操作系统,一个作为主节点,另外两个作为工作节点。我完全按照kubernetes.io上的教程建议进行了操作。我使用命令初始化了集群,kubeadm init --pod-network-cidr=10.244.0.0/16
并使用相应的kube join
命令加入了工作程序。我Flannel
使用命令安装为网络覆盖kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
。
命令的响应kubectl get nodes
看起来不错:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE
k8smaster Ready master 20h v1.18.3 192.168.1.100 <none> Debian GNU/Linux 10 (buster) 4.19.0-9-amd64 docker://19.3.9
k8snode1 Ready <none> 20h v1.18.3 192.168.1.101 <none> Debian GNU/Linux 10 (buster) 4.19.0-9-amd64 docker://19.3.9
k8snode2 Ready <none> 20h v1.18.3 192.168.1.102 <none> Debian GNU/Linux 10 (buster) 4.19.0-9-amd64 docker://19.3.9
命令的响应kubectl get pods --all-namespaces
未显示任何错误:
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-66bff467f8-7hlnp 1/1 Running 9 20h 10.244.0.22 k8smaster <none> <none>
kube-system coredns-66bff467f8-wmvx4 1/1 Running 11 20h 10.244.0.23 k8smaster <none> <none>
kube-system etcd-k8smaster 1/1 Running 11 20h 192.168.1.100 k8smaster <none> <none>
kube-system kube-apiserver-k8smaster 1/1 Running 9 20h 192.168.1.100 k8smaster <none> <none>
kube-system kube-controller-manager-k8smaster 1/1 Running 11 20h 192.168.1.100 k8smaster <none> <none>
kube-system kube-flannel-ds-amd64-9c5rr 1/1 Running 17 20h 192.168.1.102 k8snode2 <none> <none>
kube-system kube-flannel-ds-amd64-klw2p 1/1 Running 21 20h 192.168.1.101 k8snode1 <none> <none>
kube-system kube-flannel-ds-amd64-x7vm7 1/1 Running 11 20h 192.168.1.100 k8smaster <none> <none>
kube-system kube-proxy-jdfzg 1/1 Running 11 19h 192.168.1.101 k8snode1 <none> <none>
kube-system kube-proxy-lcdvb 1/1 Running 6 19h 192.168.1.102 k8snode2 <none> <none>
kube-system kube-proxy-w6jmf 1/1 Running 11 20h 192.168.1.100 k8smaster <none> <none>
kube-system kube-scheduler-k8smaster 1/1 Running 10 20h 192.168.1.100 k8smaster <none> <none>
然后我尝试用以下内容创建一个POD
with命令kubectl apply -f podexample.yml
:
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: nginx
image: nginx
命令kubectl get pods -o wide
显示POD
在工作节点1上创建了,并且处于Running
状态。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
example 1/1 Running 0 135m 10.244.1.14 k8snode1 <none> <none>
问题是,当我尝试使用curl -I 10.244.1.14
命令连接到Pod时,我在主节点中得到以下响应:
curl: (7) Failed to connect to 10.244.1.14 port 80: Connection timed out
但是工作节点1上的同一命令成功响应:
HTTP/1.1 200 OK
Server: nginx/1.17.10
Date: Sat, 23 May 2020 19:45:05 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 14 Apr 2020 14:19:26 GMT
Connection: keep-alive
ETag: "5e95c66e-264"
Accept-Ranges: bytes
我认为这可能是因为某种kube-proxy
原因不在主节点上运行,但是命令ps aux | grep kube-proxy
表明它正在运行。
root 16747 0.0 1.6 140412 33024 ? Ssl 13:18 0:04 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=k8smaster
然后,我使用命令检查了内核路由表,ip route
它显示10.244.1.0/244
出发往法兰绒的数据包。
default via 192.168.1.1 dev enp0s3 onlink
10.244.0.0/24 dev cni0 proto kernel scope link src 10.244.0.1
10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink
10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink
169.254.0.0/16 dev enp0s3 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.100
一切对我来说看起来很好,我不知道该怎么办才能检查出什么问题。我想念什么吗?
UPDATE1:
如果我NGINX
在工作程序node1上启动一个容器并将其80端口映射到工作程序node1主机的端口80,那么我可以通过curl -I 192.168.1.101
主节点上的命令连接到它。另外,我没有添加任何iptable规则,并且没有UFW
在计算机上安装任何防火墙守护程序。因此,我认为这不是防火墙问题。
UPDATE2:
我重新创建了集群,并使用canal
代替了flannel
,仍然没有运气。
UPDATE3:
我通过以下命令查看了运河和法兰绒原木,一切似乎都很好:
kubectl logs -n kube-system canal-c4wtk calico-node
kubectl logs -n kube-system canal-c4wtk kube-flannel
kubectl logs -n kube-system canal-b2fkh calico-node
kubectl logs -n kube-system canal-b2fkh kube-flannel
UPDATE4:
为了完整起见,以下是上述容器的日志。
UPDATE5:
我尝试安装特定版本的kubernetes组件和docker,以检查是否存在与以下命令的版本不匹配有关的问题:
sudo apt-get install docker-ce=18.06.1~ce~3-0~debian
sudo apt-get install -y kubelet=1.12.2-00 kubeadm=1.12.2-00 kubectl=1.12.2-00 kubernetes-cni=0.6.0-00
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
但什么都没有改变。
我什/etc/bash.bashrc
至在所有节点上更新了文件以清除所有代理设置,只是为了确保它与代理无关:
export HTTP_PROXY=
export http_proxy=
export NO_PROXY=127.0.0.0/8,192.168.0.0/16,172.0.0.0/8,10.0.0.0/8
并且还在/lib/systemd/system/docker.service
所有节点上的docker systemd文件中添加了以下环境:
Environment="HTTP_PROXY="
Environment="NO_PROXY="
然后重新启动所有节点,当我登录时,仍然 curl: (7) Failed to connect to 10.244.1.12 port 80: Connection timed out
UPDATE6:
我事件试图在CentOS
计算机上设置群集。以为也许与某事有关Debian
。我也停下来并禁用它firewalld
,以确保防火墙不会引起问题,但是我又得到了完全相同的结果:Failed to connect to 10.244.1.2 port 80: Connection timed out
。
现在我唯一可疑的是,可能是因为VirtualBox
虚拟机网络配置?虚拟机已Bridge Adapter
连接到我的无线网络接口。
UPDATE7:
我进入创建的POD,发现POD内部没有Internet连接。所以,我创建的另一盒从NGINX
有类似的命令图像curl
,wget
,ping
而traceroute
并试图curl https://www.google.com -I
和得到的结果:curl: (6) Could not resolve host: www.google.com
。我检查了/etc/resolv.conf
文件,发现POD内的DNS服务器地址为10.96.0.10
。将DNS更改为8.8.8.8
仍会curl https://www.google.com -I
导致curl: (6) Could not resolve host: www.google.com
。尝试执行ping操作8.8.8.8
,结果为56 packets transmitted, 0 received, 100% packet loss, time 365ms
。对于最后一步,我尝试traceroute 8.8.8.8
了以下结果:
1 10.244.1.1 (10.244.1.1) 0.116 ms 0.056 ms 0.052 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
我不知道POD中没有Internet连接这一事实与以下问题有关:我无法从除POD所部署的节点之外的其他节点连接到群集中的POD。
Debian系统nftables
用于iptables
与Kubernetes网络设置不兼容的后端。因此,您必须通过以下命令将其设置为使用iptables-legacy而不是nftables:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句