👉 실습 예시: pod.yaml 에 nginx 기반 custom image 배포
apiVersion: v1
kind: Pod
metadata:
name: myapp
labels:
name: myapp
environment: prod
spec:
containers:
- name: myapp
image: manifoldailearning/custom-nginx
ports:
- containerPort: 80
👉 실습 예시: svc-local.yaml
apiVersion: v1
kind: Service
metadata:
name: mysvc
spec:
type: NodePort
selector:
name: myapp
environment: prod
ports:
- port: 5000 # Service Port
targetPort: 80 # Pod 내부 컨테이너 Port
nodePort: 30001 # 외부 접근 NodePort
protocol: TCP
👉 실습 예시: deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 2
selector:
matchLabels:
app: myapp-pod
template:
metadata:
labels:
app: myapp-pod
spec:
containers:
- name: mycontainer
image: manifoldailearning/custom-nginx
ports:
- containerPort: 80
👉 실습 예시: rolling-update.yaml
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 2
다음 중 Kubernetes에서 Pod에 대한 설명으로 옳지 않은 것은?
① Pod는 Kubernetes에서 컨테이너 실행의 기본 단위이다.
② 하나의 Pod는 반드시 여러 개의 컨테이너를 포함해야 한다.
③ Pod는 특정 노드에만 스케줄링되며, 여러 노드에 걸쳐 실행될 수 없다.
④ Pod는 장애 시 자동으로 새로운 Pod로 대체될 수 있다.
정답: ②
해설: Pod는 최소 1개 컨테이너를 포함하며, 대부분의 경우 단일 컨테이너로 실행된다. 여러 컨테이너는 특별한 경우(서비스 메쉬, 로그 수집 등)에만 사용된다 .
Kubernetes에서 서비스(Service) 오브젝트를 사용하는 주된 이유는 무엇인가?
① Pod를 수평적으로 확장하기 위해서
② Pod의 자원 사용량을 제한하기 위해서
③ Pod의 IP 주소 변경에도 안정적인 네트워크 접근을 제공하기 위해서
④ Pod를 여러 노드에 동시에 배포하기 위해서
정답: ③
해설: Pod는 죽으면 새로 생성되고, 새로운 IP를 할당받는다. 따라서 안정적인 접근을 위해 Service 오브젝트가 필요하며, 이는 고정된 DNS/Port를 제공한다 .
다음은 svc-local.yaml의 일부이다. 이 정의에 대한 설명으로 옳은 것은?
ports:
- port: 5000 # Service Port
targetPort: 80 # Container Port
nodePort: 30001 # NodePort
① 클라이언트는 localhost:5000 으로 접근하여 Pod에 연결할 수 있다.
② 클라이언트는 localhost:30001 로 접근하여 Pod에 연결할 수 있다.
③ Pod 내부에서는 반드시 포트 5000에서 애플리케이션을 실행해야 한다.
④ Service와 Pod는 서로 다른 네임스페이스에 있어야 한다.
정답: ②
해설: NodePort 타입 서비스는 클러스터 외부에서 nodePort(30001)로 접근할 수 있고, 내부적으로 Service Port(5000)를 거쳐 Pod Port(80)로 연결된다 .
Deployment 오브젝트에 대한 설명으로 옳은 것을 모두 고르시오.
ㄱ. Deployment는 Pod를 자동 복구(Self-healing)할 수 있다.
ㄴ. Deployment는 replicas 속성을 통해 여러 Pod를 동시에 실행할 수 있다.
ㄷ. Deployment Controller는 원하는 상태와 실제 상태를 일치시키는 역할을 한다.
ㄹ. Deployment는 Service 없이도 외부에서 직접 접근할 수 있다.
① ㄱ, ㄴ
② ㄱ, ㄷ
③ ㄱ, ㄴ, ㄷ
④ ㄴ, ㄹ
정답: ③
해설: Deployment는 Pod 복구, 확장, 롤링 업데이트 등을 자동화한다. Service가 없으면 외부 접근은 불가능하다 .
다음은 rolling-update.yaml의 일부이다. 해당 설정에 대한 설명으로 옳은 것은?
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 2
① 업데이트 시 기존 Pod를 모두 중단한 뒤 새 Pod를 띄운다.
② 동시에 최대 2개의 새 Pod가 추가로 생성될 수 있다.
③ 기존 Pod는 모두 유지되며 새로운 Pod만 추가된다.
④ Pod는 한 번에 최대 1개씩만 업데이트될 수 없다.
정답: ②
해설: maxSurge: 2는 동시에 최대 2개의 새 Pod를 더 띄울 수 있음을 의미한다. maxUnavailable: 1은 동시에 최대 1개의 Pod만 사용할 수 없게 된다 .