이번 포스팅에서는 지난 포스팅에 이어 공식 튜토리얼 4단계를 실습해 보도록 한다.
2021.04.02 - [클라우드 컴퓨팅 & NoSQL] - 쿠버네티스(Kubernetes) 공식 튜토리얼 #4
쿠버네티스(Kubernetes) 공식 튜토리얼 #4
이번 포스팅에서는 지난 포스팅에 이어 공식 튜토리얼 3단계를 실습해 보도록 한다. 2021.04.01 - [분류 전체보기] - 쿠버네티스(Kubernetes) 공식 튜토리얼 #3 쿠버네티스(Kubernetes) 공식 튜토리얼 #3 이
devlos.tistory.com
튜토리얼 모듈 4는 service를 이용하여 어플리케이션을 expose 하는 방법에 대한 것이다.
1. kubectl get pods 실행
$ kubectl get pods
이전 포스트에서 언급했드시 kubectl get pods 명령어를 통해 현재 실행중인 서비스를 확인한다.
2. kubectl get services 실행
$ kubectl get services
Service 확인 결과 쿠버네티스라는 하나의 서비스가 실행인 것을 확인할 수 있다.
3. kubectl expose ... 실행
$ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
service/kubernetes-bootcamp exposed
$ kubectl get services
kubectl expose 명령어를 이용하여 새로운 kubernetes-bootcamp라는 서비스를 실행한다.
expose 명령어를 사용하면 외부로 서비스를 노출시킬 수 있다.
Deployment는 애플리케이션 배포를 담당하는 리소스이다.
* 부가설명: Pod이 컨테이너의 실행을 담당하는 리소스라면, Pod이 죽어도 서비스가 중단되지 않게 복제를 하는 리소스가 ReplicaSet이고, 이 전체를 배포하는 것이 Deployment라고 이해했다. (이 부분에 대해서는 학습중이기 때문에 내용이 틀렸다면 말씀 부탁드립니다.)
expose 옵션들의 내용을 정리하자면 다음과 같다.
삽질의 달인님 블로그와 공식 Docs에 관련내용이 잘 정리되어 있어서 내용을 참고하였다.
디플로이먼트에 등록되어 있는 이미지 (앱) -> deployment/kubbernetes-bootcamp
- [--port=port]: 외부로 노출할 포트
- [--protocol=TCP|UDP]: 외부로 노출할 포트의 프로토콜
- [--target-port=number-or-name]: 서비스가 트래픽을 보내야 하는 컨테이너의 포트 이름 또는 번호
- [--name=name]: 서비스의 이름
- [--external-ip=external-ip-of-service]
- [--type=type]: 통신 범위 설정
ClusterIP : 내부 통신만 가능하도록
NodePort: 외부 포트로 통신이 가능하도록
LoadBalancer: 외부 로드벨런서를 생성하고 고정된 외부 IP를 서비스에 할당
4. kubectl get services 실행
$ kubectl get services
kubectl get services 명령어를 실행하여 kubernetes-bootcamp라는 서비스가 동작중인 것을 확인할 수 있다.
5. kuberctl describe services/kubernetes-bootcamp 실행
$ kubectl describe services/kubernetes-bootcamp
kubernetes-bootcamp 서비스의 상세 내용에 대해서 확인할 수 있다.
6. NODE_PORT 저장
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
$ echo NODE_PORT=$NODE_PORT
kubernetes-bootcamp가 사용중인 30302 포트를 NODE_PORT에 할당하고 출력했다.
7. curl $(minikube ip):$NODE_PORT 실행
$ curl $(minikube ip):$NODE_PORT
minikube ip에 해당 포트를 이용하여 서비스에 접근이 가능해졌다.
Expose 된 것이다.
8. kubectl describe deployment 실행
$ kubectl describe deployment
kubectl describe deployment 명령어를 이용하여 run=kubernetes-bootcamp이라는 라벨 이름을 확인할 수 있다.
9. kubectl get pods -l run=kubernetes-bootcamp 실행
$ kubectl get pods -l run=kubernetes-bootcamp
kubectl get pods -l run=kubernetes-bootcamp 를 실행하면 1번 과정에서 실행한 것과 동일한 pod를 확인할 수 있다.
-l 옵션은 라벨을 사용하여 검색을 하는것이다.
당연한 이야기이지만 클러스터 내부에 없는 라벨로 검색하면 검색되는 리소스가 없다고 나온다.
10. kubectl get services -l run=kubernetes-bootcamp
$ kubectl get services -l run=kubernetes-bootcamp
서비스로 검색해도 내용을 확인할 수 있다.
11. Pod이름 저장하기
$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
$ echo Name of the Pod: $POD_NAME
POD_NAME에 동작중인 pod의 이름을 저장하고 출력한 결과이다.
12. Pod 라벨링 하기
$ kubectl label pod $POD_NAME app=v1
위와 같이 pod에 새로운 라벨을 붙이는 것도 가능하다.
$ kubectl describe pods $POD_NAME
POD_NAME을 이용하여 pod의 정보를 얻으면 아래와 같이 Labels: 부분에 app=v1이 추가된 것을 확인할 수 있다.
$ kubectl get pods -l app=v1
이렇게 조회하는 것도 가능하다.
13. 서비스 삭제하기
다음과 같이 라벨을 이용해 서비스상에서 pod을 삭제를 하는 것도 가능하다.
$ kubectl delete service -l run=kubernetes-bootcamp
실행결과 삭제되었다는 로그가 출력된다.
이미지가 삭제되면 다음과 같이 서비스를 검색했을 때 목록에서 사라진다.
$ kubectl get services
서비스가 삭제되었기 때문에 더 이상 curl을 통해 서비스에 접근하는 것도 불가능하다.
$ kubectl get services
14. kubectl exec -ti $POD_NAME curl localhost:8080 실행
$ kubectl exec -ti $POD_NAME curl localhost:8080
하지만 우리의 pod는 삭제되지 않았다.
이번 포스팅에는 pod의 애플리케이션을 expose기능을 이용하여 외부에서 접근 가능한 service 형태로 배포하는 것을 해보았다.
Deployment와 ReplicaSet에 대해 제대로 설명된 자료를 찾는다고 힘들었던 포스팅이다. 알고 보니 어렵지 않은 내용이었는데..
이 내용은 다음번에 따로 정리하여 포스팅을 올리려고 한다.
다음 포스팅에서는 5번째 튜토리얼인 "Running Multiple Instances of Your App"에 대해서 진행 내용을 정리해보려고 한다.
참고자료
[1] kubernetes.io | Kubernetes Tutorial | 링크
튜토리얼
운영 수준의 컨테이너 오케스트레이션
kubernetes.io
[2] 15단계로 배우는 도커와 쿠버네티스 | 타카라 마호 | 2020.10 | 링크
15단계로 배우는 도커와 쿠버네티스 - 교보문고
이 책은 컨테이너 기술에 처음 입문하는 독자도 체계적으로 실력을 쌓아갈 수 있도록 도커부터 시작하여 쿠버네티스의 전반적인 기능을 기초부터 단계별로 학습할 수 있도록 구성되어 있다. 독
www.kyobobook.co.kr
[3] 삽질의 달인 블로그 | 링크
07. KUBECTL
kubectl 유틸리티는 강력한 도구다. 이 명령줄 유틸리티는 사용자가 입력한 명령을 RestAPI 로 변경해 API 서버와 통신을 하며 API 서버 서버 응답인 HTTP Response 를 사용자가 읽을 수 있는 형태로 보여
kin3303.tistory.com
[4] kubernetes.io | Docs | 링크
Kubectl Reference Docs
kubernetes.io
'클라우드 컴퓨팅 & NoSQL > Kubernetes' 카테고리의 다른 글
쿠버네티스(Kubernetes) 공식 튜토리얼 #7 (0) | 2021.04.04 |
---|---|
쿠버네티스(Kubernetes) 공식 튜토리얼 #6 (0) | 2021.04.04 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #4 (0) | 2021.04.02 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #3 (0) | 2021.04.01 |
쿠버네티스( Kubernetes) 공식 튜토리얼 #2 (0) | 2021.04.01 |