centos

CentOS Overlay在Kubernetes中的应用

小樊
41
2025-10-02 23:56:23
栏目: 智能运维

CentOS Overlay在Kubernetes中的应用
CentOS作为常见的Linux发行版,在Kubernetes集群中通过Overlay网络OverlayFS存储技术,实现跨节点容器通信及高效存储管理。以下从配置前提、网络应用、存储应用三方面展开说明:

一、Overlay应用的前提配置

在CentOS上使用Overlay技术前,需完成内核模块加载与系统参数调整,确保底层支持:

  1. 加载内核模块: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
    
  2. 配置sysctl参数:调整网络转发与桥接规则,允许Pod间跨节点通信:
    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技术的基础,需在所有集群节点执行。

二、Overlay网络在Kubernetes中的应用

Kubernetes通过CNI(容器网络接口)插件实现Overlay网络,常用插件包括Calico、Flannel等,核心作用是为Pod提供跨节点的虚拟网络,使Pod间可通过IP直接通信。

1. 安装CNI插件(以Calico为例)

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

2. 验证Overlay网络功能

通过创建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中的应用

OverlayFS是Kubernetes默认的容器存储驱动,用于管理镜像层与容器可写层,特点是通过分层存储减少磁盘占用,提升启动速度。

1. OverlayFS作为容器运行时存储

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

2. OverlayFS作为持久卷(PV)

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存储路径,数据会持久化到节点本地。

注意事项

  1. CentOS版本兼容性:CentOS 7已停止官方支持,建议迁移至AlmaLinux或Rocky Linux,以获得更好的安全更新与Kubernetes兼容性。
  2. 网络插件选择:Flannel的VXLAN模式适合小型集群,Calico的IPIP模式适合跨子网通信,可根据场景选择。
  3. 性能优化:Overlay网络可能带来一定性能开销,可通过调整内核参数(如net.core.rmem_maxnet.core.wmem_max)或使用高速存储(SSD)缓解。

0
看了该问题的人还看了