4.1. OPENMARU COP CLI
OPENMARU COP는 표준 **kubectl**과 helm CLI를 사용합니다. 별도의 전용 CLI 없이 순수 Kubernetes 생태계 도구를 그대로 사용할 수 있는 것이 특징입니다.
kubeconfig 설정
kubectl/helm은 클러스터 접속 정보가 담긴 kubeconfig 파일을 통해 인증합니다. Master 노드에는 클러스터 설치 시 기본 kubeconfig가 생성되어 있습니다.
# Master 노드 기본 kubeconfig 위치(RKE2)
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
# 또는 설치 스크립트가 별도로 배치한 위치
export KUBECONFIG=/root/.kube/config
# 접속 확인
kubectl cluster-info
kubectl get nodes
원격지(개발자 PC 등)에서 접속하려면 Master 노드의 kubeconfig 파일을 로컬로 복사한 뒤 server 주소를 실 제 API 서버 도메인(https://api.{sub_domain}.{domain}.{TLD}:6443)으로 맞춰줘야 합니다. 지속적으로 사용하려면 ~/.bashrc 등에 export KUBECONFIG=... 구문을 추가해 두는 것을 권장합니다.
ℹ️ 참고: OPENMARU COP Console에 여러 클러스터가 등록되어 있는 경우, 클러스터별 kubeconfig가 별도로 존재합니다. 대상 클러스터를 반드시 확인한 후 명령을 실행하십시오.
Helm 기본 명령어
# 저장소(Repository) 등록/갱신
helm repo add openmaru http://chartmuseum.{sub_domain}.{domain}.{TLD}:8181
helm repo update
# Chart 검색
helm search repo openmaru
# 설치
helm install <release> openmaru/<chart> -n <namespace> --create-namespace -f values.yaml
# 업그레이드 / 롤백
helm upgrade <release> openmaru/<chart> -n <namespace> -f values.yaml
helm rollback <release> <revision> -n <namespace>
# 조회
helm list -A
helm status <release> -n <namespace>
helm history <release> -n <namespace>
# 삭제
helm uninstall <release> -n <namespace>
⚠️ 주의: ArgoCD(GitOps)가 관리하는 Release에는
helm upgrade/helm rollback을 직접 실행하지 마십시오. auto-sync/self-heal이 설정된 경우 Git 저장소 기준으로 즉시 원복되어 변경이 무효화됩니다. 이 경우 Git 매니페스트를 수정 후argocd app sync로 반영하거나argocd app rollback을 사용해야 합니다.
Pod 로그 보는 방법
# 기본 로그 조회
kubectl logs -n <namespace> <pod-name>
# 실시간 스트리밍(follow)
kubectl logs -n <namespace> <pod-name> -f
# 이전(재시작 전) 컨테이너 로그 조회
kubectl logs -n <namespace> <pod-name> --previous
# 최근 100줄만 조회
kubectl logs -n <namespace> <pod-name> --tail=100
# 최근 1시간 로그만 조회
kubectl logs -n <namespace> <pod-name> --since=1h
# Pod 내 특정 컨테이너 로그 조회(다중 컨테이너 Pod)
kubectl logs -n <namespace> <pod-name> -c <container-name>
Pod 내 원격 접속
# 대화형 셸 접속
kubectl exec -it <pod-name> -n <namespace> -- bash
# bash가 없는 이미지의 경우
kubectl exec -it <pod-name> -n <namespace> -- sh
# 다중 컨테이너 Pod에서 특정 컨테이너 지정
kubectl exec -it <pod-name> -n <namespace> -c <container-name> -- bash
ℹ️ 참고: OPENMARU COP Console에서도 Pod 상세 화면의 Terminal 버튼을 통해 동일한 기능을 웹 브라우저에서 바로 사용할 수 있습니다.
비정상 Pod 삭제
# 특정 Pod 삭제(ReplicaSet/Deployment가 있으면 자동 재생성됨)
kubectl delete pod <pod-name> -n <namespace>
# 정상 종료 없이 즉시 강제 삭제(최후 수단)
kubectl delete pod <pod-name> -n <namespace> --grace-period=0 --force
# Running이 아닌 모든 Pod 조회 후 개별 판단
kubectl get pods -A | grep -v Running
⚠️ 주의:
--force옵션은 Pod가 정상적으로 정리되지 않은 채 즉시 삭제되므로, 데이터 정합성에 영향을 줄 수 있는 워크로드에는 신중하게 사용해야 합니다.
Running 중인 Pod의 Node 확인
kubectl get pod <pod-name> -n <namespace> -o wide
NODE 컬럼에서 해당 Pod가 실행 중인 노드를 확인할 수 있습니다.
Node별 Pod 정보 확인
# 특정 노드에서 실행 중인 Pod 목록
kubectl get pods -A -o wide --field-selector spec.nodeName=<node-name>
# 노드 상세 정보(할당 리소스, Conditions 등)
kubectl describe node <node-name>
# 전체 노드 리소스 사용량
kubectl top nodes
애플리케이션 SSL 적용 방법
애플리케이션에 TLS를 적용하려면 Ingress에 TLS Secret을 연결합니다.
# cert-manager를 통해 자동 발급받은 인증서는 자동으로 Secret 생성됨
# 수동으로 인증서/키를 등록하는 경우:
kubectl create secret tls my-app-tls \
--cert=my-app.crt --key=my-app.key \
-n <namespace>
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
namespace: my-app
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts: ["my-app.{domain}"]
secretName: my-app-tls
rules:
- host: "my-app.{domain}"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
number: 8080
cert-manager를 사용하는 경우 ClusterIssuer(예: Let's Encrypt, 사내 CA)를 미리 구성해두면 Ingress 생성만으로 인증서가 자동 발급/갱신됩니다.
Console에서 확인: OPENMARU COP Console의 인증서 관리 메뉴에서 발급된 Certificate 목록과 상태, ClusterIssuer/Issuer 설정을 조회할 수 있습니다.

Pod 내 파일/폴더를 로컬로 가져오기
kubectl cp <namespace>/<pod-name>:/path/in/container ./local-path
# 특정 컨테이너 지정
kubectl cp <namespace>/<pod-name>:/path/in/container ./local-path -c <container-name>