Imperative Commands 로 시간 단축하기
Imperative Commands
실제로 운영환경에서는 yaml 파일로 declarative하게 운영하는 것이 좋지만, 시험환경에서는 yaml 파일을 작성하는데 시간도 오래걸리고 다시 재사용할 일이 없기 때문에 Imperative 명령어들을 알아두면 시간 단축에 매우 큰 도움이 된다.
run (Pod)
kubectl run nginx --image=nginx
- 시험에서 굳이 yaml 파일을 만들지 않아도 되는 간단한
Pod생성의 경우run명령어 한 줄로 해결할 수 있다.
create (Deployment)
kubectl create deployment --image=nginx nginx
- 시험에서 굳이 yaml 파일을 만들지 않아도 되는 간단한
Deployment생성의 경우create명령어 한 줄로 해결할 수 있다.
kubectl create deployment --image=nginx nginx --replicas=4
- Kubernetes v1.19 이후부터는
--replicas옵션을 줄 수 있다.
expose, create (Service)
kubectl expose pod redis --port=6379 --name redis-service
- 이 명령어를 사용하면
redis라는Pod의label을 확인하고 이를redis-service라는 이름의Service의selector에 자동으로 복사되고 해당Service가 생성된다.
kubectl create service clusterip redis --tcp=6379:6379
- 이 명령어를 사용하면
redis라는 이름의Service가selector속성에서app=redis라고 가정하고 생성된다. create는selector를 지정할 수 없다.--dry-run=client -o yaml과 함께 사용하여selector를 직접 지정하여 사용하는 방법으로 단점을 보완할 수 있다.
kubectl expose pod nginx --type=NodePort --port=80 --name=nginx-service
- 이 명령어를 사용하면
Pod의label이 자동으로selector에 의해 선택되지만,NodePort의 포트 번호는 자동으로 선택(30000-32767)된다. (설정 불가) --dry-run=client -o yaml과 함께 사용하여type을nodePort로 변경하고 노드 포트 번호를 지정하는 식으로 단점을 보완할 수 있다.
kubectl create service nodeport nginx --tcp=80:80 --node-port=30080
- 이 명령어는 반대로
NodePort의 포트 번호는 지정할 수 있지만,selector를 지정할 수 없다. --dry-run=client -o yaml과 함께 사용하여selector를 직접 지정하여 사용하는 방법으로 단점을 보완할 수 있다.
--dry-run=client
kubectl run nginx --image=nginx --dry-run=client -o yaml
kubectl create deployment --image=nginx nginx --dry-run=client -o yaml
- yaml 파일을 만들어야하는 경우,
--dry-run=client명령어로Pod를 직접 생성하지 않고, yaml 기본 템플릿을 자동으로 출력할 수 있다.
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx-deployment.yaml
kubectl create deployment --image=nginx nginx --dry-run=client -o yaml > nginx-deployment.yaml
- 파일을 저장까지 하려면 위처럼
> 파일이름.yaml로 저장할 수 있다. - 위와 같이 템플릿을 만드는 이유는 yaml 파일의 모든 요소를 기억하기 힘든 것도 있겠지만, Indentation과 같은 사소한 실수를 예방할 수도 있기 때문이다.
kubectl apply -f nginx-deployment.yaml
- 추출한 yaml 파일을 수정하고 적용하여 리소스를 생성할 수 있다.
Remind Commands
시험장에서 Docs에서 찾기 힘들고 기억나지 않는것이 있을 때
kubectl api-resoucres
- 리소스의
apiVersion이나name, 축약어 등이 기억나지 않을 경우 위 명령어 사용
kubectl explain pods
- 특정 리소스의
apiVersion이나metadata,spec등이 기억나지 않을 경우 위 명령어 사용 - 위 명령어는
Pod에 어떤 요소가 들어가는지를 알고싶을 때 사용 (최상위 요소만 나타냄)
kubectl explain pods.spec
- 최상위 요소 하위에 더 자세한 요소가 기억나지 않을경우 위처럼 명령어 사용
- 위 명령어는
Pod의spec에 어떤 요소가 들어가야하는지 기억나지 않을 경우 사용
kubectl explain pods --recursice
- yaml 파일 형식처럼 모든 요소를 보고싶을 경우
- 해당 리소스에서 사용가능한 모든 필드를 출력한다.
- yaml 파일 작성에 도움받을 수 있음
레퍼런스
- https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
- https://kubernetes.io/docs/reference/kubectl/conventions/
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)