在Debian上安装Kubernetes后,配置网络是一个关键步骤,以确保集群中的各个节点能够相互通信。以下是一个详细的步骤指南,帮助你在Debian系统上配置Kubernetes网络:
在每个节点(包括主控节点和工作节点)上,使用 hostnamectl 命令设置主机名,并在 /etc/hosts 文件中添加节点之间的IP地址和主机名映射。
sudo hostnamectl set-hostname "k8s-master01"
sudo hostnamectl set-hostname "k8s-worker01"
sudo hostnamectl set-hostname "k8s-worker02"
echo "192.168.16.20 k8s-master01.test.local k8s-master01" >> /etc/hosts
echo "192.168.16.21 k8s-worker01.test.local k8s-worker01" >> /etc/hosts
echo "192.168.16.22 k8s-worker02.test.local k8s-worker02" >> /etc/hosts
禁用swap分区以确保kubelet顺利运行。可以通过运行以下命令关闭所有交换分区,并在 /etc/fstab 文件中注释掉swap对应的行。
sudo swapoff -a
sudo sed -i '/ swap / s/1/g' /etc/fstab
如果Debian系统启用了操作系统防火墙,需要在主控节点和工作节点上允许特定的端口。例如,允许Kubernetes API服务器的端口6443、etcd的端口2379、以及kubelet的端口10250等。
sudo ufw allow 6443/tcp
sudo ufw allow 2379/tcp
sudo ufw allow 2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10251/tcp
sudo ufw allow 10252/tcp
sudo ufw allow 10255/tcp
sudo ufw reload
在所有节点上安装containerd运行时,并设置必要的内核参数以支持网络功能。
sudo apt update
sudo apt install -y containerd
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlaybr_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
在主控节点上运行 kubeadm init 命令来初始化集群。这个命令会设置API服务器的地址、控制平面的端点、Pod网络CIDR和Service CIDR等。
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
为了让kubectl能够与你的Kubernetes集群通信,你需要配置kubectl。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Kubernetes集群需要一个网络插件来管理Pod之间的网络通信。常用的网络插件包括Flannel、Calico和Weave等。以下是使用Flannel插件的一个示例。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
使用 kubectl get nodes 命令查看集群中的节点状态,确保所有节点都处于Ready状态。
kubectl get nodes
通过以上步骤,你可以在Debian上成功配置Kubernetes网络,确保集群中的各个节点能够相互通信。