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 |