Kamaji + CAPI + OpenStack POC 환경 구축 가이드

Spark·2025년 7월 4일
0

컨테이너기술

목록 보기
2/4

🔧 POC 환경 정보

VM 접속 정보

ssh ubuntu@<MANAGEMENT_CLUSTER_IP> -i <SSH_KEY_NAME>.pem

클러스터 노드 현황

ubuntu@k8s-master-01:~/yaml$ kubectl get nodes -o wide
노드명상태역할버전내부 IPOS컨테이너 런타임
k8s-master-01.cluster.localReadycontrol-planev1.33.210.0.0.xxxUbuntu 22.04.5 LTScontainerd://2.0.5
k8s-master-02.cluster.localReadycontrol-planev1.33.210.0.0.xxxUbuntu 22.04.5 LTScontainerd://2.0.5
k8s-master-03.cluster.localReadycontrol-planev1.33.210.0.0.xxxUbuntu 22.04.5 LTScontainerd://2.0.5
k8s-worker-01.cluster.localReadyworkerv1.33.210.0.0.xxxUbuntu 22.04.5 LTScontainerd://2.0.5
k8s-worker-02.cluster.localReadyworkerv1.33.210.0.0.xxxUbuntu 22.04.5 LTScontainerd://2.0.5

🛠️ 필수 컴포넌트 설치

1. CSI 프로비저너 설치

# Local Path Provisioner 설치
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.31/deploy/local-path-storage.yaml

2. Cert-Manager 설치

# Helm repo 추가 및 업데이트
helm repo add jetstack https://charts.jetstack.io
helm repo update

# Cert-Manager 설치
helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --set installCRDs=true

3. Kamaji 설치

# Kamaji 설치
helm install kamaji clastix/kamaji \
    --version 0.0.0+latest \
    --namespace kamaji-system \
    --create-namespace \
    --set image.tag=latest

🚀 CAPI + CAPO 설치

1. clusterctl 설치

# clusterctl 다운로드 및 설치
curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.10.3/clusterctl-linux-amd64 -o clusterctl
sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctl

2. OpenStack Resource Controller (ORC) 설치

kubectl apply -f https://github.com/k-orc/openstack-resource-controller/releases/latest/download/install.yaml

3. CAPI, CAPO, Kamaji Control Plane 설치

# 초기화 명령어
clusterctl init --infrastructure openstack --control-plane kamaji

설치 결과:

✅ Installing Provider="cluster-api" Version="v1.10.3" TargetNamespace="capi-system"
✅ Installing Provider="bootstrap-kubeadm" Version="v1.10.3" TargetNamespace="capi-kubeadm-bootstrap-system"
✅ Installing Provider="control-plane-kamaji" Version="v0.15.3" TargetNamespace="kamaji-system"
✅ Installing Provider="infrastructure-openstack" Version="v0.12.4" TargetNamespace="capo-system"

🎉 Your management cluster has been initialized successfully!

4. 설치 확인

# CAPO 컨트롤러 확인
kubectl -n capo-system get pod
# NAME                                      READY   STATUS    RESTARTS   AGE
# capo-controller-manager-96b4ddb6d-22kxw   1/1     Running   0          67s

# CAPI 컨트롤러 확인
kubectl -n capi-system get pod
# NAME                                       READY   STATUS    RESTARTS   AGE
# capi-controller-manager-5876c47b76-wvj7n   1/1     Running   0          74s

# Kubeadm Bootstrap 컨트롤러 확인
kubectl -n capi-kubeadm-bootstrap-system get pod
# NAME                                                         READY   STATUS    RESTARTS   AGE
# capi-kubeadm-bootstrap-controller-manager-64986ff879-7qh8x   1/1     Running   0          79s

# Kamaji CAPI 컨트롤러 확인
kubectl -n kamaji-system get pod | grep capi
# NAME                                              READY   STATUS    RESTARTS   AGE
# capi-kamaji-controller-manager-69b676c465-8nv8h   1/1     Running   0          11m

🌐 Tenant 클러스터 생성

1. 환경 설정 파일 준비

env.rc 다운로드

wget https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-openstack/master/templates/env.rc -O /tmp/env.rc
mv /tmp/env.rc ./

clouds.yaml 구성

clouds:
  <CLOUD_NAME>:
    auth:
      auth_url: https://<KEYSTONE_ENDPOINT>/v3
      user_id: "<USER_ID>"
      password: "<PASSWORD>"
      project_name: "<PROJECT_NAME>"
      project_domain_id: "default"
    verify: true
    region_name: "<REGION_NAME>"
    interface: "public"
    identity_api_version: 3
    # SDK 타임아웃 설정
    api_timeout: 60
    auth_timeout: 30

2. 환경 변수 설정

yq 설치 (필요한 경우)

sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/local/bin/yq
sudo chmod +x /usr/local/bin/yq

환경 변수 로드

source env.rc clouds.yaml <CLOUD_NAME>
source openstack-environment.sh

환경 변수 확인

env | grep OPENSTACK

설정된 환경 변수:

