kubectl 명령어
kubenetes 상태를 확인하고 원하는 상태를 요청하는 client 명령
CLI 형태로 사용
kubectl 명령 동작 시 config file 은 $HOME/.kube 디렉토리에서 찾으며 KUBECONFIG 환경 벼수를 설정하거나 '--kubeconfig' flag를 사용하여 다른 kubeconfig 파일을 지정할 수 있다.
kubectl 명령 reference - https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
- kubectl [command] [type] [name] [flags]
command : 하나 이상의 리소스에서 수행하려는 동작 지정
- ex) create, run, apply, get, describe, delete, exec, logs, config
type :
- 리소스 타입 지정
- 리소스 type 은 대소문자를 구분하지 않으며 단수형, 복수형 또는 약어 형식으로 지정함
name :
- 리소스 이름 지정
- 대소문자 구분
- 생략하면 모든 리소스를 지정하거나 하나 이상의 file을 지정
- type 및 name으로 리소스 지정 시 참고 사항
리소스가 모두 동일한 type인 경우 리소스를 그룹화 하려면 'TYPE name1, name2' 형식과 같이 사용
ex) kubectl get nodes worker1.example.com, worcker2.example.com
여러 리소스 type을 개별적으로 지정하려면 'TYPE1/name1 TYPE2/name2' 형식과 같이 사용
flags : 선택적 flag 지정 (옵션)
-o [flag] : 출력 형식 지정
- f [file] : 파일 지정
kubectl : kubectl 명령 목록 출력
kubectl [command] --help : command 에 대한 도움말
kubectl api-versions : 현재 cluster에서 사용 가능한 API 버전 정보
kubectl api-resources : 사용할 수 있는 resource 목록
kubectl config view : config 파일 내용
명령 | 설명 |
get | 리소스 목록 출력 |
apply | 원하는 상태 적용, -f <파일명> 형식 많이 사용 |
create | 리소스 생성 |
describe | 리소스 상태의 자세한 정보 |
delete | 리소스 제거 |
exec | container 명령 전달, container 접근시 사용 |
logs | container 로그 정보 |
config | kubectl 설정 관리 |
kubectl get [resource]
- kubectl get all : pod, replicaset, deployment, service, job 전체 목록
- kubectl get nodes : cluster 내 node 목록
- kubectl get pods : pod 목록
- kubectl get pods -o wide : pod 목록 정보 상세 출력 (node 정보 포함)
- kubectl get pod [pod name] -o yaml : pod 정보를 yaml 형식으로 출력
- kubectl get pods --show-labels : label 포함 출력
kubectl describe [resource]
- resource에 대한 상세 정보 출력 (초기화되지 않는 리소스 포함)
- 통산 pod가 제대로 동작하지 않는 경우 log를 확인하거나 해당 pod의 describe 정보를 확인하여 원인 파악
kubectl applly -f [yaml 파일]
- 리소스 생성
- 하나 이상의 서비스 생성
kubectl delete -f [yaml 파일]
- 생성 시 사용한 yaml을 이용하여 리소스 삭제
kubectl delete [type] [namee]
- type 에 해당하는 name의 리소스 삭제
kubectl delete [pod name]
- 해당 pod 삭제
kubectl logs POD [-c container] [--follow] [flags]
- pod log 확인
kubectl exec [pod name] -it /bin/bash
- 특정 pod에 대하여 명령 실행
kubectl config view
- config 파일 내용 확인
NAMESPACE
- kubernetes Object
kubernetes object(resource)와 object를 관리하는 controller로 나누어저 있다.
kubernetes object
- kubernetes 시스템에서 영속성을 가지는 object
- object를 생성하면 kubernetes 시스템은 원하는 상태를 보장하기 위해 지속적으로 동작
kubernetes는 cluster의 상태를 나타내기 위해 object를 이용함
object를 2개의 필드에 의해서 구성
- status : kubernetes 시스템과 component에 의해 제공되고 업데이트된 object의 현재 상태 설명
- spec : object 특성으로 추구하는 상태
Controller 는 status와 spec이 일치하도록 object 관리
- kubernetes 기본 object
- pod
kubernetes에서 가장 기본적인 배포 단위
container를 포함하는 단위
kubenetes의 특징중 하나로 container를 개별적으로 배포하는 것이 아닌 pod 단위로 배포
pod는 하나 이상의 container 포함
- volume
container는 기본적으로 상태가 없는 app container 사용
상태가 없다는 것은 container 혹은 node에 문제가 있어 container를 새로 실행했을때 다른 node에 자유롭게 옮길 수 있다는 뜻으로 container 장점
하지만 container가 실행되지 않거나 삭제된다면 현재까지 저장한 데이터는 사라진다는 단점
app의 특성에 따라 container에 문제가 발생해도 데이터를 보존해야 하는 경우 volume 사용
volume 은 container 가 재시작하더라도 데이터 유지
- service
pod 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법
service는 pod 에게 고유한 ip 주소와 pod 집합에 대한 단일 DNS 를 부여하여 pod가 cluster 안 어디에 있든 고정 주소를 통해 접근 가능하도록 함
- Namespace
kubernetes cluster 하나를 여러개의 논리적인 단위로 나눠서 사용하는 개념
pod와 service 등 namespace 별로 생성하고 관리될 수 있다.
- kubernetes Object 기술 방법 - yaml
apiVersion: apps/v1beta2 kind: Deployment metadata: name: python-sample-deployment namespace: default spec: selector: matchLabels: app: python-sample-app replicas: 1 template: metadata: labels: app: python-sample-app spec: containers: - name: python-sample image: dockerimage주소:태그 imagePullPolicy: IfNotPresent resources: requests: cpu: 500m memory: 200Mi ports: - containerPort: 8000 |
apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: app: myweb spec: containers: - name: myweb-container image: nginx:latest ports: - containerPort: 80 |
- YAML 파일 공통 tag
- apiVersion
Object를 생성하기 위한 kubernetes api 버전 명세
- kind
어떤 종류의 object 를 생성하고자 하는지 명세
- metadata
object 이름 부여
object를 유일하게 구분지어줄 데이터
name : 동일 namespace 상 유일한 값
labes : 특정 kubernetes object 만 나열하거나 검색할 때 유용하게 쓰이는 key-value 쌍
- spec
생성할 Object의 구체적인 내용을 정의한 spec
spec의 format은 kubernetes object 종류마다 다름
자주 쓰이는 sepc 목록
- containers : pod에는 1 개 이상 container 포함, container에 원하는 만큼 container 정의
- image : pull 받아올 docker image 주소
- replicas : 원하는 pod 개수
- selector : controller 가 어떤 pod를 감시하는지 명시
- template : 새로운 pod 를 생성할 때 사용할 template , selector값이 template의 labels 와 일치해야 관리되는 pod를 옳게 설정해야 함
- namespace
kubernetes cluster 내의 논리적인 분리 단위
namespace 단위로 자원 할당, 사용자 권한 관리 등을 수행할 수 있다.
별도로 namespace 를 지정하지 않으면 항상 default namespace에 object 생성
namespace는 논리적인 분리 단위를 의미하고 물리적인 분리를 의미하지 않음
참고
namespace 기본 설명 : https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
namespace 생성 : https://kubernetes.io/docs/tasks/administer-cluster/namespaces/#creating-a-new-namespace
namespace design : https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/namespaces.md
하나의 cluster를 논리적으로 dev(개발) / stg(통합) / prd(운영) 로 namespace 분리
- namespace 생성
# exam-namespace.yml apiVersion: v1 kind: Namespace metadata: name: my-namespace spec: limits: - default: cpu: 1 defaultRequest: cpu: 0.5 type: container |
- YAML 파일 이용 생성 : kubectl apply -f exam-namespace.yml
- kubectl create 명령으로 생성 : kubectl create namespace [namespace 이름]
namespace에 object 생성
apiVersion: v1 kind: Pod metadata: name: nginx-pod namespace: exam-namespace2 labels: app: myweb spec: containers: - name: myweb-container image: nginx:latest ports: - containerPort: 80 |
- YAML 파일 metadata tag에 namespace 지정하고 object 생성
namespace 지정하여 object 검색
- kubectl get namespace : 전체 namespace 검색
- kubectl get [resource 이름] --namespace [namespace 이름] : kubectl get pods --namespace default
namespace 삭제
- kubectl delete namespace/[name] : kubectl delete namespace/exam-namespace2
- kubectl delete -f [yaml file]
'Kubernetes > [구름] 쿠버네티스 전문가 양성 과정 k-digital' 카테고리의 다른 글
[11주-10.13] ReplicaSet (0) | 2022.10.26 |
---|---|
[11주-10.12] kubernetes 환경 개선 / pod 상세 (0) | 2022.10.26 |
[10주-10.7] Kubernetes 환경 구성 (1) | 2022.10.22 |
[10주-10.6] Kubernetes 개요 (0) | 2022.10.21 |
[10주-10.5] Docker Network, Compose (0) | 2022.10.21 |