쿠버네티스
쿠버네티스 Pod
개발롬
2023. 9. 15. 23:55
인강 들으면서 정리한 쿠버네티스 관련 내용입니다.
Pod
- 쿠버네티스에서 deploy를 할 수 있는 가장 작은 컴퓨팅 유닛입니다.
- pod 안에는 하나 이상의 컨테이너를 넣을 수 있으며 이 컨테이너들은 storage와 network 를 공유합니다.
- 컨테이너 여러개를 하나의 pod에 넣으려면 그 컨테이너들은 서로 밀접하게 연관되도록 설정해야합니다. 그래서 확장과 유연함을 생각한다면 하나의 pod에 하나의 컨테이너를 권장합니다.
1. Pod 생성하는 법
커맨드 라인으로 작성해도 되지만 보통은 yml 파일로 작성합니다.
예시)
apiVersion: v1
kind: pod
metadata: // 태그 같은 개념 (서비스에 이름 붙이기)
name : nginx
spec:
containers: // 어떤 컨테이너들을 넣을지
- name: nginx
image: nginx:1.14.2 // 도커 이미지
ports:
- containerPort: 80 // 컨테이너가 expose하는 port (즉 80포트로 서비스중이다)
위 중 필수값은 apiVersion, kind, metadata 입니다.
2. 실습해보기
미니큐브로 실습해보기!!!
1) 아래의 pod.yml 작성
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app.kubernetest.io/name: proxy
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- container: 80
name: http-web-svc
2) deploy 하기
$ kubectl apply -f pod.yml
3) pod 확인하기
$ kubectl get pod
$ kubectl get pod -o wide
> 위의 명렁어로 입력하면 좀 더 자세한 정보로 확인이 가능합니다.
$ kubectl describe po/nginx (nginx는 pod 이름)
> pod에 대한 info 를 확인할 수 있습니다.
하지만 위의 yml로는 ip 주소에 접근할 수 없습니다. 그래서 service를 생성해야합니다.
4) pod.yml 밑에 service 관련 내용 작성하기
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort // node안에 있는 port를 expose한다
selector:
app.kubernetes.io/name: proxy // 이 name 을 pod에 있는 labels과 같게 해야 pod를 찾아감.
ports:
- name: nginx-service-port
protocol: TCP
port: 80 // service의 포트
targetPort: http-web-svc // pod의 port 의 name
5) deploy 하기
$ kubectl apply -f pod.yml
6) service 확인하기
$ kubectl get service
7) 미니큐브로 실행하기
$ minikube service [서비스명]
8) pod생성을 위한 yaml 설정
* apiVersion : version을 나타내는 identifier
* kind
- Pod : 가장 작은 쿠버네티스의 오브젝트
- Deployment : 여러개의 pod을 한번에 deploy 할 수 있음. 롤링 업데이트와 롤백과 같은 기능을 제공함.
- Service : service는 변경 되지 않는 ip를 제공하며 pod를 그룹화하며 외부에서 pod에 접근이 가능하게 해줌.
- ConfigMap : 설정 정보를 저장해놓는 일종의 저장소 역할을 함. (ex. 일반적인 환경변수)
- Secret : ConfigMAp 과 비슷하며, 보안이 중요한 패스워드나 API키, 인증서 등을 저장할 수 있음.
- PersistentVolume : disk 볼륨에 관한 설정.
- StatefulSet : 상태를 유지하는 데이터베이스와 같은 애플리케이션을 관리하기 위한 컨트롤러.
- Job : 배치 작업이나 주기적인 task에서 주로 사용됨.
* matadata
- name : 쿠버네티스에서 어떤 pod을 봐야하고 바꿔야하는지 등을 알아야하기 떄문에 unique 해야함.
- label : key-value 형태이며 optional 한 값임. (ex. 환경 구분을 위해 사용하기도 함 / stage & prod & dev)