Container Orchestration - 7. kubectl CLI

2020-02-26

Index


  1. Docker
    1. Docker 개념
    2. Docker Install
    3. Docker Command
    4. Docker Example
    5. Image 만들기
    6. Dockerfile
    7. Docker Compose
    8. Image 저장소

  1. Container Orchestration
    1. Container Orchestration 이란
    2. kubernetes(1)
    3. kubernetes(2)
    4. kubernetes install
    5. kubernetes ui
    6. kubernetes를 이용해 배포해보기
    7. kubectl CLI

  1. Provisioning
    1. Provisioning이란
    2. Ansible
    3. Ansible을 이용해 kubernetes cluster 생성하기

목표

쿠버네티스는 클러스터 API 서버와 통신하기 위해 kubectl이라는 커맨드라인 인터페이스를 사용합니다. 클러스터와 상호 작용하고 바라는 상태를 설정하거나 수정하기 위해서 쿠버네티스 API를 직접 사용할 수도 있습니다.

1. Syntax

kubectl의 기본 구분은 다음과 같습니다.

1
kubectl [command] [TYPE] [NAME] [flag]

2. Operations

다음 표에는 모든 kubectl 작업에 대한 간단한 설명과 일반적인 구문이 포함되어 있습니다.

자세한 사항은 이곳 을 참고해주세요.

Operation Syntax Description
annotate kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] 하나 이상의 리소스 주석을 추가하거나 업데이트
api-versions kubectl api-versions [flags] 사용가능한 API 버전 List
apply kubectl apply -f FILENAME [flags] 파일 또는 stdin에서 자원에 구성 변경 사항을 적용
attach kubectl attach POD -c CONTAINER [-i] [-t] [flags] 실행중인 컨테이너에 연결하여 출력 스트림을 보거나 컨테이너 (stdin)와 상호 작용하십시오.
autoscale kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [–min=MINPODS] –max=MAXPODS [–cpu-percent=CPU] [flags] 복제 컨트롤러에서 관리하는 포드 세트를 자동으로 조정합니다.
cluster-info kubectl cluster-info [flags] 클러스터의 마스터 및 서비스에 대한 엔드 포인트 정보를 표시하십시오.
config kubectl config SUBCOMMAND [flags] kubeconfig 파일을 수정합니다. 세부 사항은 개별 부속 명령을 참조하십시오.
create kubectl create -f FILENAME [flags] 파일 또는 stdin에서 하나 이상의 자원을 작성하십시오.
delete kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | –all]) [flags] 파일, stdin에서 또는 label selectors, names, resource selectors 또는 resources 지정하여 resources를 삭제하십시오.
describe kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] 하나 이상의 리소스의 자세한 상태를 표시합니다.
diff kubectl diff -f FILENAME [flags] 라이브 구성에 대한 Diff 파일 또는 표준 입력 (BETA)
edit kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] 기본 편집기를 사용하여 서버에서 하나 이상의 자원 정의를 편집하고 업데이트하십시오.
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]] pod의 컨테이너에 대해 명령을 실행하십시오.
explain kubectl explain [–recursive=false] [flags] 다양한 리소스에 대한 설명서를 받으십시오. pods, nodes, services 등
expose kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [–port=port] [–protocol=TCP|UDP] [–target-port=number-or-name] [–name=name] [–external-ip=external-ip-of-service] [–type=type] [flags] replication controller, service 또는 pod를 새로운 Kubernetes 서비스로 노출하십시오.
get kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [–watch] [–sort-by=FIELD] [[-o | –output]=OUTPUT_FORMAT] [flags] 하나 이상의 리소스를 나열하십시오.
label kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] 하나 이상의 리소스 레이블 추가 또는 업데이트
logs kubectl logs POD [-c CONTAINER] [–follow] [flags] 컨테이너 내부의 pod log를 출력합니다.
patch kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) –patch PATCH [flags] 전략적 병합 패치 프로세스를 사용하여 리소스의 하나 이상의 필드를 업데이트하십시오.
port-forward kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] 하나 이상의 로컬 포트를 pod로 전달합니다.
proxy kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] Kubernetes API 서버에 프록시를 실행하십시오.
replace kubectl replace -f FILENAME 파일 또는 stdin에서 리소스를 바꾸십시오.
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] 지정된 replication controller 및 해당 pod를 점차적으로 교체하여 rolling update를 수행하십시오.
run kubectl run NAME –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] 클러스터에서 지정된 이미지를 실행하십시오.
scale kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) –replicas=COUNT [–resource-version=version] [–current-replicas=count] [flags] 지정된 replacation controller의 크기를 업데이트하십시오.
version kubectl version [–client] [flags] 클라이언트와 서버에서 실행중인 Kubernetes 버전을 표시합니다.

