관리 메뉴

피터의 개발이야기

[kubernetes] kubectl 사용법 본문

Kubernetes/kube 개발환경

[kubernetes] kubectl 사용법

기록하는 백앤드개발자 2022. 7. 10. 23:25
반응형

[kubernetes] 개발환경 목차

ㅁ 개요

 쿠버네티스를 사용하면서 가장 많이 접하는 것은 kubectl이라는 커맨드라인이다. 쿠버네티스 자원들의 CRUD, 생성된 자원들의 모니터링 및 트러블 슈팅, 트래픽 운영상황에서의 클러스터 관리까지 다양한 명령어가 존재한다. Devops 시스템을 운영하면서 꼭 필요했던 명령어, 혹은 미쳐 몰랐지만 꼭 필요한 명령어를 빠르게 찾아가는 방법을 이 글에서 정리하고자 한다.

 

 

ㅁ kubectl help!

 ㅇ 명령어 사용법에 대해 가장 빠르게 확인 할 수 있는 방법은 --help를 통한 방법이다.

$ kubectl --help                                                                                                                                                                    ✔  5518  20:57:16
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create          Create a resource from a file or from stdin
  expose          Take a replication controller, service, deployment or pod and expose it as a new Kubernetes service
  run             Run a particular image on the cluster
  set             Set specific features on objects

Basic Commands (Intermediate):
  explain         Get documentation for a resource
  get             Display one or many resources
  edit            Edit a resource on the server
  delete          Delete resources by file names, stdin, resources and names, or by resources and label selector

Deploy Commands:
  rollout         Manage the rollout of a resource
  scale           Set a new size for a deployment, replica set, or replication controller
  autoscale       Auto-scale a deployment, replica set, stateful set, or replication controller

Cluster Management Commands:
  certificate     Modify certificate resources.
  cluster-info    Display cluster information
  top             Display resource (CPU/memory) usage
  cordon          Mark node as unschedulable
  uncordon        Mark node as schedulable
  drain           Drain node in preparation for maintenance
  taint           Update the taints on one or more nodes

Troubleshooting and Debugging Commands:
  describe        Show details of a specific resource or group of resources
  logs            Print the logs for a container in a pod
  attach          Attach to a running container
  exec            Execute a command in a container
  port-forward    Forward one or more local ports to a pod
  proxy           Run a proxy to the Kubernetes API server
  cp              Copy files and directories to and from containers
  auth            Inspect authorization
  debug           Create debugging sessions for troubleshooting workloads and nodes

Advanced Commands:
  diff            Diff the live version against a would-be applied version
  apply           Apply a configuration to a resource by file name or stdin
  patch           Update fields of a resource
  replace         Replace a resource by file name or stdin
  wait            Experimental: Wait for a specific condition on one or many resources
  kustomize       Build a kustomization target from a directory or URL.

Settings Commands:
  label           Update the labels on a resource
  annotate        자원에 대한 주석을 업데이트합니다
  completion      Output shell completion code for the specified shell (bash, zsh or fish)

Other Commands:
  alpha           Commands for features in alpha
  api-resources   Print the supported API resources on the server
  api-versions    Print the supported API versions on the server, in the form of "group/version"
  config          kubeconfig 파일을 수정합니다
  plugin          Provides utilities for interacting with plugins
  version         Print the client and server version information

Usage:
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

 

