devlos
Devlos Archive
devlos
전체 방문자
오늘
어제
12-10 07:10

최근 글

  • 분류 전체보기 (107)
    • 프로젝트 (1)
    • MSA 설계 & 도메인주도 설계 (9)
    • 클라우드 컴퓨팅 & NoSQL (87)
      • [Cilium Study] 실리움 스터디 (8)
      • [KANS] 쿠버네티스 네트워크 심화 스터디 (12)
      • [T101] 테라폼 4기 스터디 (8)
      • [CICD] CICD 맛보기 스터디 (3)
      • [T101] 테라폼 기초 입문 스터디 (6)
      • [AEWS] Amazon EKS 워크숍 스터디 (7)
      • [PKOS] 쿠버네티스 실무 실습 스터디 (7)
      • Kubernetes (13)
      • Docker (7)
      • Redis (1)
      • Jenkins (3)
      • Terraform (1)
      • Ansible (4)
      • Kafka (1)
    • 프로그래밍 (7)
      • Spring Boot (5)
      • Broker (1)
    • 성능과 튜닝 (1)
    • ALM (0)
    • 기타 (2)

인기 글

태그

  • 테라폼
  • 쿠버네티스 스터디
  • terraform
  • PKOS
  • DevOps
  • docker
  • kOps
  • 데브옵스
  • 도커
  • MSA
  • cilium
  • t101 4기
  • CloudNet@
  • 쿠버네티스
  • Kubernetes

티스토리

최근 댓글

hELLO · Designed By 정상우.
devlos

Devlos Archive

쿠버네티스(Kubernetes) 공식 튜토리얼 #5
클라우드 컴퓨팅 & NoSQL/Kubernetes

쿠버네티스(Kubernetes) 공식 튜토리얼 #5

2021. 4. 3. 01:07
반응형

이번 포스팅에서는 지난 포스팅에 이어 공식 튜토리얼 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 실행결과

 

이전 포스트에서 언급했드시 kubectl get pods 명령어를 통해 현재 실행중인 서비스를 확인한다.


2. kubectl get services 실행

$ 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

kubectl get services 명령어를 실행하여 kubernetes-bootcamp라는 서비스가 동작중인 것을 확인할 수 있다.


5. kuberctl describe services/kubernetes-bootcamp 실행

 

$ kubectl 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

 

export NODE_PORT... 실행 결과

kubernetes-bootcamp가 사용중인 30302 포트를   NODE_PORT에 할당하고 출력했다.


7. curl $(minikube ip):$NODE_PORT 실행

 

$ curl $(minikube ip):$NODE_PORT

 

$ curl $(minikube ip):$NODE_PORT 실행결과

minikube ip에 해당 포트를 이용하여 서비스에 접근이 가능해졌다.

Expose 된 것이다.


8. kubectl describe deployment 실행 

 

$ 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 실행결과

kubectl get pods -l run=kubernetes-bootcamp 를 실행하면 1번 과정에서 실행한 것과 동일한 pod를 확인할 수 있다.

 

-l 옵션은 라벨을 사용하여 검색을 하는것이다.

 

kubectl get pods -l run=kubernetes-abcde 실행결과

당연한 이야기이지만 클러스터 내부에 없는 라벨로 검색하면 검색되는 리소스가 없다고 나온다.


10. kubectl get services -l run=kubernetes-bootcamp

 

$ 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

 

export POD_NAME ...  실행결과

POD_NAME에 동작중인 pod의 이름을 저장하고 출력한 결과이다.


12. Pod 라벨링 하기

 

$ kubectl label pod $POD_NAME app=v1

 

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 delete service -l run=kubernetes-bootcamp 실행결과

실행결과 삭제되었다는 로그가 출력된다.

 

이미지가 삭제되면 다음과 같이 서비스를 검색했을 때 목록에서 사라진다.

 

$ kubectl get services

 

kubectl get services 실행결과

서비스가 삭제되었기 때문에 더 이상 curl을 통해 서비스에 접근하는 것도 불가능하다.

 

$ kubectl get services

 

kubectl get services 실행결과


14. kubectl exec -ti $POD_NAME curl localhost:8080 실행

 

$ kubectl exec -ti $POD_NAME curl localhost:8080

 

 

하지만 우리의 pod는  삭제되지 않았다. 

 

kubectl exec -ti $POD_NAME curl localhost:8080 실행결과

이번 포스팅에는 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
    devlos
    devlos
    안녕하세요, Devlos 입니다. 새로 공부 중인 지식들을 공유하고, 명확히 이해하고자 블로그를 개설했습니다 :) 여러 DEVELOPER 분들과 자유롭게 지식을 공유하고 싶어요! 방문해 주셔서 감사합니다 😀 - DEVLOS -

    티스토리툴바