Kubectl : 쿠버네티스 클러스터를 제어하기 위한 커맨드 라인 도구 (CLI).
kubectl의 config 파일은 $HOME/.kube 에 위치하고 있다.
kubectl [command] [TYPE] [NAME] [flags]
명령어 | 구문 | 설명 |
---|---|---|
alpha | kubectl alpha SUBCOMMAND [flags] | 쿠버네티스 클러스터에서 기본적으로 활성화되어 있지 않은 알파 기능의 사용할 수 있는 명령을 나열한다. |
annotate | kubectl annotate (-f FILENAME | TYPE NAME |
api-resources | kubectl api-resources [flags] | 사용 가능한 API 리소스를 나열한다. |
api-versions | kubectl api-versions [flags] | 사용 가능한 API 버전을 나열한다. |
apply | kubectl apply -f FILENAME [flags] | 파일이나 표준입력(stdin)으로부터 리소스에 구성 변경 사항을 적용한다. |
attach | kubectl attach POD -c CONTAINER [-i][-t] [flags] | 실행 중인 컨테이너에 연결하여 출력 스트림을 보거나 표준입력을 통해 컨테이너와 상호 작용한다. |
auth | kubectl auth [flags][options] | 승인을 검사한다. |
autoscale | kubectl autoscale (-f FILENAME | TYPE NAME |
certificate | kubectl certificate SUBCOMMAND [options] | 인증서 리소스를 수정한다. |
cluster-info | kubectl cluster-info [flags] | 클러스터의 마스터와 서비스에 대한 엔드포인트 정보를 표시한다. |
completion | kubectl completion SHELL [options] | 지정된 셸(bash 또는 zsh)에 대한 셸 완성 코드를 출력한다. |
config | kubectl config SUBCOMMAND [flags] | kubeconfig 파일을 수정한다. 세부 사항은 개별 하위 명령을 참고한다. |
convert | kubectl convert -f FILENAME [options] | 다른 API 버전 간에 구성 파일을 변환한다. YAML 및 JSON 형식이 모두 허용된다. 참고 - kubectl-convert 플러그인을 설치해야 한다. |
cordon | kubectl cordon NODE [options] | 노드를 스케줄 불가능(unschedulable)으로 표시한다. |
cp | kubectl cp [options] | 컨테이너에서 그리고 컨테이너로 파일 및 디렉터리를 복사한다. |
create | kubectl create -f FILENAME [flags] | 파일이나 표준입력에서 하나 이상의 리소스를 생성한다. |
delete | kubectl delete (-f FILENAME | TYPE [NAME |
describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX |
diff | kubectl diff -f FILENAME [flags] | 라이브 구성에 대해 파일이나 표준입력의 차이점을 출력한다. |
drain | kubectl drain NODE [options] | 유지 보수를 준비 중인 노드를 드레인한다. |
edit | kubectl edit (-f FILENAME | TYPE NAME |
exec | kubectl exec POD [-c CONTAINER][-i] [-t][flags] [-- COMMAND [args...]] | 파드의 컨테이너에 대해 명령을 실행한다. |
explain | kubectl explain [--recursive=false][flags] | 파드, 노드, 서비스 등의 다양한 리소스에 대한 문서를 출력한다. |
expose | kubectl expose (-f FILENAME | TYPE NAME |
get | kubectl get (-f FILENAME | TYPE [NAME |
kustomize | kubectl kustomize [flags][options] | kustomization.yaml 파일의 지시 사항에서 생성된 API 리소스 집합을 나열한다. 인수는 파일을 포함하는 디렉터리의 경로이거나, 리포지터리 루트와 관련하여 경로 접미사가 동일한 git 리포지터리 URL이어야 한다. |
label | kubectl label (-f FILENAME | TYPE NAME |
logs | kubectl logs POD [-c CONTAINER][--follow] [flags] | 파드의 컨테이너에 대한 로그를 출력한다. |
options | kubectl options | 모든 명령에 적용되는 전역 커맨드 라인 옵션을 나열한다. |
patch | kubectl patch (-f FILENAME | TYPE NAME |
plugin | kubectl plugin [flags][options] | 플러그인과 상호 작용하기 위한 유틸리티를 제공한다. |
port-forward | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N][flags] | 하나 이상의 로컬 포트를 파드로 전달한다. |
proxy | kubectl proxy [--port=PORT][--www=static-dir] [--www-prefix=prefix][--api-prefix=prefix] [flags] | 쿠버네티스 API 서버에 프록시를 실행한다. |
replace | kubectl replace -f FILENAME | 파일 또는 표준입력에서 리소스를 교체한다. |
rollout | kubectl rollout SUBCOMMAND [options] | 리소스의 롤아웃을 관리한다. 유효한 리소스 타입에는 디플로이먼트(deployment), 데몬셋(daemonset)과 스테이트풀셋(statefulset)이 포함된다. |
run | kubectl run NAME --image=image [--env="key=value"][--port=port] [--dry-run=server | client |
scale | kubectl scale (-f FILENAME | TYPE NAME |
set | kubectl set SUBCOMMAND [options] | 애플리케이션 리소스를 구성한다. |
taint | kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options] | 하나 이상의 노드에서 테인트(taint)를 업데이트한다. |
top | kubectl top [flags][options] | 리소스(CPU/메모리/스토리지) 사용량을 표시한다. |
uncordon | kubectl uncordon NODE [options] | 노드를 스케줄 가능(schedulable)으로 표시한다. |
version | kubectl version [--client][flags] | 클라이언트와 서버에서 실행 중인 쿠버네티스 버전을 표시한다. |
wait | kubectl wait ([-f FILENAME] | resource.group/resource.name |
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
NAME | SHORTNAMES | APIGROUP | NAMESPACED | KIND |
---|---|---|---|---|
bindings | true | Binding | ||
componentstatuses | cs | false | ComponentStatus | |
configmaps | cm | true | ConfigMap | |
endpoints | ep | true | Endpoints | |
events | ev | true | Event | |
limitranges | limits | true | LimitRange | |
namespaces | ns | false | Namespace | |
nodes | no | false | Node | |
persistentvolumeclaims | pvc | true | PersistentVolumeClaim | |
persistentvolumes | pv | false | PersistentVolume | |
pods | po | true | Pod | |
podtemplates | true | PodTemplate | ||
replicationcontrollers | rc | true | ReplicationController | |
resourcequotas | quota | true | ResourceQuota | |
secrets | true | Secret | ||
serviceaccounts | sa | true | ServiceAccount | |
services | svc | true | Service | |
mutatingwebhookconfigurations | http://admissionregistration.k8s.io/ | false | MutatingWebhookConfiguration | |
validatingwebhookconfigurations | http://admissionregistration.k8s.io/ | false | ValidatingWebhookConfiguration | |
customresourcedefinitions | crd,crds | http://apiextensions.k8s.io/ | false | CustomResourceDefinition |
apiservices | http://apiregistration.k8s.io/ | false | APIService | |
controllerrevisions | apps | true | ControllerRevision | |
daemonsets | ds | apps | true | DaemonSet |
deployments | deploy | apps | true | Deployment |
replicasets | rs | apps | true | ReplicaSet |
statefulsets | sts | apps | true | StatefulSet |
tokenreviews | http://authentication.k8s.io/ | false | TokenReview | |
localsubjectaccessreviews | http://authorization.k8s.io/ | true | LocalSubjectAccessReview | |
selfsubjectaccessreviews | http://authorization.k8s.io/ | false | SelfSubjectAccessReview | |
selfsubjectrulesreviews | http://authorization.k8s.io/ | false | SelfSubjectRulesReview | |
subjectaccessreviews | http://authorization.k8s.io/ | false | SubjectAccessReview | |
horizontalpodautoscalers | hpa | autoscaling | true | HorizontalPodAutoscaler |
cronjobs | cj | batch | true | CronJob |
jobs | batch | true | Job | |
certificatesigningrequests | csr | http://certificates.k8s.io/ | false | CertificateSigningRequest |
leases | http://coordination.k8s.io/ | true | Lease | |
endpointslices | http://discovery.k8s.io/ | true | EndpointSlice | |
events | ev | http://events.k8s.io/ | true | Event |
ingresses | ing | extensions | true | Ingress |
flowschemas | http://flowcontrol.apiserver.k8s.io/ | false | FlowSchema | |
prioritylevelconfigurations | http://flowcontrol.apiserver.k8s.io/ | false | PriorityLevelConfiguration | |
ingressclasses | http://networking.k8s.io/ | false | IngressClass | |
ingresses | ing | http://networking.k8s.io/ | true | Ingress |
networkpolicies | netpol | http://networking.k8s.io/ | true | NetworkPolicy |
runtimeclasses | http://node.k8s.io/ | false | RuntimeClass | |
poddisruptionbudgets | pdb | policy | true | PodDisruptionBudget |
podsecuritypolicies | psp | policy | false | PodSecurityPolicy |
clusterrolebindings | http://rbac.authorization.k8s.io/ | false | ClusterRoleBinding | |
clusterroles | http://rbac.authorization.k8s.io/ | false | ClusterRole | |
rolebindings | http://rbac.authorization.k8s.io/ | true | RoleBinding | |
roles | http://rbac.authorization.k8s.io/ | true | Role | |
priorityclasses | pc | http://scheduling.k8s.io/ | false | PriorityClass |
csidrivers | http://storage.k8s.io/ | false | CSIDriver | |
csinodes | http://storage.k8s.io/ | false | CSINode | |
storageclasses | sc | http://storage.k8s.io/ | false | StorageClass |
volumeattachments | http://storage.k8s.io/ | false | VolumeAttachment |
여기까진 Docs의 Reference인데…
그렇다면 작동 원리는 무엇일까??
kubernetes API는 HTTP REST API이다. 이 API는 Kubernetes의 실 사용자 인터페이스이며, Kubernetes는 이 API를 통해 완전히 제어된다. 결과적으로 kubectl의 주요 작업은 Kubernetes API에 대한 HTTP 요청을 수행하는 것이다.
Kubernetes는 완전한 리소스 중심 시스템이다. 즉, K8S는 리소스의 내부 상태를 유지하고 모든 K8S 작업은 이러한 리소스에 대한 CRUD 작업이다.
예를 들어, K8S에서 ReplicaSet을 생성한다고 가정했을 때, 다음과 같은 명령을 실행한다.
$ kubectl create -f replicaset.yaml
이 명령어를 실행했을 때, K8S는 어떻게 Create ReplicaSet 작업을 실행할까? 이 작업에 대한 특정 API의 엔드포인트는 다음과 같다.
POST /apis/apps/v1/namespaces/{namespace}/replicasets
따라서, 위의 명령을 실행하면 kubectl은 위의 API 엔드포인트에 HTTP POST 요청을 한다. replicaset.yaml 파일에서 제공되는 ReplicaSet 정의는 Request Body에 전달된다.
이것이 kubectl이 K8S클러스터와 상호 작용하는 모든 명령에 대해 작동하는 방식이다.
그렇다면 이 API를 받았을 때, K8S 내부에서는 어떤 프로세스로 동작하게 될까?
위와 같은 예시와 같이 kubectl create -f replicaset.yaml을 방금 실행했다고 가정해보자.
그 다음 API 서버는 저장소 백엔드 (etcd)에 ReplicaSet 리소스 정의를 저장한다.
이렇게 하면 ReplicaSet 리소스의 생성, 업데이트 및 삭제를 감시하는 Controller Manager의 ReplicaSet Controller가 트리거된다.
ReplicaSet 컨트롤러는 ReplicaSet의 각 복제본에 대한 Pod 정의를 생성하고 이를 백엔드 스토리지 (etcd)에 저장한다.
Worker Node에 아직 할당되지 않은 Pod를 감시하는 Scheduler를 트리거한다.
Scheduler는 각 파드에 적합한 Worker Node를 선택하고 이 정보를 백엔드 스토리지 (etcd) Pod 정의에 추가한다.
그 뒤, Pod가 예약된 Worker Node에서 Kubelet을 트리고 하고 Worker node에 예약된 Pod를 감시한다.
Kubelet은 etcd에서 Pod 정의를 읽고 컨테이너 런타임 (Docker)에 Worker Node에서 컨테이너를 실행하도록 지시한다.
이것이 kubectl을 통한 전반적인 K8S로의 명령 구조이다.