1. yaml
쿠버네티스에서는 pod를 만들 때 명령어만으로 생성할 수 있고, yaml 파일을 생성할 수 있다.
작성 요령
- 하나의 블록에 속하는 엔트리마다
-를 붙여야 한다. - 키와 값 사이에
:를 사용하며,:뒤에공백을 넣어야 한다. - YAML 파일은
---로 문서의 시작을 표시하고, 선택적으로...로 문서의 끝을 나타낼 수 있다. - 키 와 값 사이에
공백이 있어야 한다. - 주석은
#으로 시작 - 들여쓰기는
tab이 아니라공백
검증: https://onlineyamltools.com/validate-yaml
2. 파드 생성 및 관리
파드는 쿠버네티스의 기본 배포 단위이면서 다수의 컨테이너를 포함한다.
일반적으로 하나의 파드에 하나의 컨테이너가 포함되지만, 다수의 컨테이너를 포함하는 경우 이를 sidecar 패턴이라 한다.
이는 주로 보조 기능을 수행하는 컨테이너를 별도로 실행할 때 사용된다.

파드 생성
create또는apply명령을 사용한다.create: 새로운 리소스를 생성하는 것apply:create와replace의 혼합- httpd 라는 이미지를 가지고 pod를 생성: yaml 파일 없이 생성
kubectl run 파드이름 --image 이미지이름
kubectl run mynginx --image nginx
실행 중인 컨테이너(pod) 조회
kubectl get pod

상태
- Pending: 생성 명령 O 실행은 X
- ContainerCreating: 생성 중
- Running: 정상 실행 중
- Completed: 한 번 실행하고 완료된 상태
- Error: 에러
- CrashLoopBackOff: 지속적인 에러 상태로 인해 crash가 반복 중
자세히 보기 옵션
추가로, -o wide 옵션을 사용하여 더 많은 정보를 확인할 수 있다. 이를 통해 IP 주소나 노드 정보와 같은 세부 사항을 확인할 수 있다.
kubectl get pod 파드이름 -o yaml
kubectl get pod 파드이름 -o wide

이벤트 기록까지 확인할 수 있는 자세히 보기 명령
주로 디버깅할 때 사용한다.
kubectl describe pod 파드이름

pod 로깅
kubectl logs -f 파드이름

pod에 명령을 수행
kubectl exec 파드이름 -- 명령
kubectl exec mynginx -- apt-get update

파드 내부로 들어가고자 하는 경우
kubectl exec -it 파드이름 -- bash

파드와 호스트 간 파일 복사
kubectl cp 명령어는 파드 내에서 특정 파일을 복사하거나, 호스트에서 파드로 파일을 복사할 때 사용된다.
이 명령어는 디버깅이나 로그 수집을 위한 유용한 도구이다.
kubectl cp 타겟 소스
파드 안의 파일을 표현할 때 <파드이름>:> 경로
호스트의 /etc/password 파일을 mynginx 컨테이너의 /tml/passwr로 복사하고자 하는 경우
kubectl cp /etc/password mynginx:/tmp/passwd

파드 정보 수정
kubectl edit pod 파드이름
# mynginx 파드 수정
kubectl edit pod mynginx
해당 파드의 yaml 파일을 수정할 수 있다.

파드 삭제
kubectl delete pod 파드이름

yaml 파일을 이용해서 파드 생성하기
kubectl apply -f 야믈파일경로
yaml 파일을 생성한다. (mynginx.yml)
mkdir 1023
cd 1023
nano mynginx.yml

