본문으로 건너뛰기

운영 관리

운영 개요 탭

서비스를 배포했다면, 이제 운영이 시작됩니다. KIOPS의 운영 모달(Operate Modal)을 사용하면 배포된 서비스의 Pod와 Container를 실시간으로 관리하고 모니터링할 수 있습니다.

이 가이드는 배포 이후 "이제 뭘 어디서 봐야 하지?" 라는 질문에 답하기 위해 운영 모달의 탭을 한 페이지에 정리합니다. 탭 개수는 런타임 종류와 권한에 따라 가변이며(K8s 최대 7개 / Docker·Podman 최대 6개), 로그/명령 실행/스케일링 등 매일 쓰는 동작을 한곳에서 처리하도록 설계되어 있습니다.

왜 운영 관리가 중요할까요?

배포는 시작일 뿐입니다. 실제 서비스 운영에서는 로그 확인, 리소스 모니터링, 문제 해결, 스케일링 등 다양한 작업이 필요합니다. KIOPS의 운영 모달은 이 모든 작업을 한 곳에서 처리할 수 있도록 도와줍니다.

시작하기 전에: 알아둘 용어

운영 모달에서 자주 만나는 용어를 짧게 정리합니다. 본문에서 처음 등장할 때 이 사전을 참고하세요.

  • 운영 모달(Operate Modal): 서비스 한 개를 깊이 다루는 화면입니다 (개요/파드(또는 컨테이너) 목록/배포 관리/로그 조회/명령 실행/도메인 설정, K8s는 설정/시크릿 탭 추가). 탭 개수는 런타임과 권한에 따라 가변입니다.
  • Pod: K8s에서 컨테이너 한두 개를 묶어 실행하는 최소 단위입니다. (한 집에 사는 가족 단위 같은 개념)
  • 컨테이너(Container): Docker/Podman에서 실제 앱이 도는 가장 작은 단위입니다.
  • HPA(Horizontal Pod Autoscaler): CPU 사용률에 따라 Pod 수를 자동으로 늘리고 줄이는 K8s 기능입니다. (KIOPS는 CPU 기준만 지원, 메모리 기반 X)
  • 명령 실행(단발성 / 실시간): 단발성은 한 번 실행 후 결과만 받는 모드(30~60초 타임아웃), 실시간(streaming)은 최대 10분 동안 결과를 흘려 보여주는 모드입니다.
  • 로그 조회: Pod/컨테이너의 stdout을 한 번 받아서 보여주는 동작입니다 (실시간 스트리밍은 명령 실행 탭의 실시간 모드를 사용).
  • 연결 방식(Auto / VPN / 직접 SSH): 운영 모달이 대상 인프라까지 가는 경로 선택지입니다.

운영 기능 개요

flowchart TB
A[운영 모달] --> B[개요]
A --> C[파드 목록/컨테이너 목록]
A --> D[배포 관리]
A --> H[설정/시크릿 - K8s 전용]
A --> E[로그 조회 - 권한 필요]
A --> F[명령 실행 - 권한 필요]
A --> G[도메인 설정]

H --> H1[ConfigMap/Secret 키-값 관리]

C --> C1[목록 조회]
C --> C2[상태 확인]
C --> C3[삭제/재시작]

D --> D1[수동 스케일]
D --> D2[HPA 관리]
D --> D3[롤백]

E --> E1[Pod/컨테이너 로그]

F --> F1[단발성 명령]
F --> F2[실시간 모드]

런타임별 지원 기능

