CLI 기본 사용법
kubectl [명령어] [오브젝트] [이름] [옵션]
워크 스페이스 생성
$ mkdir workspace && cd $_
$ kubectl get node
$ kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
- 클러스터에서 하나 이상의 컨테이너 이미지 인스턴스 실행을 시작
Name | Shorthand | Default | Usage |
---|
image | | | 실행할 컨테이너의 이미지입니다. |
$ kubectl run nginx-pod --image=nginx
$ kubectl get pod
$ kubectl get service
$ kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
- 실행 중인 인스턴스 간에 트래픽 부하를 분산하고 클러스터 외부에서 컨테이너에 액세스하기 위한 HA 프록시를 생성할 수 있습니다.
Name | Shorthand | Default | Usage |
---|
name | | | 새로 생성된 object의 이름입니다. |
port | | | 서비스가 제공되어야 하는 포트입니다. 지정되지 않은 경우 노출되는 리소스에서 복사됨 |
type | | | 이 서비스에 대해 ClusterIP, NodePort, LoadBalancer 또는 ExternalName을 입력합니다. 기본값은 'ClusterIP' |
external-ip | | | 서비스에 대해 수락할 추가 외부 IP 주소(Kubernetes에서 관리하지 않음). 이 IP가 노드로 라우팅되면 생성된 서비스 IP 외에도 "추가 외부 주소 IP" 에서 서비스에 액세스 가능 |
$ kubectl expose pod nginx-pod --name clusterip --type=ClusterIP --port 80
$ kubectl get service
$ curl 10.110.73.199
$ kubectl expose pod nginx-pod --name nodeport --type=NodePort --port 80
$ kubectl expose pod nginx-pod --name loadbalancer --type=LoadBalancer --external-ip 192.168.0.29 --port 80
- 로드밸런서 - 클러스터 IP 접속(내부접속), 외부IP:외부PORT 접속, 외부IP 접속
- 접속할수 있는 방법을 서비스라고 한다.
- 비교
$ kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)
- 이벤트 또는 컨트롤러와 같은 관련 리소스를 포함하여 선택한 리소스에 대한 자세한 설명을 출력
- 이름으로 단일 개체, 해당 유형의 모든 개체를 선택하거나 이름 접두사 또는 레이블 선택기를 제공
$ kubectl describe pod nginx-pod
$ kubectl describe service clusterip
$ kubectl describe service nodeport
Namespace : 리소스 그룹, 기본값(default)
Labels : 연결/연동에 사용 (태그와 유사), 라벨을 정하지 않으면 이미지이름을 알아서 정함
IP : 컨테이너 IP
Events : 로그 역할
Selector : Labels 에 해당되는 Pod 에 연결시켜준다.
TargetPort :
Endpoints : 도커의 엔드포인트
$ kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...]
Name | Shorthand | Default | Usage |
---|
stdin | i | false | Pass stdin to the container |
tty | t | false | Stdin is a TTY |
$ kubectl exec -it nginx-pod -- bash
$ echo "<h1>web01</h1>" > /usr/share/nginx/html/index.html
$ kubectl cp <file-spec-src> <file-spec-dest>
$ mkdir html
$ tar xvf ./gcp.tar -C html/
$ kubectl cp html nginx-pod:/usr/share/nginx
$ kubectl get [(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns|custom-columns-file|wide] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags]
Name | Shorthand | Default | Usage |
---|
output | o | | json/yaml/name/go-template/go-template-file/template/templatefile/jsonpath/jsonpath-as-json/jsonpath-file/custom-columns-file/custom-columns/wide |
show-labels | | false | 마지막 열에 모든 라벨을 표시, 기본값: 출력하지 않음. |
$ kubectl get all
$ kubectl get nodes -o wide
$ kubectl get pod -o wide --show-labels
$ kubectl get nodes -o wide no-headers
$ kubectl get nodes -o wide --no-headers | awk '{print $6}'
- 파일 이름, stdin, 리소스 및 이름 또는 리소스 및 레이블 선택기로 리소스를 삭제
$ kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)])
$ kubectl delete svc --all
$ kubectl get svc
$ kubectl delete pod nginx-pod
$ kubectl delete pod,svc --all
$ kubectl delete pods <pod> --grace-period=0 --force pod
- kubectl 모든 명령의 플래그(옵션) 목록을 출력
$ kubectl options
- 오브젝트(; 리소스) 의 쿠버네티스 현재 버전에서 API 가 어떻게 사용되는지 확인 가능, 네임스페이스 포함 여부, SHORTNAMES 등 확인 가능
KIND
: yaml 작성할때 리소스의 종류를 표현할 때 이용
- 하나의 이상의 파드를 만들수 있는 방식
deployment
replicasets
: deployment
가 나오기 전에의 사용, 복제와 관련된 부분
deployment
: 두개이상의 파드를 운영하기 적합
Name | Shorthand | Default | Usage |
---|
replicas | r | 1 | 생성할 복제본 수 |
image | | [] | 실행할 이미지 이름 |
$ kubectl create deployment nginx-app --replicas=2 --image=nginx
$ kubectl get deployments.apps
$ kubectl get deployments.apps -o wide
$ kubectl get replicasets.apps
$ kubectl get replicasets.apps -o wide
$ kubectl expose deployment nginx-app --name clusterip-app --type ClusterIP --port 80
$ kubectl expose deployment nginx-app --name nodeport-app --type=NodePort --port 80
$ kubectl expose deployment nginx-app --name loadbalancer-app --type=LoadBalancer --external-ip 192.168.2.46 --port 80
$ kubectl get service
deployments.apps
조회
replicasets.apps
조회
- deployment, replicaset, pod 는 연관이 있다.
- 배포, 복제 세트, 복제 컨트롤러 또는 상태 저장 세트의 새 크기를 설정합니다.
$ kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
$ kubectl scale deployment nginx-app --replicas=4
$ kubectl get pods
----------------------------------------
NAME READY STATUS RESTARTS AGE
nginx-app-d6ff45774-4vdjm 1/1 Running 0 138m
nginx-app-d6ff45774-lpg5c 1/1 Running 0 138m
nginx-app-d6ff45774-rs865 0/1 ContainerCreating 0 6s
nginx-app-d6ff45774-znhw5 1/1 Running 0 6s
----------------------------------------
$ kubectl scale deployment nginx-app --replicas=2
$ kubectl get pods
----------------------------------------
NAME READY STATUS RESTARTS AGE
nginx-app-d6ff45774-4vdjm 1/1 Running 0 140m
nginx-app-d6ff45774-lpg5c 1/1 Running 0 140m
$ kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)])
- deployment를 지우지 않으면 pod 를 지울 수 없다.
$ kubectl delete deployments.apps nginx-app
$ kubectl delete service --all
$ kubectl delete all --all
$ kubectl delete pod --all
APP MANAGEMENT COMMAND
- 애플리케이션 리소스를 구성합니다.
- 이러한 명령은 기존 애플리케이션 리소스를 변경하는 데 도움이 됩니다.
$ kubectl set SUBCOMMAND
kubectl set image
- 리소스의 기존 컨테이너 이미지를 업데이트
- 가능한 리소스: pod(po), replicationcontroller(rc), 배포(deploy), daemonset(ds), statefulset(sts), cronjob(cj), replicaset(rs)
$ kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
$ kubectl set image deployment.apps/nginx-deployment nginx-deployment-container=halilinux/web-site:v1.0
$ kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
- 리소스 롤아웃을 관리
- 가능한 리소스 유형
- deployments
- daemonsets
- statefulsets
$ kubectl rollout SUBCOMMAND
kubectl rollout history
- 이전 롤아웃 버전 및 구성을 확인
$ kubectl rollout history (TYPE NAME | TYPE/NAME) [flags]
Name | Shorthand | Default | Usage |
---|
revision | | 0 | 특정 리비전의 podTemplate 을 포함한 세부 정보 보기 |
$ kubectl rollout history deployment nginx-deployment
$ kubectl rollout history deployment/abc
$ kubectl rollout history deployment nginx-deployment --revision=2
kubectl rollout undo
- 이전 롤아웃으로 롤백
$ kubectl rollout undo (TYPE NAME | TYPE/NAME) [flags]
Name | Shorthand | Default | Usage |
---|
to-revision | | 0 | 롤백할 버전. 기본값은 0 (latest revision) |
$ kubectl rollout undo deployment nginx-deployment
$ kubectl rollout undo deployment nginx-deployment --to-revision=2
기타
$ kubectl run nginx-pod --image=halilinux/web-site:aws
$ kubectl expose pod nginx-pod --name loadbalancer --type LoadBalancer --external-ip 192.168.2.46 --port 80
$ kubectl api-resourece
$ kubectl get po -o wide
$ kubectl get svc -o wide
$ kubectl exec -it nginx-app-d6ff45774-lpg5c -- /bin/sh -c 'echo "<h1>web02</h1>" > /usr/share/nginx/html/index.html'
$ kubectl exec -it nginx-replicaset-hgtbx -- bash -c 'echo "web01" > /usr/share/nginx/html/index.html'
- 파드는 도커 컨테이너를 여러개 넘어서 운영한다. ; 하나의 파드 안에 두개 이상의 컨테이너를 넣을 수도 있으나 대개 파드 하나에 컨테이너 하나이다.
❗네임스페이스 관련 추가 ❗
$ kubectl -n jsb get all
$ kubectl get ns jsb
$ kubectl delete resourcequotas sample-resourcequota
$ kubectl delete ns jsb
❗ 리소스 쿼터 관련 추가 ❗
❗ 라벨 관련 추가❗
$ kubectl label nodes worker1 tier=dev
$ kubecl get nodes --show-labels
$ kubectl label nodes worker1 tier-