쿠버네티스의 가장 기본이 되는 yaml 파일 작성 및 Pod 안에 있는 컨테이너에 접속하는 방법을 알아보자
현재 Azure의 AKS를 활용하여 클러스터를 구축한 상황이다.
하나 짚고 넘어갈 것은, AKS를 사용하여 구축한 클러스터에서 Master Node는 Azure가 되고, AKS를 생성할 때 만든 노드들이 전부 Worker Node가 된다.
호스팅되는 Kubernetes 서비스인 Azure는 상태 모니터링 및 유지 관리 같은 중요 작업을 처리합니다. Kubernetes 마스터는 Azure에서 관리됩니다. 에이전트 노드만 관리하고 유지하면 됩니다. 관리되는 Kubernetes 서비스, AKS가 무료이므로 마스터가 아니라 클러스터 내의 에이전트 노드에 대해서만 지불합니다.
yaml 파일 작성
아래 파일은 다음과 같은 내용을 담고 있다
- 종류 : Pod
- Pod에 들어가는 컨테이너 : 2개
- container1, port : 8000
- container2, port: 8080
- 사용하는 이미지는 docker.hub에서 가져온다
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
yaml 파일 적용 및 삭제
kubectl apply 를 통해 위에서 만든 yaml 파일에 정의된 리소스(오브젝트)를 생성해보자.
$ kubectl apply -f test.yaml
만약, 해당 리소스를 지우고 싶으면 delete 명령어를 사용한다.
$ kubectl delete -f test.yaml
pod 확인 및 컨테이너 접속
먼저 현재 올라와있는 파드를 확인한다
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-1 2/2 Running 0 8h
현재 2/2라는 것은 1개의 파드에 2개의 컨테이너가 2개 모두 정상적으로 돌아간다는 의미이다. 이 컨테이너들은 쿠버네티스 클러스터 내에서 접속할 수 있는 ip를 가지고 있다.
동일한 Pod 내에 배포된 Container들은 같은 IP를 공유하며 내부적으로 포트를 통해 통신이 가능하다. 물론 포트가 중복되서는 안된다.
describe 명령어를 통해 pods내에 배포된 container의 정보를 알 수 있다.
$ kubectl describe pods
Name: pod-1
Namespace: default
Priority: 0
Node: aks-agentpool-19228959-vmss000001/10.240.0.5
Start Time: Wed, 20 Jan 2021 09:44:42 +0000
Labels: <none>
Annotations: <none>
Status: Running
IP: 10.244.1.19
IPs:
IP: 10.244.1.19
Containers:
container1:
Container ID: docker://076a8ed1324c1260121948cb27f800ed76d32136b144353f3561cb9ccf7e21e5
Image: kubetm/p8000
Image ID: docker-pullable://kubetm/p8000@sha256:3fc0e2cea5a67646f2f7a8dbef8cc59697ee010a0a9e66fcdca045999b419cc2
Port: 8000/TCP
Host Port: 0/TCP
State: Running
Started: Wed, 20 Jan 2021 09:44:56 +0000
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-lhwbk (ro)
container2:
Container ID: docker://64f965e16b945687c03a72d41452b31d2bd55af1bae35e055779799e01974f28
Image: kubetm/p8080
Image ID: docker-pullable://kubetm/p8080@sha256:527ddab085f34dac27c7b45197efe9ee478582b0e02e84bbd9f6defdbc7697b5
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Wed, 20 Jan 2021 09:44:59 +0000
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-lhwbk (ro)
컨테이너에 접속하기 위해서는 docker 컨테이너 접속과 마찬가지로 exec -it 명령어를 사용한다.
컨테이너가 2개가 떠있으므로 어떤 컨테이너에 접속할 것인지를 같이 써준다. 만약 써주지 않으면 default 컨테이너로 접속한다 (이 경우에는 container1로 접속되었다)
# 접속할 컨테이너를 따로 명시하지 않은 경우
$ kubectl exec -it pod-1 -- /bin/sh
Defaulting container name to container1.
Use 'kubectl describe pod/pod-1 -n default' to see all of the containers in this pod.
# 접속할 컨테이너를 명시 : -c 옵션 사용
$ kubectl exec -it pod-1 pod-1 -c container2 -- /bin/sh
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes Study - 06] Volume - emptyDir, hostPath, PV/PVC (0) | 2021.02.09 |
---|---|
Kubernetes 명령어 정리 (0) | 2021.02.03 |
[Kubernetes Study - 05] 기본 실습 (3) - AKS를 이용한 내부 클러스터 통신 (0) | 2021.01.22 |
[Kubernetes Study - 02] 기본 개념 이해 (0) | 2021.01.19 |
[Kubernetes Study - 01] Introduction (0) | 2021.01.04 |