Kubernetes와 Docker/Podman 환경에서 사용할 수 있는 기능이 다릅니다.

  • Pod/Container 관리: Kubernetes에서는 Pod 목록 조회, 상태 확인, 재시작(삭제 방식), Pending Pod 일괄 삭제를 지원합니다. Docker/Podman에서는 컨테이너 목록 조회와 재시작 액션만 제공합니다.
  • 스케일링: Kubernetes에서는 Deployment 수동 스케일과 HPA(CPU 기반)를 지원합니다. Docker/Podman에서는 지원하지 않습니다.
  • 로그 조회: Kubernetes에서는 Pod 로그를, Docker/Podman에서는 컨테이너 로그를 조회합니다.
  • 명령 실행: Kubernetes 모드는 kubectl 명령 전체를 입력합니다. Docker/Podman 모드는 컨테이너 선택이 선택 사항이며, 미선택 시 호스트에서 실행됩니다.
  • 리소스 모니터링: Kubernetes에서는 Metrics Server와 연동합니다. Docker/Podman에서는 30초 주기 자동 갱신과 CPU/메모리/네트워크 통계를 제공합니다.
  • 도메인 관리: Kubernetes에서는 Ingress를, Docker/Podman에서는 서비스 도메인을 관리합니다.
  • ConfigMap/Secret 관리(K8s 전용): 운영 모달의 설정/시크릿 탭에서 네임스페이스 단위로 ConfigMap과 Secret을 키-값으로 편집합니다. 관리 권한이 필요합니다.
  • DAST 스캔: Kubernetes와 Docker/Podman 모두 지원하며, 보안 분석 페이지에서 수행합니다.
Kubernetes vs Docker 차이점

Kubernetes는 자동 스케일링(HPA)과 같은 고급 기능을 제공하지만, Docker/Podman은 단일 호스트에서 간단하게 Container를 관리하는 데 적합합니다. 프로젝트 요구사항에 맞는 런타임을 선택하세요.


운영 모달 접근

운영 모달은 서비스 관리의 핵심 도구입니다. 아래 단계를 따라 쉽게 접근할 수 있습니다.

열기 방법

  1. [서비스 관리] 페이지로 이동합니다.
  2. 관리할 서비스의 행에서 Operate 단계를 클릭합니다.
  3. 운영 모달이 열립니다.
빠른 접근

자주 사용하는 서비스는 즐겨찾기에 추가하면 더 빠르게 접근할 수 있습니다.

모달 탭 구성

운영 모달 탭

운영 모달의 탭 개수는 런타임 종류와 권한에 따라 가변입니다. 런타임이 Kubernetes인지 Docker/Podman인지에 따라 2번째 탭의 이름(파드 목록 / 컨테이너 목록)과 일부 기능이 달라집니다 (용어 사전 참고). 로그 조회명령 실행 탭은 해당 런타임의 로그·명령 실행 권한이 있는 사용자에게만 표시되므로, 권한이 없으면 탭이 줄어들 수 있습니다.

Kubernetes 서비스

  • 개요: 서비스 기본 정보, 배포 상태 요약
  • 파드 목록: Pod 목록, 상태, 수동 스케일, HPA 관리, Pending 일괄 삭제
  • 배포 관리: Deployment 설정, 롤백, 이미지 변경
  • 설정/시크릿: 네임스페이스 단위 ConfigMap·Secret 키-값 관리 (K8s 전용, 관리 권한 필요)
  • 로그 조회: Pod 로그 조회 (로그 권한이 있을 때 표시)
  • 명령 실행: kubectl 명령 실행 (단발성/실시간 모드, 명령 실행 권한이 있을 때 표시)
  • 도메인 설정: Ingress 도메인 관리

Docker/Podman 서비스

  • 개요: 서비스 기본 정보
  • 컨테이너 목록: 컨테이너 목록, 재시작 액션, 자동 갱신 토글, CPU/메모리/네트워크 통계
  • 배포 관리: 컨테이너 재배포, 이미지 업데이트
  • 로그 조회: 컨테이너 로그 조회 (로그 권한이 있을 때 표시)
  • 명령 실행: docker/podman 명령 실행 (컨테이너 선택은 선택 사항, 명령 실행 권한이 있을 때 표시)
  • 도메인 설정: 서비스 도메인 관리

연결 방식

운영 모달은 대상 인프라까지 접근하기 위해 세 가지 연결 방식을 지원합니다.

  • 자동: 등록된 우선순위에 따라 연결 방식을 자동 선택합니다.
  • VPN: 등록된 VPN 프로파일을 사용해 접근합니다.
  • SSH 직접: 직접 SSH로 접근합니다.

운영 모달 상단에는 현재 연결 방식이 상태 태그(VPN 경유 / SSH 직접 접속 / 자동)로 표시되고, 그 옆의 접속 방식 변경 버튼을 누르면 연결 방식 선택 모달이 열립니다. 운영 모달에 처음 진입할 때 이 선택 모달이 한 번 자동으로 표시됩니다.

