쿠버네티스의 가장 기본이 되는 yaml 파일 작성 및 Pod 안에 있는 컨테이너에 접속하는 방법을 알아보자
현재 Azure의 AKS를 활용하여 클러스터를 구축한 상황이다.
하나 짚고 넘어갈 것은, AKS를 사용하여 구축한 클러스터에서 Master Node는 Azure가 되고, AKS를 생성할 때 만든 노드들이 전부 Worker Node가 된다.
호스팅되는 Kubernetes 서비스인 Azure는 상태 모니터링 및 유지 관리 같은 중요 작업을 처리합니다. Kubernetes 마스터는 Azure에서 관리됩니다. 에이전트 노드만 관리하고 유지하면 됩니다. 관리되는 Kubernetes 서비스, AKS가 무료이므로 마스터가 아니라 클러스터 내의 에이전트 노드에 대해서만 지불합니다.
Azure Kubernetes Service 소개 - Azure Kubernetes Service
Azure에서 컨테이너 기반 애플리케이션을 배포 및 관리하는 Azure Kubernetes Service의 기능 및 이점을 알아봅니다.
docs.microsoft.com
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 |