HOME

Flannel部署实践

什么是Flannel?

在Kubernetes中,网络管理是一个复杂但至关重要的组成部分。Flannel 是一个非常流行的网络插件,它被设计用于为每个节点分配唯一的IP地址,并创建一个统一的集群广域网(Underlay Network),使得Pod之间可以相互通信。

Flannel的特点

部署Flannel的步骤

部署Flannel之前,确保你的Kubernetes集群已经准备好并且正在运行。以下是一个基于Minikube的简单部署实践:

步骤1:检查环境

首先,我们需要确认你的Kubernetes集群支持网络插件。可以通过执行kubectl version --short --client来检查版本信息。

$ kubectl version --short --client
Client Version: v1.24.0

然后,确保Flannel已经被正确地集成到Kubernetes环境中。可以在master节点上运行以下命令:

$ kubectl get nodes -o wide
NAME    STATUS   ROLES         AGE  VERSION   INTERNAL-IP  EXTERNAL-IP  OS-KERNEL
master1 Ready    control-plane 5d3h  v1.24.0   192.168.64.4     <none>      Linux 5.10.17-gke.1003+google

步骤2:部署Flannel

使用以下命令来安装Flannel:

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

或者,如果你的集群没有默认配置为使用Calico或其他网络策略,则可以安装此YAML文件以启用Flannel:

$ kubectl apply -f https://github.com/flannel-io/flannel/raw/v0.17.0/Documentation/k8s-manifests/kube-flannel-rbac.yml

步骤3:验证部署

在master节点上检查Flannel的状态,确认它已经被正确地启动:

$ kubectl get pods -n kube-system | grep flanneld
flanneld-7f9b5f8c5w-t6t2l   1/1     Running   0          3m4s

确保所有节点都成功安装了Flannel。在每个节点上执行以下命令:

$ kubectl get pods -n kube-system | grep flanneld
flanneld-7f9b5f8c5w-t6t2l   1/1     Running   0          3m4s

步骤4:验证网络

最后,为了验证网络是否正常工作,请创建一个简单的Pod,并在其中运行一个测试服务。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: ['sh', '-c', 'while true; do echo $(hostname); sleep 30; done']

创建上述Pod:

$ kubectl apply -f test-pod.yaml
pod/test-pod created

$ kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
test-pod   1/1     Running   0          2s

在另一台节点上,尝试访问该Pod的网络服务。可以使用kubectl exec命令进入Pod,并运行ping命令来测试连接:

$ kubectl exec test-pod -c test-container -- ping master1
PING master1 (192.168.64.4): 56 data bytes
64 bytes from 192.168.64.4: seq=0 ttl=253 time=7.2 ms
64 bytes from 192.168.64.4: seq=1 ttl=253 time=1.4 ms

--- master1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
rtt min/avg/max/mdev = 1.4/4.3/7.2/3.0 ms

如果能够成功ping通,说明网络配置已经正确。否则,请检查Flannel的日志和配置文件。

总结

通过以上步骤,我们成功地在Kubernetes集群中部署了Flannel,并验证了其工作状态。Flannel为Kubernetes提供了一种高效、简单的方式来管理网络配置,确保了Pod之间的通信畅通无阻。