자주 하는 실수: 운영 모달의 탭 위치 혼동

"파드 목록"과 "배포 관리"가 다른 탭이라는 사실을 자주 놓칩니다. 수동 스케일/HPA는 파드 목록 탭, 롤백/이미지 변경은 배포 관리 탭입니다. Docker/Podman은 동일 위치에 "컨테이너 목록" 탭이 있습니다.


운영 시나리오 가이드

각 상황에 맞는 가이드를 선택하여 따라해 보세요.

기본 운영

일상적인 서비스 운영에 필요한 핵심 기능들입니다.

  • 로그 모니터링: Pod/컨테이너 로그를 조회해 문제를 빠르게 파악합니다.
  • Container 관리: Pod/Container 제어 및 스케일링으로 서비스를 안정적으로 운영합니다.
  • 원격 명령 실행: kubectl/docker 명령을 실행해 심층적인 디버깅을 수행합니다.

클러스터 관리

Kubernetes 클러스터의 고급 관리 기능입니다. 아래 기능은 [런타임 환경] 페이지에서 K8s 클러스터를 선택하여 접근합니다.

  • 메트릭 서버 설치: HPA와 리소스 모니터링의 기반이 되는 메트릭 서버를 설치합니다.
  • 모니터링 확장: cAdvisor 또는 Prometheus Stack으로 실시간 모니터링을 구성합니다.
  • K8s RBAC 관리: ServiceAccount와 네임스페이스 기반으로 팀별 권한을 관리합니다.
  • K8s 인증서 갱신: 클러스터 인증서 만료를 사전에 확인하고 갱신합니다.
  • HPA 자동 스케일링: 트래픽 변화에 따라 Pod를 자동으로 확장/축소합니다.

주요 기능 상세

Pod/컨테이너 상태 관리

Pod 상태 (Kubernetes)

UI에서는 running 상태는 파란색, pending 상태는 주황색, failed/error/crashloopbackoff/imagepullbackoff/errimagepull 상태는 빨간색, 그 외 상태는 회색으로 표시됩니다.

  • Running: 정상 실행 중입니다. 대응이 필요 없습니다.
  • Pending: 스케줄링이나 이미지 풀링 중입니다. 파드 목록의 expand 행에서 이벤트를 확인하세요.
  • Succeeded: Job이 완료되었습니다. 대응이 필요 없습니다.
  • Failed / CrashLoopBackOff / ImagePullBackOff / Error: 실행이 실패했습니다. 빨간색으로 표시되며 즉시 대응이 필요합니다. (참고: 파드 목록의 expand 행은 현재 Pending 상태에서만 펼칠 수 있습니다. 이들 상태는 로그·이벤트를 직접 확인한 뒤 필요 시 강제 삭제하세요.)
  • Unknown: 상태를 알 수 없습니다. 노드 상태를 확인하세요.
  • Terminating: 종료 중입니다.

컨테이너 상태 (Docker/Podman)

운영 모달에서 별도 액션 처리 대상이 되는 상태는 runningexited입니다. pausedcreated 상태는 UI에서 별도 액션을 제공하지 않습니다.

  • running: 실행 중입니다. UI에서는 up이 포함된 상태를 실행 중으로 판정합니다.
  • exited: 종료된 상태입니다.
  • paused / created: UI에서 별도 액션을 제공하지 않습니다.

파드 목록 expand 행

파드 목록의 expand 행은 현재 Pending 상태의 Pod에서만 펼칠 수 있습니다(원인 보기 버튼). 펼친 행에서는 다음 정보를 확인할 수 있습니다.

  • 원인 분석: Pending 상태에 대한 가능한 원인(리소스 부족, nodeSelector/affinity, PVC 바인딩, Taints/Tolerations 등)을 안내합니다.
  • 이벤트: Pod 관련 K8s 이벤트 목록
  • 강제 삭제: 일반 삭제로 종료되지 않는 Pod에 대해 강제 삭제를 수행합니다.

스케일링 (Kubernetes)

수동 스케일

  1. 파드 목록 탭으로 이동합니다.
  2. 대상 Deployment를 선택합니다.
  3. Pod 개수를 입력하고 적용합니다.

