minikube 1.25.1, kubectl이 개인 환경에 설치되었다고 가정한 이후에 시작합니다.
설치 방법은 여기를 참고하면 좋을 것 같습니다.
https://waspro.tistory.com/587
1. 정의
Pod는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위 입니다. 쿠버네티스는 Pod 단위로 스케줄링, 스케일링 등 관리 작업을 수행합니다. 쿠버네티스에 어떤 application을 배포하고 싶다면 최소 Pod로 구성해야합니다.
또한 Pod는 Contaioner를 감싼 개념이라고 생각하시면 됩니다. 즉, 집합의 포함관계처럼, 하나의 Container 혹은 여러 개의 Container로 이루어져 있습니다. Pod 내부의 여러 Container는 자원을 공유하고 Stateless한 특징을 가지고 있어 언제든지 삭제할 수 있는 자원입니다.
2. Pod 생성하기
아래 내용은 Pod의 예시입니다. 각 키에 대한 내용과 밸류에 대한 내용을 작성하며, spec의 밸류 부분이 Pod의 메인부분이라고 생각하면 됩니다.
apiVersion: v1 # kubernetes resource 의 API Version
kind: Pod # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: counter
spec: # 메인 파트 : resource 의 desired state 를 명시
containers:
- name: count # container 의 이름
image: busybox # container 의 image
# 해당 image 의 entrypoint 의 args 로 입력하고 싶은 부분
args: [/bin/sh, -c, 'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
위의 예시 내용을 실습하는 경로에 pod.yaml로 vi 이용해 작성하여 생성합니다. 그 후 minikube를 실행("minikube start --driver=docker)한 후 아래를 수행합니다.
kubectl apply -f pod.yaml
kubectl apply -f <yaml-file-path>를 수행하면 해당 <yaml-file-path>에 해당하는 쿠버네티스 리소스를 생성 또는 변경할 수 있습니다. 쿠버네티스 리소스의 desired state를 기록해놓기 위해 항상 YAML파일을 저장하고, 버전 관리하는 것을 권장합니다!
그 후, 생성한 Pod의 상태를 확인합니다. 시간이 조금 지나서 수행하면 Creating > Running으로 변하는 것을 확인할 수 있습니다.
kubectl get pod
3. Pod 조회하기
방금 current namespace의 pod 목록을 조회하는 명령을 수행하였습니다. 여기서 namespace란 쿠버네티스에서 리소스를 격리하는 가상의 단위라고 생각하면 됩니다.
( " kubectl config view --minify | grep namespace: "를 통해 current namespace가 어떤 namespace로 설정되었는지 확인이 가능합니다. 따로 설정하지 않았다면 "default" namespace가 기본으로 설정이 되어있습니다.)
특정 namespace 혹은 모든 namespace의 pod를 조회할 수 있습니다.
# kube-system namespace의 pod를 조회하기
kubectl get pod -n kube-system
# 모든 namespace의 pod를 조회할 때에는 -A를 부여한다
kubectl get pod -A
pod 하나를 조금 더 자세히 조회하는 명령어는 "describe"로 다음과 같습니다. <pod-name>에 해당하는 pod를 자세히 조회합니다.
kubectl describe pod <pod-name>
get의 옵션을 활용해 자주 쓰이는 명령어는 다음과 같습니다.
# pod 목록을 보다 자세히 출력
kubectl get pod -o wide
# <pod-name> 을 yaml 형식으로 출력
kubectl get pod <pod-name> -o yaml
# kubectl get pod 의 결과를 계속 보여주며, 변화가 있을 때만 업데이트
kubectl get pod -w
4. Pod 로그 확인하기
"logs" 명령어를 이용하여 확인할 수 있습니다.
kubectl logs <pod-name>
# <pod-name> 의 로그를 계속 보여주기
kubectl logs <pod-name> -f
# pod안에 여러 개의 container가 있는 경우에는 아래처럼 확인
kubectl logs <pod-name> -c <container-name>
# pod안에 여러 개의 container가 있는 경우에, 계속 보여주기
kubectl logs <pod-name> -c <container-name> -f
5. Pod 내부 접속하기
docker와 pod 내부 접속은 exec를 사용하는 것 처럼 비슷합니다.
kubectl exec -it <pod name> -- <명령어>
# pod안에 여러 컨테이너가 있는 경우에 아래와 같이 사용
kubectl exec -it <pod name> -c <container-name> -- <명령어>
6. pod 삭제
쉽게 delete를 이용하여 삭제합니다.
kubectl delete pod <pod name>
YAML파일을 사용하여 삭제가 가능합니다. pod가 아니더라도 모든 쿠버네티스 리소스에 적용이 가능합니다.(중요)
kubectl delete -f <YAML-file-path>
다음 글은 pod에 관리를 제공하는 deployment 관련 글로 찾아뵙겠습니다.
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'AI > MLOps' 카테고리의 다른 글
[패스트캠퍼스 챌린지 12일차] Service & PVC (0) | 2022.02.04 |
---|---|
[패스트캠퍼스 챌린지 11일차] Deployment (0) | 2022.02.03 |
[패스트캠퍼스 챌린지 9일차] YAML (0) | 2022.02.01 |
[패스트캠퍼스 챌린지 8일차] Kubernetes 개념 (0) | 2022.01.31 |
[패스트캠퍼스 챌린지 7일차] Docker Image (0) | 2022.01.30 |