alpha          -- 알파의 기능에 대한 명령
annotate       -- 자원에 대한 주석을 업데이트합니다
api-resources  -- 서버에서 지원되는 API 리소스를 인쇄합니다.
api-versions   -- "그룹/버전" 형식으로 서버에서 지원되는 API 버전을 인쇄합니다.
apply          -- 파일 이름 또는 표준 입력으로 리소스에 구성을 적용합니다.
attach         -- 실행 중인 컨테이너에 연결
auth           -- 승인 검사
autoscale      -- 배포, 복제 세트, 상태 저장 세트 또는 복제 컨트롤러의 자동 크기 조정
certificate    -- 인증서 리소스를 수정합니다.
cluster-info   -- 클러스터 정보 표시
completion     -- 지정된 셸(bash, zsh 또는 fish)에 대한 출력 셸 완성 코드
config         -- kubeconfig 파일을 수정합니다
cordon         -- 노드를 예약 불가능으로 표시
cp             -- 컨테이너에서 파일 및 디렉토리 복사
create         -- 파일 또는 stdin에서 리소스를 생성합니다.
debug          -- 워크로드 및 노드 문제 해결을 위한 디버깅 세션 생성
delete         -- 파일 이름, 표준 입력, 리소스 및 이름 또는 리소스 및 레이블 선택기로 리소스를 삭제합니다.
describe       -- 특정 리소스 또는 리소스 그룹에 대한 세부 정보 표시
diff           -- 실제 버전을 적용할 버전과 비교합니다.
drain          -- 유지 관리를 위한 드레인 노드
edit           -- 서버의 리소스를 편집합니다.
exec           -- 컨테이너에서 명령 실행
explain        -- 리소스에 대한 문서 가져오기
expose         -- 복제 컨트롤러, 서비스, 배포 또는 포드를 가져와 새로운 Kubernetes 서비스로 노출
get            -- 하나 이상의 리소스를 표시합니다.
help           -- 모든 명령에 대한 도움말
kustomize      -- 디렉토리 또는 URL에서 kustomization 대상을 빌드합니다.
label          -- 리소스의 레이블을 업데이트합니다.
logs           -- 포드의 컨테이너에 대한 로그를 인쇄합니다.
options        -- 모든 명령에 의해 상속된 플래그 목록을 인쇄합니다.
patch          -- 리소스의 필드 업데이트
plugin         -- 플러그인과 상호 작용하기 위한 유틸리티 제공
port-forward   -- 하나 이상의 로컬 포트를 포드로 전달
proxy          -- Kubernetes API 서버에 대한 프록시 실행
replace        -- 리소스를 파일 이름 또는 표준 입력으로 바꿉니다.
rollout        -- 리소스 롤아웃 관리
run            -- 클러스터에서 특정 이미지 실행
scale          -- 배포, 복제 세트 또는 복제 컨트롤러에 대한 새 크기 설정
set            -- 개체에 특정 기능을 설정합니다.
taint          -- 하나 이상의 노드에서 taint를 업데이트합니다.
top            -- 리소스(CPU/메모리) 사용량 표시
uncordon       -- 노드를 예약 가능한 것으로 표시
version        -- 클라이언트 및 서버 버전 정보를 인쇄합니다.
wait           -- 실험적: 하나 이상의 리소스에서 특정 조건을 기다립니다.

 

 

ㅁ kubectl 자동완성 기능 설치

 ㅇ kbuectl 명령어를 다 외울 수는 없다. 특정 키만 입력하고 tap키를 누르면 문장을 완성하고, 더욱이 다음에 올 대상의 목록을 예시로 보여준다.

 예를 들어 보자.

 ㅇ ku까지 치고 탭키를 누르면

 ㅇ kubectl이 완성된다.

 ㅇ 다시 한번 탭을 누르면 사용가능한 명령어 목록과 설명을 확인 할 수 있다.

 ㅇ 예를 들어 상세정보를 확인 하기 위해 describe를 선택한다고 가정하자.

 ㅇ de만 키고 탭을 누르니 de로 시작하는 명령어를 확인할 수 있었다.

 

 ㅇ 마찬가지로 오브젝트의 종류를 선택하는 단계에서 pod를 치면 관련 명령어를 확인 할 수 있다.

 

 ㅇ pods를 완성하고 탭을 누르면 pods들의 목록을 확인 할 수 있다. 

 ㅇ 맥에서는 탭키를 반복적으로 누르면

 ㅇ 목록의 대상을 옮겨서 선택할 수도 있다.

 ㅇ 그래서 무조건 자동완성기능을 기본으로 세팅하는 것이 좋다.

 ㅇ 설치 방법은 여기에 정리하였다.

 

 

ㅁ kubectl <command> -h 활용하기

  ㅇ kubectl 각 명령어 이후에 -h을 넣으면 구체적인 사용방법을 얻을 수 있다.

  ㅇ 예를 들어 kubectl run -h를 들어보면.

Create and run a particular image in a pod.

Examples:
  # Start a nginx pod
  kubectl run nginx --image=nginx

  # Start a hazelcast pod and let the container expose port 5701
  kubectl run hazelcast --image=hazelcast/hazelcast --port=5701

  # Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the
container
  kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"

  # Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container
  kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"

  # Dry run; print the corresponding API objects without creating them
  kubectl run nginx --image=nginx --dry-run=client

  # Start a nginx pod, but overload the spec with a partial set of values parsed from JSON
  kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'

  # Start a busybox pod and keep it in the foreground, don't restart it if it exits
  kubectl run -i -t busybox --image=busybox --restart=Never

  # Start the nginx pod using the default command, but use custom arguments (arg1 .. argN) for that command
  kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>

  # Start the nginx pod using a different command and custom arguments
  kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>