OPENSTACK_CLOUD=<CLOUD_NAME>
OPENSTACK_FAILURE_DOMAIN=<AVAILABILITY_ZONE>
OPENSTACK_IMAGE_NAME=<OS_IMAGE_NAME>
OPENSTACK_EXTERNAL_NETWORK_ID=<NETWORK_UUID>
OPENSTACK_CONTROL_PLANE_MACHINE_FLAVOR=<FLAVOR_NAME>
OPENSTACK_DNS_NAMESERVERS=<DNS_SERVER_IP>
OPENSTACK_NODE_MACHINE_FLAVOR=<WORKER_FLAVOR_NAME>
OPENSTACK_VOLUME_TYPE=<VOLUME_TYPE>
OPENSTACK_SSH_KEY_NAME=<SSH_KEY_NAME>
OPENSTACK_CLOUD_YAML_B64=<BASE64_ENCODED_CLOUD_CONFIG>
OPENSTACK_CLOUD_CACERT_B64=<BASE64_ENCODED_CA_CERT>
OPENSTACK_CLOUD_PROVIDER_CONF_B64=<BASE64_ENCODED_PROVIDER_CONFIG>

3. 클러스터 YAML 생성

clusterctl generate cluster <CLUSTER_NAME> \
  --kubernetes-version v1.33.0 \
  --control-plane-machine-count=1 \
  --worker-machine-count=1 \
  > <CLUSTER_NAME>.yaml

4. CAPI 클러스터 YAML 편집

Cluster 섹션 수정

# 기존
controlPlaneRef:
  apiVersion: controlplane.cluster.x-k8s.io/v1beta1
  kind: KubeadmControlPlane
  name: <CLUSTER_NAME>-control-plane

# 변경 후
controlPlaneRef:
  apiVersion: controlplane.cluster.x-k8s.io/v1beta1
  kind: KamajiControlPlane
  name: <CLUSTER_NAME>

KubeadmControlPlane을 KamajiControlPlane으로 변경

# 기존 KubeadmControlPlane 섹션 삭제하고 아래로 교체
---
kind: KamajiControlPlane
apiVersion: controlplane.cluster.x-k8s.io/v1alpha1
metadata:
  name: <CLUSTER_NAME>
  namespace: default
spec:
  apiServer:
    extraArgs:
      - --cloud-provider=external
  controllerManager:
    extraArgs:
      - --cloud-provider=external
  dataStoreName: default
  addons:
    coreDNS: {}
    kubeProxy: {}
    konnectivity: {}
  kubelet:
    cgroupfs: systemd
    preferredAddressTypes:
      - InternalIP
  network:
    serviceType: LoadBalancer
  version: v1.33.0

MachineTemplate 이름 변경

# 기존
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: OpenStackMachineTemplate
metadata:
  name: <CLUSTER_NAME>-control-plane
  namespace: default

# 변경 후
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: OpenStackMachineTemplate
metadata:
  name: <CLUSTER_NAME>
  namespace: default

5. Tenant 클러스터 배포

kubectl apply -f <CLUSTER_NAME>.yaml

⚠️ 현재 이슈

네트워크 연결 문제

# Kamaji 클러스터에서 OpenStack API 접근 불가
ubuntu@k8s-master-01:~/yaml$ curl https://<KEYSTONE_ENDPOINT>/v3 -k -vvv
*   Trying <OPENSTACK_API_IP>:443...
^C  # 연결 실패로 중단

문제점: 방화벽 설정으로 인해 Kamaji 컨테이너에서 OpenStack API 엔드포인트로 접근이 차단됨

해결 방안

  1. 방화벽 규칙 확인 및 수정
  2. 네트워크 정책 검토
  3. OpenStack 엔드포인트 접근성 테스트
  4. Kamaji 네트워크 설정 검토

🔧 트러블슈팅 가이드

1. 네트워크 연결성 테스트

# OpenStack API 엔드포인트 접근 테스트
curl -k https://<KEYSTONE_ENDPOINT>/v3

# DNS 해상도 테스트
nslookup <KEYSTONE_ENDPOINT>

# 포트 연결 테스트
telnet <OPENSTACK_API_IP> 443

2. Kamaji 로그 확인

# Kamaji 컨트롤러 로그
kubectl logs -n kamaji-system -l app.kubernetes.io/name=kamaji

# CAPI Kamaji 컨트롤러 로그
kubectl logs -n kamaji-system -l cluster.x-k8s.io/provider=control-plane-kamaji

3. 클러스터 상태 확인

# 클러스터 리소스 확인
kubectl get clusters,kamajicontrolplanes,openstackclusters

# 상세 상태 확인
kubectl describe cluster <CLUSTER_NAME>
kubectl describe kamajicontrolplane <CLUSTER_NAME>

📝 다음 단계

  1. 네트워크 문제 해결 - 방화벽 및 네트워크 정책 조정
  2. OpenStack 연결성 확보 - API 엔드포인트 접근 가능하도록 설정
  3. Tenant 클러스터 배포 완료 - 문제 해결 후 클러스터 생성 재시도
  4. 워크로드 테스트 - 정상 작동 확인을 위한 샘플 애플리케이션 배포
profile
Hello world

0개의 댓글