Kubernetes에서 Rook-Ceph를 설치하면 보통 하나의 네트워크만 사용합니다. 하지만 OSD 간 통신량이 많아지면 Public 트래픽과 섞여 성능이 떨어질 수 있습니다. 이럴 땐 Cluster Network를 따로 만들어서 Ceph 내부 트래픽만 분리해주는 게 좋습니다.
이 글에서는 Helm 차트로 Rook-Ceph을 배포할 때, Multus와 macvlan을 이용해 Cluster Network를 분리하는 방법을 쉽게 설명합니다.
이 글을 작성하게 된 이유는 기존 환경에서 osd간 내부 통신과 클라이언트 접근이 많아지면서 ceph의 cluster가 정상적으로 유지되지 못해 이런 방법을 진행해보도록 결정 했다.
💡 왜 네트워크 분리가 필요할까?
- Public Network: 클라이언트 접근용
- Cluster Network: OSD 간 내부 통신
두 네트워크를 분리하면, 데이터 충돌이 줄고, 스토리지 성능이 더 안정적입니다. 특히 노드 수가 많아지거나 대용량 데이터 처리 환경이라면 꼭 고려할 부분입니다.
🔧 구성 흐름
- Multus CNI 설치
- macvlan 기반 추가 네트워크 정의
- Helm용 values.yaml 설정 수정
- 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.provider를 multus로 설정하고, 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으로 배포하면 관리도 훨씬 편해지고, 이후 설정 변경도 수월해집니다.
운영 환경이라면 적용 전 백업과 테스트를 꼭 해보는 걸 추천합니다.