다음 두 가지 작업을 수행할 수 있습니다.

  • Pod 개수 적용: 입력한 개수로 Deployment의 replicas를 설정합니다.
  • 모든 Pod 제거: replicas를 0으로 설정해 모든 Pod를 제거합니다.

HPA가 활성화되어 있는 동안에는 수동 스케일링이 잠겨 있습니다. 백엔드에서도 kubectl scale 호출을 차단합니다.

HPA (Horizontal Pod Autoscaler)

실제 KIOPS에서 지원하는 HPA 설정 항목은 다음 세 가지입니다.

  • minReplicas: 최소 Pod 수 (기본값 1)
  • maxReplicas: 최대 Pod 수 (기본값 10)
  • targetCPU(%): CPU 사용률 목표 (기본값 80, 일반적인 시작값으로 70~80% 권장)

내부적으로는 kubectl autoscale --cpu-percent 명령으로 HPA를 생성합니다. 자세한 흐름은 HPA 자동 스케일링을 참고하세요.

자주 하는 실수: HPA에 메모리 기반 목표 설정 시도

KIOPS 운영 모달의 HPA는 CPU 사용률만 지원합니다. 메모리/사용자 정의 메트릭 기반 자동 확장은 제공하지 않습니다. 메모리 기반 확장이 꼭 필요하면 클러스터에서 직접 HPA YAML을 적용해야 합니다.

Metrics Server 필요

HPA 사용을 위해서는 클러스터에 Metrics Server가 설치되어 있어야 합니다. 파드 목록 탭에서 Metrics Server 상태를 확인할 수 있고, 미설치 시 설치/재설치 버튼이 노출됩니다. 또한 이벤트와 Pod 로그를 통한 진단 도구와 "이미지 캐시 정리" 액션을 제공합니다.

로그 조회

K8s/Docker/Podman 환경의 로그 조회 UI는 동일한 구조를 사용합니다.

  • 대상 선택: Pod 또는 컨테이너 드롭다운
  • 로그 조회 버튼: 선택한 대상의 로그를 가져옵니다.
  • 초기화 버튼: 로그 출력 영역을 비웁니다.

라인 수 지정, Follow(실시간 스트리밍), Timestamps, Previous 옵션은 제공하지 않습니다. 실시간 스트리밍이 필요하면 명령 실행 탭의 실시간 모드를 사용하세요.

명령 실행 (Execute)

명령 실행 탭은 단발성 모드와 실시간(streaming) 모드 두 가지를 제공합니다.

  • K8s 모드: Pod 드롭다운을 사용하지 않고 kubectl 명령을 전체 입력합니다. namespace 외부 접근을 차단하기 위해 -A, --all-namespaces 옵션은 사용할 수 없습니다.
  • Docker/Podman 모드: 컨테이너 선택은 선택 사항입니다. 미선택 시 호스트에서 실행되고, 선택하면 해당 컨테이너에 대해 exec이 수행됩니다.

모드별 제한

  • 단발성 모드: logs/events 명령은 60초, 그 외 명령은 30초 타임아웃이 적용되며, -f/-w/exec -it/port-forward 옵션은 차단됩니다.
  • 실시간(streaming) 모드: 세션 최대 10분, 출력 최대 5MB, 사용자당 동시 세션 3개, exec -it/port-forward/attach 차단
자주 하는 실수: 대화형 셸(exec -it) 시도

운영 안전을 위해 -it 플래그가 포함된 명령은 단발성/실시간 모두에서 차단됩니다. 컨테이너 안에서 일회성 명령을 돌리고 싶다면 kubectl exec <pod> -- <명령> 또는 docker exec <컨테이너> <명령> 처럼 -it 없이 입력하세요.

자주 사용하는 명령

# 프로세스 확인
ps aux

# 메모리 확인
free -m

# 디스크 사용량
df -h

# 네트워크 연결 확인
netstat -tlnp

권한 및 보안

운영 기능은 민감한 작업을 포함하므로 적절한 권한 관리가 중요합니다.

권한 안내

운영 기능에 접근할 수 없다면 기관 관리자에게 권한을 요청하세요.

감사 로그

