'15단계로 배우는 도커와 쿠버네티스' 기반으로 내용 정리하였습니다.
6.1 kubectl 커맨드의 기본
kubectl 커맨드의 기본 구조는 다음과 같이 세 부분으로 구성된다.
(1) 커맨드로 동작을 지정
(2) 리소스 타입과 이름으로 대상이 되는 오브젝트를 지정
(3) 옵션 지정
kubectl 커맨드 인지의 기본 형식
kubectl <(1)커맨드> <(2)리소스타입> [이름][(3)옵션]
커맨드, 리소스타입, 옵션에 대해 각각 표 형식으로 정리했다.
해당 내용을 바탕으로 파라미터를 조합하여 kubectl을 사용하면 된다.
6.2 커맨드
get
: get은 지정한 오브젝트의 목록을 한 줄에 하나씩 출력
describe
: describe의 경우 get보다도 자세한 정보 출력
apply
: 매니페스트에 기술된 오브젝트가 존재하지 않으면 생성하고, 존재하면 변경
create
: 매니페스트에 기술된 오브젝트를 생성. 이미 있는 경우에는 에러를 반환
delete
: 매니페스트에 기술된 오브젝트를 삭제
config
: 접속 대상이 되는 콘텍스트(k8s 클러스터, 네임스페이스, 유저)의 목록을 출력하거나 선택
exec
: 컨테이너에 대화형으로 커맨드를 실행.
파드 내에 컨테이너가 여러 개 있는 경우 [-c]로 컨테이너 명을 지정.
컨테이너명은 'kubectl get describe <파드명>' 으로 확인 가능
run
: 파드를 실행
logs
: 컨테이너의 로그 표시
6.3 리소스 타입
두 번째 파라미터로 지정할 수 있는 리소스 타입은 매우 다양하다.
'kubectl api-resources'로 얻은 리소스의 목록을 종류별로 그룹화하여 표로 정리하였다.
[ 파드 관련 리소스 타입 ]
pod(po) : 파드
: 컨테이너의 최소 기둥 단위로, 기동 시 파드 네트워크상의 IP 주소를 할당받으며 한 개 이상의 컨테이너를 내포
poddisruptionbudget(pdb) : 파드 정지 허용 수
: 파드의 개수가 지정한 개수 이하가 되지 않도록 디플로이먼트, 스테이트풀셋, 레플리카셋, 레플리케이션 컨트롤러의 동작을 제어
[ 서비스 관련 리소스 타입 ]
service(svc) : 서비스
: 파드를 클라이언트에 공개
replicaset(rs) : 레플리카셋
: 파드의 레플리카 수를 제어하는 컨트롤러로, 디플로이먼트와 연계하여 동작
statefulser(sfs) : 스테이트풀셋
: 퍼시스턴트 데이터를 보유하는 파드를 제어하는 컨트롤러.
퍼시스턴트 볼륨과 파드를 하나씩 쌍으로 묶어 각 이름에 동일한 일련 번호를 부여하여 관리.
job : 잡
: 배치 처리를 수행하는 파드를 관리하는 컨트롤러
cronjob : 크론잡
: 정기적으로 실행되는 배치 처리를 관리하는 컨트롤러
daemonset(ds) : 데몬셋
: 모든 노드에 파드를 배치하는 컨트롤러
replicationcontroller(rc) : 레플리케이션 컨트롤러
: 파드의 레플리카 수를 제어하는 컨트롤러. 레플리카셋의 이전 버전
horizontalpodautoscaler(hpa) : Horizontal Pod Autiscaler
: 워크로드에 따라 파드 수를 조절하는 컨트롤러.
[ 볼륨 관련 리소스 타입 ]
persistentvolume(pv) : 퍼시스턴트 볼륨
: 로우 레벨 스토리지 관리.
persistentvolumeclaim(pvc) : 퍼시스턴트 볼륨 클레임
: 스토리지 클래스와 용량을 지정해서 논리 볼륨의 프로비저닝을 요구.
storageclass(sc) : 스토리지 클래스
: 스토리지의 종류.
[ k8s 클러스터의 구성 관련 리소스 타입 ]
node(no) : 노드
: k8s 클러스터의 워크로드를 실행하는 서버
apiservice : API 서비스
: 마스터가 지원하는 API 서비스를 관리
componentstatuses(cs) : 컴포넌트 상태
: scheduler, controller-manager, etcd-0에 헬스 체크 결과를 보고.
controllerrevision : 컨트롤러 리비전
: 컨트롤러의 리비전 관리.
event : 이벤트
: k8s 클러스터에서 발생한 이벤트를 기록하고 표시하기 위한 컨트롤러.
[ 컨피그맵과 시크릿 관련 리소스 타입 ]
configmap(cm) : 컨피그맵
: 설정 파일을 저장
secret : 시크릿
: 패스워드 등 비밀성이 필요한 정보를 저장
[ 네임스페이스 관련 리소스 타입 ]
namespace(ns) : 네임스페이스
: k8s 클러스터를 논리적으로 분할해서 사용 (pod 가 돌아가는 영역)
[ 역할 기반 액세스 제어(RBAC) 관련 리소스 타입 ]
serviceaccount(sa) : 서비스 어카운트
: 서비스 어카운트는 파드에서 실행되는 프로세스를 위한 어카운트. 접근 권한을 식별하기 위해 사용.
role : 롤
: 일련의 권한을 기술하여 롤을 정의. 롤의 유효범위는 네임스페이스로 한정됨.
rolebinding : 롤바인딩
: 서비스 어카운트와 롤을 바인딩.
clusterrole : 클러스터 롤
: k8s 클러스터 전체에 유효한 롤.
clusterrolebinding : 클러스터 롤 바인딩
: k8s 클러스터 전체에 유효한 클러스터 롤과 서비스 어카운트를 매핑.
[ 보안 관련 리소스 타입 ]
certificatesigningrequest(csr) : 루트 인증서 서명 요구
: 인증 기관에 인증서 서명 요구 작성.
networkpolicies(netpol) : 네트워크 폴리시
: 네임스페이스 사이의 네트워크 접근 제어
podsecuritypolicies(psp) : 파드 시큐리티 폴리시
: 파드 시큐리티 관련 항목의 기본값 설정.
[ 자원 관리 관련 리소스 타입 ]
limitrange(limits) : limit range
: 네임스페이스 내 컨테이너의 CPU와 메모리 요구값과 상한값의 기본값 설정
resourcequota(quota) : resource quota
: 네임스페이스별 CPU와 메모리 요구량, 상한값 설정.
6.4 옵션
옵션 중 기억하면 좋은 유용한 것들이 있다. 자주 사용하는 옵션을 모아봤다.
[ 표시 관련 옵션 예 ]
-n : 네임스페이스명
: 조작 대상을 지정된 네임스페이스로 한정
--all-namespaces -A(v1.14부터)
: 모든 네임스페이스의 오브젝트를 대상으로 함
-o=yaml
: YAML 포맷으로 API 오브젝트를 표시
-o=wide
: 추가 정보 표시(파드의 IP 주소, 배치된 노드 이름등)
-o=json
: JSON 형식으로 API 오브젝트를 표시
-o=custom-columns=<spec.>
: 항목을 지정해서 목록 표시
-o=custom-columns-file=
: 템플릿 파일로 출력할 컬럼을 지정
-o=jsonpath=<template.>
: jsonpath에 일치하는 목록 표시
-o=jsonpath-file=<filename.>
: jsonpath 형식의 템플릿 파일로 출력할 내용 저장