반응형
이전 글에서 Podman으로 컨테이너 이미지를 생성하고 Kubernetes에 배포하는 과정을 다뤘습니다. 하지만 매번 터미널에서 kubectl 명령어를 입력하는 것이 번거로웠습니다.
그래서 웹 인터페이스로 K8s 클러스터를 관리할 수 있는 자동화 시스템을 개발하였습니다.
우선 어떤 부분들에 아쉬움을 느껴서 웹 페이지를 생성하게 되었는지 알려드리겠습니다.
그리고 다음부터 'Kubernetes Pod 자동화 웹 페이지 구성'에 관하여 단계별로 글을 작성해보겠습니다!

1. 기존 방식의 문제점
🔹 터미널 기반 관리의 한계
매번 반복되는 작업들
- SSH로 마스터 노드 접속
- kubectl 명령어 직접 입력
- YAML 파일 vi 에디터로 수정
- 배포 상태 확인을 위한 여러 명령어 실행
협업 시 발생하는 문제들
- 팀원마다 다른 kubectl 명령어 숙련도
- 터미널 접근 권한 관리의 복잡성
- 실시간 클러스터 상태 공유 어려움
- 배포 과정에서 발생하는 휴먼 에러
🔹 구체적인 불편 사례
# 매번 이런 과정을 반복해야 했습니다
ssh root@192.168.0.10
kubectl get pods -o wide
kubectl get deployments
kubectl get services
vi myapp-deployment.yaml # 복잡한 YAML 편집
kubectl apply -f myapp-deployment.yaml
kubectl get pods --watch # 배포 상태 실시간 모니터링
특히 YAML 파일에서 특수문자가 포함된 명령어를 편집할 때 문제가 자주 발생했습니다:
command: ["/bin/bash", "-c", "/app/procstart.sh && tail -f /dev/null"]
2. 해결 목표 설정
🔹 핵심 목표
1. 웹 기반 클러스터 관리
- 브라우저만으로 K8s 리소스 관리
- 직관적인 UI/UX 제공
- 실시간 상태 모니터링
2. 배포 프로세스 자동화
- 원클릭 배포 시스템
- YAML 템플릿 자동 생성
- 이미지 기반 간편 배포
3. 팀 협업 개선
- kubectl 명령어 학습 부담 제거
- 웹 인터페이스로 접근성 향상
- 표준화된 배포 프로세스 확립
🔹 기대 효과
- 작업 시간 단축: 10분 → 2분 (80% 단축)
- 실수 방지: GUI 기반 직관적 조작
- 협업 효율성: 누구나 쉽게 접근 가능한 인터페이스
3. 시스템 아키텍처 설계
🔹 전체 구조도
┌─────────────────┐ HTTP/REST ┌─────────────────┐ SSH ┌─────────────────┐
│ Frontend │ ────────────> │ Backend │ ───────> │ K8s Cluster │
│ (Vanilla JS) │ │ (Node.js) │ │ (kubectl) │
│ │ │ │ │ │
│ • SPA 구조 │ │ • Express API │ │ • Master Node │
│ • 실시간 UI │ │ • SSH Clientb │ │ • Worker Nodes │
│ • 상태 관리 │ │ • 캐싱 시스템 │ │ • Podman Reg │
└─────────────────┘ └─────────────────┘ └─────────────────┘
🔹 기술 스택 선정 이유
Backend: Node.js + Express
- SSH 연결을 통한 원격 kubectl 실행 지원
- RESTful API 설계로 확장성 확보
- 비동기 처리로 높은 성능
Frontend: Vanilla JavaScript
- 프레임워크 없는 순수 구현으로 가벼운 구조
- 학습 비용 최소화
- 빠른 개발 및 유지보수
인프라 구성
- K8s 클러스터 (Master: 192.168.0.10)
- Podman Registry (이미지 저장소)
- 로컬 개발 환경 (localhost:3000)
4. 주요 기능 기획
🔹 대시보드 구성
5개 탭 기반 인터페이스
- Overview: 전체 클러스터 상태 한눈에 보기
- Deployments: 배포 관리 및 스케일링
- Services: 서비스 모니터링 및 포트 관리
- Pods: 개별 포드 상태 추적 및 로그 확인
- YAML Editor: 브라우저에서 직접 YAML 편집
🔹 핵심 기능
실시간 모니터링
- 5초 간격 자동 새로고침
- 상태별 컬러 코딩 (Running: 초록, Pending: 노랑, Failed: 빨강)
- 리소스 사용량 실시간 표시
원클릭 배포
- 이미지 선택만으로 자동 YAML 생성
- 배포 전 배포 및 서비스 정보 설정 검증
- 롤백 기능 제공
벌크 작업
- 다중 선택으로 여러 리소스 동시 관리
- Shift+Click 범위 선택
- Ctrl+Click 개별 토글
5. 개발 환경 준비
🔹 프로젝트 구조
k8s-web-manager/
├── server.js # Express 서버
├── lib/
│ └── k8s-client.js # Kubernetes API 클라이언트
├── public/
│ ├── index.html # 메인 웹 페이지
│ ├── script.js # Frontend JavaScript
│ └── style.css # 스타일시트
└── package.json # 의존성 관리
🔹 개발 환경 설정
# 프로젝트 초기화
mkdir k8s-web-manager
cd k8s-web-manager
npm init -y
# 필요한 패키지 설치
npm install express
npm install node-ssh # SSH 클라이언트
npm install cors # CORS 설정
🔹 다음 작업
다음 글에서는 실제 개발 과정을 다뤄보겠습니다:
- SSH 기반 kubectl 명령어 실행 구현
- RESTful API 설계 및 구현
- 캐싱 시스템으로 성능 최적화
- 에러 처리 및 재시도 로직
핵심 코드 :
// SSH를 통한 kubectl 명령어 실행
async executeCommand(command) {
const sshCommand = `sshpass -p 'root' ssh -o StrictHostKeyChecking=no root@192.168.0.10 "${command}"`;
return new Promise((resolve, reject) => {
exec(sshCommand, { timeout: 30000 }, (error, stdout) => {
if (error) reject(error);
else resolve(stdout);
});
});
}
반응형
'기술 공부 > Cloud&Container' 카테고리의 다른 글
| AWS VPC 네트워킹 구성 실습 - Public/Private 서브넷과 ALB (0) | 2026.02.08 |
|---|---|
| [Kubernetes 실습 #4] 웹 기반 K8s 관리 시스템 개발 과정 (1) | 2025.08.13 |
| [Kubernetes 실습 #2] Podman 이미지로 Kubernetes 배포 및 서비스 구성하기 (1) | 2025.07.20 |
| [Kubernetes 실습 #1] Podman을 이용한 컨테이너 이미지 생성 및 로컬 레지스트리에 Push하기 (0) | 2025.07.19 |
| 2024. 12 AWS Certified Solutions Architect – Associate (SAA C03) 자격증 취득 후기 (1) | 2025.07.13 |