보안과 추적성을 위해 모든 운영 작업은 자동으로 감사 로그에 기록됩니다.

  • 명령 실행 이력: 누가 언제 어떤 명령을 실행했는지 추적
  • 스케일 변경 이력: Pod 수 변경 기록
  • Pod/Container 삭제 이력: 삭제된 리소스 추적
  • 배포 변경 이력: 이미지, 설정 변경 기록
왜 감사 로그가 중요할까요?

문제가 발생했을 때 누가 어떤 작업을 했는지 추적할 수 있어, 원인 분석과 책임 소재 파악에 도움이 됩니다.


문제 해결

공통 문제

  • Pod 목록 표시 안됨: 권한이 부족하거나 네임스페이스에 접근할 수 없습니다. Kubeconfig 권한을 확인하세요.
  • 로그 조회 실패: Pod가 종료되었거나 네트워크 문제가 있습니다. 파드 목록의 expand 행에서 상태와 이벤트를 확인하세요.
  • 명령 실행 실패: 차단된 옵션(-it, port-forward 등)이 포함되었거나 타임아웃이 발생했을 수 있습니다. 단발성/실시간 모드 제한을 확인하세요.
  • HPA 생성 실패: Metrics Server가 설치되어 있지 않습니다. 파드 목록 탭에서 설치를 진행하세요.

Kubernetes 관련

  • Pending 상태 지속: 리소스 부족 또는 노드 문제입니다. 파드 목록 expand 행에서 이벤트를 확인하세요.
  • CrashLoopBackOff: 애플리케이션 오류입니다. 로그를 확인하고 설정을 검토하세요.
  • ImagePullBackOff: 이미지 풀에 실패했습니다. 이미지 경로와 Registry 인증을 확인하거나 "이미지 캐시 정리"를 시도하세요.

Docker 관련

  • 컨테이너 시작 안됨: 포트 충돌 또는 볼륨 문제입니다. 로그를 확인하세요.
  • 로그 없음: 컨테이너가 stdout으로 출력하지 않습니다. 애플리케이션 로그 설정을 확인하세요.

베스트 프랙티스

안전하고 효율적인 운영을 위한 권장 사항입니다.

운영 안전성

Production 환경 주의사항

Production 환경에서 작업할 때는 항상 신중하게 행동하세요.

  • 명령 실행 주의: Production에서 데이터 변경 명령(rm, mv 등) 실행 전 반드시 확인합니다.
  • 모든 Pod 제거 사전 고지: 서비스 중단이 발생하므로 관련 팀에 미리 공지합니다.
  • 로그 정기 확인: 에러 패턴을 조기에 발견하면 큰 문제를 예방할 수 있습니다.
  • HPA 설정 검토: 급격한 스케일 변경을 방지하기 위해 적절한 min/max 값을 설정합니다.

문제 대응 순서

문제가 발생했을 때 체계적으로 대응하면 빠르게 해결할 수 있습니다.

  1. 개요 확인: 먼저 전체 상태를 파악합니다.
  2. Pod 상태 확인: 파드 목록의 상태와 expand 행의 이벤트를 확인합니다.
  3. 로그 확인: 에러 메시지를 분석하여 원인을 파악합니다.
  4. 명령 실행: 필요시 env, process 등을 확인하여 추가 디버깅합니다.
  5. 필요시 재시작: Pod를 삭제하면 Deployment가 자동으로 새 Pod를 생성합니다.
체크리스트 활용

위 순서를 체크리스트로 만들어 두면 긴급 상황에서도 침착하게 대응할 수 있습니다.


다음에 할 일

운영 모달의 구성을 파악했다면, 다음 순서로 핵심 기능부터 손에 익혀 두는 것을 권장합니다.

  1. 로그 조회 - 문제가 의심될 때 가장 먼저 보게 되는 화면입니다.
  2. 명령 실행 - 단발성/실시간 모드와 차단 옵션을 미리 익혀두면 장애 대응이 빨라집니다.
  3. HPA 자동 확장 - 트래픽 변동이 있는 서비스라면 minReplicas/maxReplicas/targetCPU 세 값을 설계해 두세요.
DAST는 [보안 분석] 페이지로 이동했습니다

동적 보안 점검(DAST)은 더 이상 운영 모달의 탭이 아니며, [보안 분석] 페이지에서 수행합니다. 외부에 노출된 서비스는 DAST 스캔을 정기 점검 일정에 포함하세요.

관련 가이드