728x90
CKA(Certified Kubernetes Administrator) 시험에서는 Kubernetes 클러스터 내 애플리케이션의 장애를 진단하고 해결하는 능력이 중요한 평가 요소입니다. 본 글에서는 'Application Failure' 문제를 상세히 분석하고 해결 방법을 설명하겠습니다.
1. 문제 설명: 애플리케이션 장애(Application Failure)
📌 출제 의도
이 문제는 Kubernetes 클러스터에서 애플리케이션이 정상적으로 동작하지 않는 원인을 분석하고 해결하는 능력을 평가합니다. 주요 진단 항목은 다음과 같습니다.
- 서비스(Service) 설정 오류 (Selector, Port 설정 문제)
- 애플리케이션의 환경 변수(Environment Variables) 설정 오류
- 네임스페이스(namespace) 문제
- 데이터베이스 접근 설정 오류
❌ 문제 상황
- webapp-mysql 애플리케이션이 mysql-service와 통신해야 하지만, 정상적으로 작동하지 않습니다.
- mysql-service가 webapp-mysql이 데이터베이스(MySQL)에 접근할 수 있도록 설정되어야 합니다.
- webapp-mysql Pod의 환경 변수 설정이 올바르지 않아 DB 접속에 실패할 가능성이 있습니다.
- mysql-service의 Selector 또는 Port 설정이 잘못되어 MySQL Pod과 연결되지 않았을 수 있습니다.
2. 문제 해결 접근법
✅ 1단계: mysql-service의 Selector 및 Port 확인
먼저, mysql-service의 Selector와 Port 설정을 확인하여 mysql Pod과 올바르게 연결되고 있는지 확인해야 합니다.
kubectl -n gamma describe svc mysql-service
출력된 결과에서 Selector 값이 올바르게 설정되어 있는지 확인합니다. 잘못된 경우 다음과 같이 수정해야 합니다.
📌 수정된 mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-service # MySQL 서비스 이름 확인
namespace: gamma # 올바른 네임스페이스 설정
spec:
ports:
- port: 3306 # MySQL 기본 포트
targetPort: 3306 # MySQL Pod이 리스닝하는 포트
selector:
app: mysql # MySQL Pod을 정확하게 선택해야 함
📝 설명:
- namespace: gamma 네임스페이스 내에서 서비스가 동작하도록 설정해야 합니다.
- selector: app: mysql 라벨을 가진 Pod과 연결되도록 수정합니다.
- ports: MySQL Pod이 수신하는 포트를 올바르게 지정해야 합니다.
✅ 2단계: webapp-mysql의 환경 변수 수정
webapp-mysql 애플리케이션이 MySQL 서비스에 접근할 때 사용하는 환경 변수가 올바르게 설정되지 않았다면, MySQL 연결이 실패할 수 있습니다.
kubectl -n gamma describe pod webapp-mysql | grep -i DB_
환경 변수가 잘못된 경우 Deployment를 수정해야 합니다.
📌 수정된 webapp-mysql Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-mysql
namespace: gamma
spec:
replicas: 1 # 단일 인스턴스 실행
selector:
matchLabels:
app: webapp-mysql
template:
metadata:
labels:
app: webapp-mysql
spec:
containers:
- name: webapp-container
image: my-webapp:latest
env:
- name: DB_Host
value: mysql-service # MySQL 서비스의 올바른 이름 설정
- name: DB_User
value: root # MySQL 사용자 이름
- name: DB_Password
value: password # MySQL 비밀번호 확인 필요
📝 설명:
- DB_Host: mysql-service로 설정하여 MySQL 서비스와 올바르게 연결되도록 합니다.
- DB_User, DB_Password: MySQL 접속 정보가 정확한지 확인합니다.
✅ 3단계: web-service의 NodePort 수정
애플리케이션이 외부에서 접근 가능해야 한다면, NodePort를 올바르게 설정해야 합니다.
📌 수정된 web-service.yaml
apiVersion: v1
kind: Service
metadata:
name: web-service
namespace: zeta
spec:
ports:
- nodePort: 30081 # 외부에서 접근할 수 있도록 NodePort 설정
port: 8080 # 서비스가 내부에서 사용하는 포트
targetPort: 8080 # Pod 내부 컨테이너가 사용하는 포트
selector:
app: webapp-mysql # 올바른 Pod과 연결되도록 설정
type: NodePort # 외부 노출을 위한 NodePort 설정
📝 설명:
- nodePort: 30081로 설정하여 외부에서 해당 서비스에 접근할 수 있도록 합니다.
- targetPort: webapp-mysql 컨테이너가 실제로 요청을 처리하는 포트를 가리켜야 합니다.
- selector: 올바른 Pod을 대상으로 설정해야 합니다.
3. 결론
위 단계를 거쳐 webapp-mysql 애플리케이션이 정상적으로 MySQL과 통신할 수 있습니다. Kubernetes에서 애플리케이션 장애를 해결할 때는 다음 접근법을 기억하세요.
✅ 문제 해결 접근법 정리
- 서비스와 Pod 연결 확인 → kubectl describe svc <서비스명>
- 환경 변수 설정 확인 → kubectl describe pod <pod명>
- NodePort 설정 확인 → kubectl get svc -o yaml
- YAML 파일 수정 후 다시 적용 → kubectl apply -f <파일명>
728x90
'Certificate > CKA' 카테고리의 다른 글
CKA Troubleshooting - Worker Node Failure 문제 분석 및 해결 (0) | 2025.03.04 |
---|---|
CKA Troubleshooting - Control Plane Failure 문제 분석 및 해결 (0) | 2025.03.04 |