본문 바로가기

컨테이너/Kubernetes

Kubernetes(k3s) Pod / Service / Namespace 관련 기본 명령어 학습

- 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 명령 확인 공식 페이지

 

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-strong-getting-started-strong-

 

Kubectl Reference Docs

 

kubernetes.io