본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 44: Certification Tips - Imperative Commands with kubectl

by 공부하는 무니 2023. 1. 5.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


대부분 Definition 파일을 사용하여 declarative 방식으로 작업하지만, imperative command는 일회성 작업을 빠르게 완료하고 Definition 템플릿을 쉽게 생성하는 데 도움이 될 수 있습니다. 이렇게 하면 시험 중에 상당한 시간을 절약할 수 있습니다.

시작하기 전에 아래 커맨드로 작업할 때 유용한 두 가지 옵션을 숙지하세요.

  • -dry-run: 디폴트로는 커맨드가 실행되는 즉시 리소스가 생성됩니다. 그러나 단순히 커맨드를 테스트하려는 경우라면 -dry-run=client 옵션을 사용하세요. 이것은 리소스를 생성하는 것이 아니라 리소스를 생성할 수 있는지 여부와 커맨드가 올바른지 여부를 알려줍니다.
  • o yaml: 이것은 resource definition을 YAML 형식으로 화면에 출력합니다.

위의 두 가지를 함께 사용하여 처음부터 파일을 만드는 대신, 리소스 definition 파일을 빠르게 생성한 다음 필요에 따라 리소스를 수정하고 만들 수 있습니다.

POD

Create an NGINX Pod

kubectl run nginx --image=nginx

Generate POD Manifest YAML file (-o yaml). Don't create it(--dry-run)

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

Deployment

Create a deployment

kubectl create deployment --image=nginx nginx

Generate Deployment YAML file (-o yaml). Don't create it(--dry-run)

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

Generate Deployment with 4 Replicas

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

kubectl scale 커맨드를 사용해서 deployment를 확장할 수 있습니다.

kubectl scale deployment nginx --replicas=4

Another way to do this is to save the YAML definition to a file and modify

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

deployment를 생성하기 전에 YAML파일에서 replicas나 다른 필드를 수정할 수 있습니다.

Service

Create a Service named redis-service of type ClusterIP to expose pod redis on port 6379

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

(이렇게 하면 selectors에 자동으로 pod의 labels가 들어갑니다.)

Or

kubectl create service clusterip redis --tcp=6379:6379 --dry-run=client -o yaml  (이렇게 하면 파드 labels를 selector로 사용하지 않고 대신 selector를 app=redis로 가정합니다. [selector를 옵션으로 전달할 수 없습니다.](https://github.com/kubernetes/kubernetes/issues/ 46191) 따라서 파드에 다른 label 세트가 있으면 잘 작동하지 않습니다. 따라서 service를 생성하기 전에 파일을 생성하고 selector를 수정하세요.)

Create a Service named nginx of type NodePort to expose pod nginx's port 80 on port 30080 on the nodes:

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

(이렇게 하면 파드의 labels이 자동으로 selector로 사용되지만 노드 포트는 지정할 수 없습니다. 파드로 서비스를 생성하기 전에 definition 파일을 생성한 다음 수동으로 노드 포트를 추가해야 합니다.)

Or

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

(이렇게 하면 파드 labels을 selectors로 사용하지 않습니다)

위의 두 커맨드 모두 고유한 문제가 있습니다. 하나는 selector를 허용할 수 없고, 다른 하나는 node port를 허용할 수 없습니다. 따라서kubectl expose 명령을 사용하는 것이 좋습니다. node port를 지정해야 하는 경우 동일한 명령을 사용하여 definition 파일을 생성하고 node port를 수동으로 입력한 후 서비스를 생성합니다.

Reference:

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

https://kubernetes.io/docs/reference/kubectl/conventions/

반응형

댓글