Rook-Ceph Cluster Network 분리 가이드

2–3분

Kubernetes에서 Rook-Ceph를 설치하면 보통 하나의 네트워크만 사용합니다. 하지만 OSD 간 통신량이 많아지면 Public 트래픽과 섞여 성능이 떨어질 수 있습니다. 이럴 땐 Cluster Network를 따로 만들어서 Ceph 내부 트래픽만 분리해주는 게 좋습니다.

이 글에서는 Helm 차트로 Rook-Ceph을 배포할 때, Multusmacvlan을 이용해 Cluster Network를 분리하는 방법을 쉽게 설명합니다.

이 글을 작성하게 된 이유는 기존 환경에서 osd간 내부 통신과 클라이언트 접근이 많아지면서 ceph의 cluster가 정상적으로 유지되지 못해 이런 방법을 진행해보도록 결정 했다.


💡 왜 네트워크 분리가 필요할까?

  • Public Network: 클라이언트 접근용
  • Cluster Network: OSD 간 내부 통신

두 네트워크를 분리하면, 데이터 충돌이 줄고, 스토리지 성능이 더 안정적입니다. 특히 노드 수가 많아지거나 대용량 데이터 처리 환경이라면 꼭 고려할 부분입니다.


🔧 구성 흐름

  1. Multus CNI 설치
  2. macvlan 기반 추가 네트워크 정의
  3. Helm용 values.yaml 설정 수정
  4. Helm으로 Rook-Ceph 설치 또는 업데이트

Multus

  • multus 기존 플러그인(flannel)과 연동하여 CNI 사용이 가능
  • Pod에 다중 네트워크를 부여하여 사용 가능

1. Multus 설치

먼저 Multus를 설치합니다. Multus는 Pod에 여러 네트워크를 붙일 수 있도록 해주는 CNI 플러그인입니다.

kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset.yml

Multus는 기존 CNI(flannel 등)를 유지하면서도 추가 네트워크를 붙일 수 있게 해줍니다.


2. macvlan 네트워크 정의

Multus에서 사용할 실제 네트워크를 NetworkAttachmentDefinition 리소스로 만들어야 합니다. 아래는 예시입니다:

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: cluster-conf
  namespace: rook-ceph
spec:
  config: |
    {
      "cniVersion": "0.3.1",
      "type": "macvlan",
      "mode": "bridge",
      "master": "ens19",  // 실제 물리 NIC 이름 (환경에 맞게 수정)
      "mtu": 1500,
      "ipam": {
        "type": "host-local",
        "subnet": "172.16.20.0/24",
        "rangeStart": "172.16.20.100",
        "rangeEnd": "172.16.20.200"
      }
    }


NetworkAttachmentDefinition 배포

kubectl apply -f cluster-network.yaml


3. Helm values.yaml 설정 수정

Rook-Ceph Helm Chart의 values.yaml에 아래 항목을 추가합니다. 핵심은 network.providermultus로 설정하고, selectors.cluster에 위에서 만든 네트워크 이름을 넣는 것입니다.


cephClusterSpec: storage: useAllDevices: true useAllNodes: true network: provider: multus selectors: cluster: cluster-conf ipFamily: “IPv4” dualStack: false

이 설정은 OSD 간 통신을 cluster-conf 네트워크로만 하겠다는 의미입니다.


4. Helm으로 Rook-Ceph 배포

Helm을 통해 직접 배포하거나 기존 설치를 업데이트합니다.

새로 설치하는 경우:

helm repo add rook-release <https://charts.rook.io/release>
helm repo update

helm install rook-ceph rook-release/rook-ceph \\
  --namespace rook-ceph --create-namespace \\
  -f values.yaml

기존에 설치된 경우 업데이트:

helm upgrade rook-ceph rook-release/rook-ceph \\
  --namespace rook-ceph \\
  -f values.yaml


✅ 적용 확인

적용이 잘 되었는지 확인하려면 Ceph toolbox에 접속해서 아래 명령으로 확인합니다:

ceph config get mon.* cluster_network


⚠️ 주의사항

  • OSD 재시작 필요: 네트워크 설정이 바뀌면 OSD Pod들이 재시작되며 IP가 바뀔 수 있습니다. 미리 서비스 중지하고 작업하는 게 안전합니다.
  • 네트워크 충돌 주의: macvlan으로 만든 대역과 기존 네트워크가 겹치면 안 됩니다.
  • 물리 NIC 이름 확인 필수: master: ens19 부분은 환경에 따라 다르니 꼭 실제 NIC 이름 확인 후 수정하세요.

🔚 마무리

Multus와 macvlan을 사용하면 Rook-Ceph에 별도의 Cluster Network를 붙여 내부 통신을 분리할 수 있습니다. Helm으로 배포하면 관리도 훨씬 편해지고, 이후 설정 변경도 수월해집니다.

운영 환경이라면 적용 전 백업과 테스트를 꼭 해보는 걸 추천합니다.