yaml을 권장하는 이유
- 파일 위치의 유연성
- YAML 파일은 로컬 시스템에 위치할 뿐만 아니라, 인터넷 상의 URL로도 참조할 수 있다.
- 이를 통해 중앙 집중식으로 관리되는 리소스 정의서나 버전 관리 시스템에 저장된 YAML 파일을 쉽게 가져와 사용할 수 있다.
- 이로 인해 배포 자동화 및 CI/CD 파이프라인에서의 활용이 용이하다.
- 멱등성 보장
- YAML 파일을 사용하여 Kubernetes와 같은 시스템에 리소스를 정의할 때, 동일한 YAML 파일을 여러 번 적용해도 결과가 변하지 않도록 보장한다. 이는 멱등성을 의미하며, 시스템의 상태가 안정적으로 유지되도록 도와준다.
- 예를 들어, 이미 존재하는 리소스를 다시 정의하더라도, 해당 리소스의 상태가 변경되지 않으므로 배포나 업데이트 과정에서 발생할 수 있는 오류를 줄일 수 있다.
- 가독성
- YAML은 사람에게 친숙한 형식으로 작성되기 때문에, 복잡한 데이터 구조를 쉽게 이해하고 수정할 수 있다.
- 이는 팀원 간의 협업을 촉진하고, 문서화 및 유지보수를 용이하게 만든다.
- 구조화된 데이터 표현
- YAML은 계층적이고 구조화된 데이터를 표현하는 데 적합하다.
- 이러한 특성 덕분에 리소스 간의 관계를 명확히 하고, 복잡한 설정을 간단하게 관리할 수 있다.
3. Pod
쿠버네티스에서 Pod는 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다.
다음과 같은 특징이 있다:
- 컨테이너 그룹: 하나 이상의 컨테이너로 구성되며, 이들 컨테이너는 스토리지 및 네트워크를 공유하고 함께 배치된다.
- 워크로드 리소스: Pod는 일반적으로 직접 생성하지 않으며, 대부분의 경우 워크로드 리소스를 사용하여 생성된다. 예를 들어, Deployment, StatefulSet 등의 리소스를 통해 Pod가 생성된다.
Pod의 단계
Pod는 다음과 같은 상태를 가질 수 있다:
- Pending:
- Pod가 쿠버네티스 클러스터에 승인되었지만, 하나 이상의 컨테이너가 설정되지 않았고 실행할 준비가 되지 않은 상태이다.
- 이 단계는 Pod가 스케쥴되기 이전의 시간뿐만 아니라, 네트워크를 통한 컨테이너 이미지 다운로드 시간도 포함된다.
- Running:
- Pod가 노드에 바인딩되었고 모든 컨테이너가 생성되었으며, 적어도 하나의 컨테이너가 실행 중이거나 시작 또는 재시작 상태에 있는 경우이다.
- 이 상태에서는 Pod의 작업이 정상적으로 진행되고 있음을 나타낸다.
- Succeeded:
- Pod에 있는 모든 컨테이너들이 성공적으로 종료되었고, 더 이상 재시작되지 않은 상태이다.
- 이 상태는 주로 일회성 작업을 수행하는 Job 리소스에서 나타난다.
- Failed:
- Pod에 있는 모든 컨테이너가 종료되었고, 적어도 하나 이상의 컨테이너가 실패로 종료된 상태이다.
- 이는 해당 컨테이너가 non-zero 상태로 빠져나왔거나 시스템에 의해 종료된 경우를 포함한다.
- Unknown:
- Pod의 상태를 얻을 수 없는 상태로, 대부분은 다른 노드와의 통신 오류로 인해 발생한다.
- 이 상태는 클러스터의 문제나 네트워크 이슈를 나타낼 수 있다.
이러한 Pod의 상태는 클러스터의 상태를 모니터링하고 문제를 해결하는 데 중요한 정보를 제공한다.
Pod의 상태를 주기적으로 확인하고, 필요에 따라 적절한 조치를 취하는 것이 중요하다.
Pod의 상태를 확인하는 주된 방법으로는 kubectl get pod와 kubectl describe pod 명령어가 있으며, 이를 통해 자세한 상태 정보와 이벤트 기록을 확인할 수 있다.
컨테이너 재시작 정책: restartPolicy
- Always: 항상 재시작
- OnFailure: 실패한 재시작
- Never: 재시작하지 않음
동일한 노드에서 kubelet에 의한 컨테이너 재시작 정책인데 파드의 컨테이너가 문제가 발생해서 종료되는 경우, 5분 동안 지수 백오프 지연(10초, 20초, 40초, 80초..)으로 컨테이너를 재시작한다.
4. 리소스를 이용한 파드 생성
kubectl create 나 kubectl apply 명령으로 생성
kubectl apply -f mynginx.yaml