Kubernetes 法兰绒正在为从节点崩溃

Kubernetes 法兰绒正在为从节点崩溃,kubernetes,Kubernetes,我在我的从属节点上得到了法兰绒服务的这个结果。法兰绒在主节点上运行良好 kube-system kube-flannel-ds-amd64-xbtrf 0/1 CrashLoopBackOff 4 3m5s 在从机上运行的Kube代理很好,但不是法兰绒吊舱 我只有一个主节点和一个从节点。首先它说正在运行,然后它转到错误,最后是崩溃回退 godfrey@master:~$ kubectl get pods --all-namespaces -o wid

我在我的从属节点上得到了法兰绒服务的这个结果。法兰绒在主节点上运行良好

kube-system   kube-flannel-ds-amd64-xbtrf      0/1     CrashLoopBackOff   4          3m5s
在从机上运行的Kube代理很好,但不是法兰绒吊舱

我只有一个主节点和一个从节点。首先它说
正在运行
,然后它转到
错误
,最后是
崩溃回退

godfrey@master:~$ kubectl get pods --all-namespaces -o wide
NAMESPACE     NAME                             READY   STATUS             RESTARTS   AGE     IP                NODE     NOMINATED NODE   READINESS GATES
kube-system   kube-flannel-ds-amd64-jszwx      0/1     CrashLoopBackOff   4          2m17s   192.168.152.104   slave3   <none>           <none>
kube-system   kube-proxy-hxs6m                 1/1     Running            0          18m     192.168.152.104   slave3   <none>           <none>

到目前为止,我还没有找到解决办法。感谢您的帮助。

由于解决方案来自OP,我将以社区维基的形式发布答案

正如OP在评论中所报告的,他在kubeadm初始化期间没有通过podCIDR

以下命令用于查看法兰绒吊舱处于“CrashLoopBackoff”状态:

确认podCIDR未传递给处于
CrashLoopBackoff
状态的法兰绒吊舱
kube-flannel-ds-amd64-ksmmh

$ kubectl logs kube-flannel-ds-amd64-ksmmh
kubeadm init--pod网络cidr=172.168.10.0/24
未按预期将podCIDR传递给从属节点

因此,为了解决这个问题,必须使用
kubectl补丁节点slave1-p'{“spec”:{“podCIDR”:“172.168.10.0/24”}
命令将podCIDR传递给每个从属节点


请查看此链接:以及“Kubernetes Specific”部分

由于解决方案来自OP,我将以社区wiki的形式发布答案

正如OP在评论中所报告的,他在kubeadm初始化期间没有通过podCIDR

以下命令用于查看法兰绒吊舱处于“CrashLoopBackoff”状态:

确认podCIDR未传递给处于
CrashLoopBackoff
状态的法兰绒吊舱
kube-flannel-ds-amd64-ksmmh

$ kubectl logs kube-flannel-ds-amd64-ksmmh
kubeadm init--pod网络cidr=172.168.10.0/24
未按预期将podCIDR传递给从属节点

因此,为了解决这个问题,必须使用
kubectl补丁节点slave1-p'{“spec”:{“podCIDR”:“172.168.10.0/24”}
命令将podCIDR传递给每个从属节点


请参阅此链接:和“Kubernetes Specific”(Kubernetes Specific)部分所描述的群集配置在两个方面看起来不正确:


首先,
PodCIDR
合理的最小子网大小是
/16
。每个Kubernetes节点通常获得
/24
子网,因为它最多可以运行100个吊舱。
PodCIDR
ServicesCIDR
(默认值:“10.96.0.0/12”)不得干扰您现有的LAN网络,也不得相互干扰

因此,正确的
kubeadm
命令如下所示:

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
在您的情况下,
PodCIDR
子网只是
/24
,它被分配给了主节点。从属节点没有自己的
/24
子网,因此Flannel Pod在日志中显示了错误:

I0515 05:14:53.975822       1 main.go:390] Found network config - Backend type: vxlan
I0515 05:14:53.975856       1 vxlan.go:121] VXLAN config: VNI=1 Port=0 GBP=false Learning=false DirectRouting=false
E0515 05:14:53.976072       1 main.go:291] Error registering network: failed to acquire lease: node "slave3" pod cidr not assigned
I0515 05:14:53.976154       1 main.go:370] Stopping shutdownHandler...
Error registering network: failed to acquire lease: node "slave3" pod cidr not assigned
手动将同一子网分配给多个节点将导致其他连接问题

您可以在中找到有关Kubernetes IP子网的更多详细信息


第二个问题是IP子网号

最新的网络插件版本能够基于
kubeadm
参数
--Pod网络cidr
检测正确的Pod子网。旧版本使用预定义的子网
192.168.0.0/16
,您必须在
Deaemonset
规范中的YAML文件中对其进行调整:

         - name: CALICO_IPV4POOL_CIDR
           value: "192.168.0.0/16"
is仍然需要为
kubeadm init
指定默认子网(
10.244.0.0/16
) 要为集群使用自定义子网,在应用到集群之前,应调整“安装”YAML文件

...
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
...
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
...
因此,以下内容适用于Kubernetes和Calico的任何版本:

$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Latest Calico version
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# or specific version, v3.14 in this case, which is also latest at the moment
# kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
法兰绒也一样:

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

# For Kubernetes v1.7+ 
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml    

# For older versions of Kubernetes:
# For RBAC enabled clusters:
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-legacy.yml
$ 
还有许多其他的网络插件。您可以在文档中找到该列表:


所述群集配置在两个方面看起来不正确:


首先,
PodCIDR
合理的最小子网大小是
/16
。每个Kubernetes节点通常获得
/24
子网,因为它最多可以运行100个吊舱。
PodCIDR
ServicesCIDR
(默认值:“10.96.0.0/12”)不得干扰您现有的LAN网络,也不得相互干扰

因此,正确的
kubeadm
命令如下所示:

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
在您的情况下,
PodCIDR
子网只是
/24
,它被分配给了主节点。从属节点没有自己的
/24
子网,因此Flannel Pod在日志中显示了错误:

I0515 05:14:53.975822       1 main.go:390] Found network config - Backend type: vxlan
I0515 05:14:53.975856       1 vxlan.go:121] VXLAN config: VNI=1 Port=0 GBP=false Learning=false DirectRouting=false
E0515 05:14:53.976072       1 main.go:291] Error registering network: failed to acquire lease: node "slave3" pod cidr not assigned
I0515 05:14:53.976154       1 main.go:370] Stopping shutdownHandler...
Error registering network: failed to acquire lease: node "slave3" pod cidr not assigned
手动将同一子网分配给多个节点将导致其他连接问题

您可以在中找到有关Kubernetes IP子网的更多详细信息


第二个问题是IP子网号

最新的网络插件版本能够基于
kubeadm
参数
--Pod网络cidr
检测正确的Pod子网。旧版本使用预定义的子网
192.168.0.0/16
,您必须在
Deaemonset
规范中的YAML文件中对其进行调整:

         - name: CALICO_IPV4POOL_CIDR
           value: "192.168.0.0/16"
is仍然需要为
kubeadm init
指定默认子网(
10.244.0.0/16
) 要为集群使用自定义子网,在应用到集群之前,应调整“安装”YAML文件

...
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
...
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
...
因此,以下内容适用于Kubernetes和Calico的任何版本:

$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Latest Calico version
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# or specific version, v3.14 in this case, which is also latest at the moment
# kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
法兰绒也一样:

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

# For Kubernetes v1.7+ 
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml    

# For older versions of Kubernetes:
# For RBAC enabled clusters:
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-legacy.yml
$ 
还有许多其他的网络插件。您可以在文档中找到该列表:


请提供更多详细信息。你的Kubernetes版本是什么?法兰绒版?它一直在工作并停止工作,还是从未工作过?您是如何创建kubernetes群集的?如果使用kubeadm,则在运行kubeadm init时必须通过pod CIDR。按照官方的法兰绒。这可能也会有帮助:大家好,谢谢你们的帮助。我解决了这个问题。podCIDR子网信息未通过“kubeadm init--pod network cidr=172.168.10.0/24”命令传递给从属节点。我必须做一个“kubectl补丁节点slave1-p'{“spec”:{“p”