Options:
    --allow-missing-template-keys=true:
	If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to
	golang and jsonpath output formats.

    --annotations=[]:
	Annotations to apply to the pod.

    --attach=false:
	If true, wait for the Pod to start running, and then attach to the Pod as if 'kubectl attach ...' were called.
	Default false, unless '-i/--stdin' is set, in which case the default is true. With '--restart=Never' the exit
	code of the container process is returned.

    --cascade='background':
	Must be "background", "orphan", or "foreground". Selects the deletion cascading strategy for the dependents
	(e.g. Pods created by a ReplicationController). Defaults to background.

    --command=false:
	If true and extra arguments are present, use them as the 'command' field in the container, rather than the
	'args' field which is the default.

    --dry-run='none':
	Must be "none", "server", or "client". If client strategy, only print the object that would be sent, without
	sending it. If server strategy, submit server-side request without persisting the resource.

    --env=[]:
	Environment variables to set in the container.

    --expose=false:
	If true, create a ClusterIP service associated with the pod.  Requires `--port`.

    --field-manager='kubectl-run':
	Name of the manager used to track field ownership.

    -f, --filename=[]:
	to use to replace the resource.

    --force=false:
	If true, immediately remove resources from API and bypass graceful deletion. Note that immediate deletion of
	some resources may result in inconsistency or data loss and requires confirmation.

    --grace-period=-1:
	Period of time in seconds given to the resource to terminate gracefully. Ignored if negative. Set to 1 for
	immediate shutdown. Can only be set to 0 when --force is true (force deletion).

    --image='':
	The image for the container to run.

    --image-pull-policy='':
	The image pull policy for the container.  If left empty, this value will not be specified by the client and
	defaulted by the server.

    -k, --kustomize='':
	Process a kustomization directory. This flag can't be used together with -f or -R.

    -l, --labels='':
	Comma separated labels to apply to the pod. Will override previous values.

    --leave-stdin-open=false:
	If the pod is started in interactive mode or with stdin, leave stdin open after the first attach completes. By
	default, stdin will be closed after the first attach completes.

    -o, --output='':
	Output format. One of: (json, yaml, name, go-template, go-template-file, template, templatefile, jsonpath,
	jsonpath-as-json, jsonpath-file).

    --override-type='merge':
	The method used to override the generated object: json, merge, or strategic.

    --overrides='':
	An inline JSON override for the generated object. If this is non-empty, it is used to override the generated
	object. Requires that the object supply a valid apiVersion field.

    --pod-running-timeout=1m0s:
	The length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one pod is running

    --port='':
	The port that this container exposes.

    --privileged=false:
	If true, run the container in privileged mode.

    -q, --quiet=false:
	If true, suppress prompt messages.

    -R, --recursive=false:
	Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests
	organized within the same directory.

    --restart='Always':
	The restart policy for this Pod.  Legal values [Always, OnFailure, Never].

    --rm=false:
	If true, delete the pod after it exits.  Only valid when attaching to the container, e.g. with '--attach' or
	with '-i/--stdin'.

    --save-config=false:
	If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will
	be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.

    --show-managed-fields=false:
	If true, keep the managedFields when printing objects in JSON or YAML format.

    -i, --stdin=false:
	Keep stdin open on the container in the pod, even if nothing is attached.

    --template='':
	Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format
	is golang templates [http://golang.org/pkg/text/template/#pkg-overview].

    --timeout=0s:
	The length of time to wait before giving up on a delete, zero means determine a timeout from the size of the
	object

    -t, --tty=false:
	Allocate a TTY for the container in the pod.

    --wait=false:
	If true, wait for resources to be gone before returning. This waits for finalizers.

Usage:
  kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json]
[--command] -- [COMMAND] [args...] [options]

Use "kubectl options" for a list of global command-line options (applies to all commands).

 ㅇ run에 대한 설명과 example, Option, Usage가 나온다.

 ㅇ 각 명령어에서도 -h을 통해 다양한 예제와 옵션에 대한 설명을 볼 수 있어서, 작업 중 잘 모를 때에 바로 도움을 받을 수 있다.

 

 

ㅁ 함께 보면 좋은 사이트

 ㅇ 쿠버네티스 문서 > 명령 줄 도구

 

명령줄 도구 (kubectl)

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

 ㅇ 쿠버네티스 문서 > 명령 줄 도구의 사용법, example

 

Kubectl Reference Docs

 

kubernetes.io

 ㅇ https://judo0179.tistory.com/66?category=349244 

 

Kubernetes 기본 명령어 사용하기

지난 시간에는 Kubernetes를 이해하기 이전에 컨테이너 기술이 무엇인지?, kubernetes의 이해, GCP를 활용해서 간단한 애플리케이션을 운영해 보았고, 온프레미스 환경에서 설치하는 스크립트를 업로

judo0179.tistory.com

 

반응형
Comments