8.1 컨테이너와 파드
- 파드는 동일한 환경에서 실행되는 컨테이너와 볼륨으로 구성된 집합체이다.
- 파드에 있는 모든 컨테이너는 동일한 머신에 있다.
- 파드는 서로 통신하며 데이터를 공유하는 컨테이너의 그룹이다.
- 파드 내의 컨테이너는 디스크 볼륨을 공유할 수 있다.
- 한 예로, 블로그 앱과 nginx 각각의 컨테이너는 같은 데이터를 공유할 수 있다.
- 컨테이너는 가벼운 가상머신이라 부르기도 하며, 하나의 작업만 수행하는 것을 권장한다.
- 한 예로, 데이터를 저장하는 캐시앱과 서비스앱 두개를 각각의 컨테이너로 구성한다.

8.2 컨테이너 매니페스트
containers: 각 컨테이너의 스펙에 name과 image 필드를 정의한다.
image: 이미지에 태그를 지정하지 않으면 lastest로 지정된다. (ex. demo:hello:lastest:1.2)
ports: 애플리케이션이 수신하는 네트워크 포트번호를 지정한다.
resources: 파드의 리소스 요청과 상한을 나타낸다.
env:
컨테이너 생성전에 만들어진 환경변수도 사용할 수 있으며, 변수의 크기는 32KB로 제한한다.
컨테이너 이미지의 환경변수에 env설정이 환경변수를 덮어쓴다.
spec:
containers:
- image: cloudnatived/demo:hello:v1.0
name: demo
ports:
- containerPort: 8080 # 컨테이너가 수신할 포트 지정
resources:
requests:
memory: "128Mi" # 요청 메모리
cpu: "250m" # 요청 CPU
limits:
memory: "256Mi" # 제한 메모리
cpu: "500m" # 제한 CPU
env:
- name: ENVIRONMENT
value: "production" # 환경 변수 설정 예시
- name: VERSION
value: "v1.0" # 버전 환경 변수 예시
- image: cloudnatived/demo:hello2:v2.0
name: demo2
ports:
- containerPort: 9090 # 두 번째 컨테이너의 포트 설정
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1000m"
env:
- name: ENVIRONMENT
value: "staging"
- name: VERSION
value: "v2.0"
8.4 볼륨
동일 파드 내에 있는 다른 컨테이너와 데이터를 공유할 수 있는 볼륨을 제공한다.
emptyDir 볼륨
- 비용구적 스토리지로, 비어 있는 상태로 시작하여 데이터를 노드에 저장한다.
- 파드가 실행되는 동안에만 유지된다.
- 데이터를 장기간 보관할 필요는 없고, 컨테이간의 추가 스토리지가 필요할 때 사용된다.
- 예제: 캐시, 임시공유파일
spec:
containers:
- name: demo
image: cloudnatived/demo:hello
ports:
- containerPort: 8888
volumeMounts:
- mountPath: /cache
name: cache-volumn
readOnly: true
volumes:
- name: cache-volumn
emptyDir: {}
Persistent 볼륨
- 영구적인 볼륨이 필요할 때 사용한다.
- 영구적인 데이터를 저장하려면 클라우드의 추가 구성과 더 많은 리소스가 필요하다.
- 쿠버네티스에서 데이터베이스를 실행하는 것은 권장하지 않는다. (클라우드DB 추천)
volumns:
- name: data-volumn
persistentVolumnClaim:
claimName: data-pvc
8.5 재시작 정책
기본 재시작 정책은 Always지만
OnFailure(컨테이너가 비정상 종료)나 Never(재시작하지않음)으로 변경 가능하다.
apiVersion: v1
kind: pod
...
spec:
restartPolicy: OnFailure
8.6 이미지 풀 시크릿
k8s는 지정한 이미지가 노드에 없다면 컨테이너 레지스트리에서 이미지를 다운로드한다.
그러나 사설 레지스트리를 사용한다면 인증이 필요할 수도 있기에
imagePullSecrets 필드에서 자격증명을 설정할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: my-private-pod
spec:
containers:
- name: my-app
image: <YOUR-REGISTRY-SERVER>/my-repo/my-app:latest
imagePullSecrets:
- name: my-registry-secret'Infra > Kubernetes' 카테고리의 다른 글
| 쿠버네티스를 활용한 네이티브 데브옵스 - 7장 유용한 쿠버네티스 도구 (0) | 2024.10.19 |
|---|---|
| 쿠버네티스를 활용한 네이티브 데브옵스 - 6장 클러스터 운영하기 (0) | 2024.10.06 |
| 쿠버네티스를 활용한 네이티브 데브옵스 - 5장 리소스 관리하기 (0) | 2024.10.05 |
| 쿠버네티스를 활용한 네이티브 데브옵스 - 4장 오브젝트 다루기 (0) | 2024.09.27 |
| 쿠버네티스를 활용한 네이티브 데브옵스 - 3장 쿠버네티스 구축하기 (0) | 2024.09.18 |