- master node OS : Ubuntu 22.04.1 LTS
- worker node OS : CentOS Linux release 7.5.1804 (Core)
- kubernetes version : v1.25.3+k3s1
* 모든 실습은 master node에서 진행
# 컨테이너 실행
kubectl run [NAME] --image [IMAGE]
kubectl apply -f [yaml FILE NAME]
# 컨테이너 조회
kubectl get pod
# pod의 상태 정보 자세하게 보기
kubectl get pod [NAME] -o yaml
# 간단하게 pod의 IP, node name 등 확인
kubectl get pod -o wide
# 컨테이너 상세 정보 확인
kubectl describe pod [NAME]
# 컨테이너 로깅
kubectl logs [NAME]
# 컨테이너 지속적 로깅
kubectl logs -f [NAME]
# 컨테이너 명령 전달
kubectl exec [NAME] -- [CMD]
# 컨테이너 내부 접속
kubectl exec -it [NAME] -- bash
# 컨테이너 삭제
kubectl delete pod [NAME]
# 모든 컨테이너 삭제
kubectl delete pod --all
# Service 확인
kubectl get service
# Service의 describe 확인
kubectl describe service [서비스 NAME]
# 노드 확인(클러스터 상태 확인 가능)
kubectl get node
# 노드의 describe 확인
kubectl describe node [NODE NAME]
# 모든 리소스 조회
kubectl api-resources
# 네임스페이스 레벨의 API 리소스만 탐색
kubectl api-resources --namespaced=true
# 클러스터 상태 확인 - 쿠버네티스 API 서버 작동 여부 확인
kubectl cluster-info
# 클러스터 상태 확인 - 쿠버네티스 핵심 컴포넌트 pod 상태 확인
kubectl get pod -n kube-system
명령어 결과 예시 화면
# 컨테이너 상세 정보 확인
kubectl describe pod [NAME]
# 컨테이너 내부 접속
kubectl exec -it [NAME] -- bash
POD란?
- 쿠버네티스의 최소 실행 단위
POD STATUS
- pod의 상태 정보를 나타냄
- Pending : 쿠버네티스 마스터에 생성 명령은 전달되었지만 아직 실행되지 않은 상태
- ContainerCreating : 특정 노드에 스케줄링이 되어 컨테이너를 생성중인 단계로 만약 status가 이 상태라면 조금 더 기다려주면 됨!
- Running : pod가 정상적으로 실행되고 있는 상태
- Completed : 계속 실행되고 있는 프로세스가 아닌 한 번 실행하고 완료되는 배치작업 pod에서 작업이 완료된 상태
- Error : pod에 문제가 생겨 에러가 발생한 상태
- CrashLoopBackOff : 지속적으로 에러 상태로 있어 crash가 반복되는 상태
* Kubernetes는 오류를 수정할 수 있는 기회를 제공하기 위해 restarts 사이에 증가하는 Back off 시간을 기다림
→ restarts를 하는 이유는 기본값이 restartPolicy로 설정되어 있기 때문
→ 이런 경우 정확한 원인 추적을 위해 pod의 description이나 log를 체크!
선언형 명령 정의서(YAML) 기반의 컨테이너 생성 예시
vi mynginx.yaml
# mynginx.yaml 내용
apiVersion: v1
kind: Pod
metadata:
name: mynginx
spec:
containers:
- name: mynginx
image: nginx
kubectl apply -f [FILE_NAME]
- 만약 yaml 파일의 일부를 수정하고 다시 kubectl apply -f [FILE_NAME] 명령을 하는 경우에는 created가 아닌
configured 라는 메세지와 함께 기존 컨테이너의 설정값이 수정되게 하는데, apply 라는 선언형 명령은 멱등성을 보장하는 것을 의미한다.
쿠버네티스 네임스페이스(Namespace)
- 쿠버네티스의 네임스페이스란 ? 쿠버네티스 클러스터를 논리적으로 나누는 역할
- Pod, Service와 같은 리소스가 네임스페이스별로 생성되고 사용자 접근제어, Network 접근제어 정책을 다르게 가져갈 수 있음
- 쿠버네티스 리소스는 크게 네임스페이스 레벨의 리소스와 클러스터 레벨의 리소스로 구분됨
→ 네임스페이스 레벨의 대표적인 리소스가 Pod / 클러스터 레벨의 대표적 리소스는 Node
- default : 기본 네임스페이스 / 아무런 옵션 없이 컨테이너를 만들게 되면 default 네임스페이스에 생성
- kube-system : 쿠버네티스의 핵심 컴포넌트들이 들어있는 네임스페이스 / 해당 네임스페이스에 네트워크 설정, DNS 서버 등 중요한 역할을 담당하는 컨테이너가 존재
- kube-public : 외부로 공개 가능한 리소스를 담고 있는 네임스페이스
- kube-node-lease : 노드가 살아있는지 마스터에 알리는 용도로 존재
만약 특정 네임스페이스에 리소스를 생성하고 싶다면 --namespace 옵션(-n)을 이용
kubectl run [pod name] --image [image name] --namespace [namespace name]
*** 다양한 kubectl 명령 확인 공식 페이지
Kubectl Reference Docs
kubernetes.io