kubectl apply와 같이 선언형 명령어는 미리 yaml 파일을 작성해야 하기에 실제 시험 환경에서는 많은 시간 낭비를 불러올 수 있다. 

 

반면에 명령형(Imperative) 명령어는 일회성 작업을 빠르게 처리하거나, 템플릿을 쉽게 생성하는 데 유용할 수 있다. 이는 시험 중 상당한 시간을 절약하는 데 도움이 될 것이다.

 

명령형 명령어를 사용하려면 먼저 2가지 옵션에 대해 익숙해질 필요가 있다.

 

1) 

--dry-run

 

기본적으로 명령어가 실행되면 리소스가 즉시 생성된다. 하지만 명령어를 단순히 테스트하고 싶다면,  --dry-run=client 옵션을 사용하면 리소스를 생성하지 않고, 리소스를 생성할 수 있는지와 명령어가 올바른지 확인해준다.

 

2)

-o yaml

 

이 옵션을 사용하면 화면에 리소스 정의를 YAML 형식으로 출력한다.

 

--dry-run= client 옵션과 -o yaml 옵션을 사용해서 나온 결과값을 복사해 빠르게 새로운 templete을 만들 수 있다. 이는 시간 절약에 도움이 될 것이다. 

 

pod

1) NGINX POD 생성

kubectl run nginx --image=nginx

 

2) POD 실행하지 않고 Manifest YAML 파일 생성 

kubectl run nginx --image=nginx --dry-run=client -o yaml

 

Deployment

1)  deployment 생성

kubectl create deployment --image=nginx nginx

 

2) deployment 실행하지 않고 YAML 파일 생성

kubectl create deployment --image=nginx nginx --dry-run=client -o yaml

 

3) 복제본 선택 옵션

kubectl create deployment nginx --image=nginx --replicas=4

 

기존에 만들어져있는 Deployment scale을 통해 수정 가능

kubectl scale deployment nginx --replicas=4

 

4) '>'을 사용해 화면에 출력하지 않고 바로 yaml 파일 생성

 

kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > nginx-deployment.yaml

 

이렇게 완성된 yaml 파일 kubectl apply하면 선언적 접근법으로 사용 가능하다. 

 

Service

1) redis pod를 접근하기 위한 CluserIP Yaml파일 생성

kubectl expose pod redis --port=6379 --name redis-service --dry-run=client -o yaml

 

redis pod가 이미 생성되어 있어야 사용 가능하다.

kubectl run redis --image=redis

 

kubectl create service clusterip redis --tcp=6379:6379 --dry-run=client -o yaml

 

 

이 옵션으로도 yaml 파일 생성 가능하나 기본적으로 selector로 app = redis를 가정하고 selector에 접근하지 않기 때문에 만약 Pod에 다른 label이 있다면 이 방법은 잘 작동하지 않는다. 따라서 파일을 생성한 후, Service를 생성하기 전에 셀렉터를 수정해야 한다.

 

2) 외부에서 service에 접근하기 위한 NodePort 생성 

kubectl expose pod nginx --type=NodePort --port=80 --name=nginx-service --dry-run=client -o yaml

 

이 방법은 selector를 자동적으로 추적 가능하나 NodePort의 port 번호를 지정해줄 수 없기 때문에 yaml 파일을 생성한 뒤 수정해 줄 필요가 있다. 

 

kubectl create service nodeport nginx --tcp=80:80 --node-port=30080 --dry-run=client -o yaml

 

이 명령어는 clusterip와 마찬가지로 label selector 추적 불가능하다. 

 

두 옵션 중 더 나은 옵션으로 추천받는 것은 expose 옵션이다. label을 다시 다는 것보다 NodePort를 직접 지정해주는 것이 빠르기 때문이다. 

 

'DevOps > Kubernetes' 카테고리의 다른 글

Kubernetes Metrics Server 구축  (0) 2024.10.20
Kubernetes 환경에서의 Monitoring  (3) 2024.10.20
Kubernetes Static Pod & Control Plane  (0) 2024.10.18
Pod, Deployment 수정 시 유의사항  (0) 2024.10.17
CKA YAML 작성 팁  (0) 2024.10.15