CentOS Overlay在Kubernetes中的应用
CentOS作为常见的Linux发行版,在Kubernetes集群中通过Overlay网络与OverlayFS存储技术,实现跨节点容器通信及高效存储管理。以下从配置前提、网络应用、存储应用三方面展开说明:
在CentOS上使用Overlay技术前,需完成内核模块加载与系统参数调整,确保底层支持:
overlay模块(支持联合文件系统),桥接网络依赖br_netfilter模块(实现桥接与防火墙集成)。通过以下命令加载并设置开机自启:cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1 # 桥接流量调用iptables规则
net.ipv4.ip_forward = 1 # 开启IPv4转发
net.bridge.bridge-nf-call-ip6tables = 1 # IPv6桥接流量调用ip6tables规则
EOF
sudo sysctl --system # 生效配置
以上步骤是CentOS上使用Overlay技术的基础,需在所有集群节点执行。
Kubernetes通过CNI(容器网络接口)插件实现Overlay网络,常用插件包括Calico、Flannel等,核心作用是为Pod提供跨节点的虚拟网络,使Pod间可通过IP直接通信。
Calico支持Overlay(VXLAN)与Underlay模式,适用于大多数场景。通过以下命令部署:
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
部署后,检查插件状态:
kubectl get pods -n kube-system | grep calico
# 正常状态应为Running
通过创建Pod并测试跨节点通信,验证网络是否正常:
# 创建测试命名空间
kubectl create namespace overlay-test
# 部署两个Nginx Pod
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-overlay
namespace: overlay-test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
EOF
# 获取Pod IP(需等待Pod状态为Running)
POD1_IP=$(kubectl get pod -n overlay-test -l app=nginx -o jsonpath='{.items[0].status.podIP}')
POD2_IP=$(kubectl get pod -n overlay-test -l app=nginx -o jsonpath='{.items[1].status.podIP}')
# 进入Pod1并ping Pod2
kubectl exec -it -n overlay-test $(kubectl get pod -n overlay-test -l app=nginx -o jsonpath='{.items[0].metadata.name}') -- ping $POD2_IP
若能ping通,说明Overlay网络配置成功。
OverlayFS是Kubernetes默认的容器存储驱动,用于管理镜像层与容器可写层,特点是通过分层存储减少磁盘占用,提升启动速度。
CentOS上推荐使用containerd作为容器运行时(Kubernetes原生支持),配置overlay存储驱动:
# 生成containerd默认配置
sudo mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改配置(启用systemd cgroup驱动,设置镜像仓库镜像)
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sed -i 's|k8s.gcr.io/pause:3.9|registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9|' /etc/containerd/config.toml
# 重启containerd
sudo systemctl restart containerd
sudo systemctl enable containerd
Kubernetes支持将OverlayFS作为持久卷,但需依赖存储插件(如local-path-provisioner或第三方OverlayFS存储服务)。以下是使用local-path-provisioner的示例:
# 安装local-path-provisioner(需提前部署)
kubectl apply -f https://github.com/k3s-io/k3s/releases/latest/download/local-path-storage.yaml
# 创建PersistentVolumeClaim(PVC)
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: overlay-pvc
namespace: overlay-test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-path # 使用local-path存储类
EOF
# 创建使用PVC的Pod
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: overlay-pod
namespace: overlay-test
spec:
containers:
- name: overlay-container
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- mountPath: "/data"
name: overlay-volume
volumes:
- name: overlay-volume
persistentVolumeClaim:
claimName: overlay-pvc
EOF
Pod启动后,/data目录即为OverlayFS存储路径,数据会持久化到节点本地。
net.core.rmem_max、net.core.wmem_max)或使用高速存储(SSD)缓解。