3. Resource types

Resource Name ShortNames API Group Namespaced Resource kind
bindings true Binding
componentstatuses cs false ComponentStatus
configmaps cm true ConfigMap
endpoints ep true Endpoints
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 admissionregistration.k8s.io false MutatingWebhookConfiguration
validatingwebhookconfigurations admissionregistration.k8s.io false ValidatingWebhookConfiguration
customresourcedefinitions crd, crds apiextensions.k8s.io false CustomResourceDefinition
apiservices 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 authentication.k8s.io false TokenReview
localsubjectaccessreviews authorization.k8s.io true LocalSubjectAccessReview
selfsubjectaccessreviews authorization.k8s.io false SelfSubjectAccessReview
selfsubjectrulesreviews authorization.k8s.io false SelfSubjectRulesReview
subjectaccessreviews authorization.k8s.io false SubjectAccessReview
horizontalpodautoscalers hpa autoscaling true HorizontalPodAutoscaler
cronjobs cj batch true CronJob
jobs batch true Job
certificatesigningrequests csr certificates.k8s.io false CertificateSigningRequest
leases coordination.k8s.io true Lease
events ev events.k8s.io true Event
ingresses ing extensions true Ingress
networkpolicies netpol networking.k8s.io true NetworkPolicy
poddisruptionbudgets pdb policy true PodDisruptionBudget
podsecuritypolicies psp policy false PodSecurityPolicy
clusterrolebindings rbac.authorization.k8s.io false ClusterRoleBinding
clusterroles rbac.authorization.k8s.io false ClusterRole
rolebindings rbac.authorization.k8s.io true RoleBinding
roles rbac.authorization.k8s.io true Role
priorityclasses pc scheduling.k8s.io false PriorityClass
csidrivers storage.k8s.io false CSIDriver
csinodes storage.k8s.io false CSINode
storageclasses sc storage.k8s.io false StorageClass
volumeattachments storage.k8s.io false VolumeAttachment

3.1 Example

4. Output Option

모든 kubectl 명령의 기본 출력 형식은 사람이 읽을 수있는 일반 텍스트 형식입니다. 특정 형식으로 터미널 창에 세부 사항을 출력하려면 지원되는 kubectl 명령에 -o 또는 –output 플래그를 추가 할 수 있습니다.

4.1 Syntax

1
kubectl [command] [TYPE] [NAME] -o <output_format>
Output format Description
-o custom-columns=<spec> 쉼표로 구분 된 사용자 정의 열 목록을 사용하여 테이블을 보여줍니다.
-o custom-columns-file=<filename> <filename> 파일에서 사용자 정의 열 템플리트를 사용하여 테이블을 보여줍니다.
-o json JSON 형식의 API 객체를 보여줍니다.
-o jsonpath=<template> jsonpath 표현식에 정의 된 필드를 보여줍니다.
-o jsonpath-file=<filename> <filename> 파일에서 jsonpath 표현식으로 정의 된 필드를 보여줍니다.
-o name 리소스 이름 만 보여줍니다.
-o wide 추가 정보가 포함 된 일반 텍스트 형식으로 보여줍니다. pod의 경우 노드 이름이 포함됩니다.
-o yaml YAML 형식의 API 객체를 보여줍니다.

4.2 Example

참고

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