Pod 실습
- 한 파드에 여러 컨테이너를 생성하는 실습
- 두 개의 컨테이너가 있음
- 하나는 이미지가 p8000으로 8000으로 접속
- 다른 하나는 p8080
1. 파드 생성
+생성 버튼 클릭
아래 YAML 복붙 후 업데이트 클릭
apiVersion: v1
kind: Pod
metadata:
name: pod-1
spec:
containers:
- name: container1
image: kubetm/p8000
ports:
- containerPort: 8000
- name: container2
image: kubetm/p8080
ports:
- containerPort: 8080
생성중인 pod-1 클릭
상세에서 IP 확인
- 상태는 Running
- IP는 서비스 없이 이 파드에 접근할 수 있는 IP
- 쿠버네티스 클러스터 내에서만 접근 가능
Master에서 생성한 컨테이너 포트번호 호출해보기
[root@k8s-master ~]# curl 20.109.131.3:8000
containerPort : 8000
[root@k8s-master ~]# curl 20.109.131.3:8080
containerPort : 8080
- Master에서 명령어 날리는 것 자체가 클러스터내에서 하는 것
- 둘 다 연결 잘 되네
8000 컨테이너로 들어가서 8080 컨테이너 접근해보기
EXEC 클릭
container1
root@pod-1:/# curl localhost:8080
containerPort : 8080
container2
root@pod-1:/# curl localhost:8000
containerPort : 8000
아까 YAML 파일에서 두 컨테이너의 포트번호를 같게 하면?
- 오류남 ㅎㅎ
- 한 파드내에서 컨테이너의 포트는 같을 수가 없음
간단하게 컨트롤러를 만들어보기
- 파드가 시스템에서 관리 되면 파드의 아이피는 파드가 재생성될 때 변경됨
- 컨트롤러는 파드를 만들어주고 죽으면 다시 생성해주는 관리자 역할
apiVersion: v1
kind: ReplicationController
metadata:
name: replication-1
spec:
replicas: 1
selector:
app: rc
template:
metadata:
name: pod-1
labels:
app: rc
spec:
containers:
- name: container
image: kubetm/init
- 위 yaml로 파드 생성하고 삭제하면 바로 지워지지 않음
- 컨트롤러가 다시 새 파드를 생성함
2. Label
- 6개의 파드를 만듦
- 1에서 한 pod-1 지우고 시작
pod-1: web, 개발환경
apiVersion: v1
kind: Pod
metadata:
name: pod-1
labels:
type: web
lo: dev
spec:
containers:
- name: container
image: kubetm/init
pod-2: db, 개발환경
apiVersion: v1
kind: Pod
metadata:
name: pod-2
labels:
type: db
lo: dev
spec:
containers:
- name: container
image: kubetm/init
pod-3: server, 개발환경
apiVersion: v1
kind: Pod
metadata:
name: pod-3
labels:
type: server
lo: dev
spec:
containers:
- name: container
image: kubetm/init
pod-4: web, 상용환경
apiVersion: v1
kind: Pod
metadata:
name: pod-4
labels:
type: web
lo: production
spec:
containers:
- name: container
image: kubetm/init
pod-5: web, 상용환경
apiVersion: v1
kind: Pod
metadata:
name: pod-5
labels:
type: db
lo: production
spec:
containers:
- name: container
image: kubetm/init
pod-6: web, 상용환경
apiVersion: v1
kind: Pod
metadata:
name: pod-6
labels:
type: server
lo: production
spec:
containers:
- name: container
image: kubetm/init
파드 구성
서비스 생성 - svc-for-web
apiVersion: v1
kind: Service
metadata:
name: svc-for-web
spec:
selector:
type: web
ports:
- port: 8080
- type:web인 파드 2개 확인
서비스 생성 - svc-for-prod
apiVersion: v1
kind: Service
metadata:
name: svc-for-prod
spec:
selector:
lo: production
ports:
- port: 8080
- 파드에 라벨을 달아놓으면 서비스로 해당 목적의 파드를 연결할 수 있넹
3. Node Schedule
노드를 지정한 파드 생성 --> nodeSelector 사용
apiVersion: v1
kind: Pod
metadata:
name: pod-3
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/init
- 스팩을 보면 nodeSelector가 있음
- 쿠버네티스(kubernets.io) 호스트(hostname)가 노드 1번(k8s-node1)을 가리킴
- 1번은 기본적인 레이블들이 있음
- node1의 k8s-node1 레이블을 선택한 것
- 이전에 한 파드들은 다 삭제 ^^
- 파드3가 노드1에 생성됨
노드 스캐줄 생성 - 스캐줄러가 알아서 노드를 선택해주는 방법
pod-4 - 2Gi 요청
apiVersion: v1
kind: Pod
metadata:
name: pod-4
spec:
containers:
- name: container
image: kubetm/init
resources:
requests:
memory: 2Gi
limits:
memory: 3Gi
- node2에 생성됨
pod-5 - 0.5Gi 요청
apiVersion: v1
kind: Pod
metadata:
name: pod-5
spec:
containers:
- name: container
image: kubetm/init
resources:
requests:
memory: 0.5Gi
limits:
memory: 0.5Gi
- node1에 생성됨
- 노드 스캐줄러는 노드마다 점수를 매겨서 가장 높은 노드에 파드 할당
- 노드 점수에 영향을 미치는게 자원양
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 6. Volume - emptyDir, hostPath, PV/PVC (0) | 2021.02.04 |
---|---|
[k8s] 5. Service - 실습 (0) | 2021.02.03 |
[k8s] 4. Service - ClusterIP, NodePort, LoadBalancer (0) | 2021.02.01 |
[k8s] 2. 쿠버네티스 설치 (1) | 2021.01.31 |
[k8s] 1. Pod - Container, Label, NodeSchedule (0) | 2021.01.27 |