쿠버네티스

쿠버네티스란 무엇인가

o_b:us 2022. 6. 13. 18:29

쿠버네티스란 무엇인가?

쿠버네티스 아키텍처

쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합체이다. 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다. 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다. 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.

쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다. K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다.

쿠버네티스에서 사용하는 기본 용어들이 있습니다.

마스터(Master) : 노드를 제어하고 전체 클러스터를 관리해주는 컨트롤러 이며, 전체적인 제어/관리를 하기 위한 관리 서버 입니다.

노드(nod) : 컨테이너가 배포될 물리 서버 또는 가상 머신 이며 워커 노드(Worker Node) 라고도 부릅니다.

포드(pod) : 단일 노드에 배포된 하나 이상의 컨테이너 그룹이며, 포드라는 단위로 여러개의 컨테이너를 묶어서 포드 단위로 관리 할 수 있게 해줍니다.

정리: 마스터 노드는 워커 노드를 관리하기 위한 노드이며,마스터 노드나 API Server가 다운되더라도, URL을 접속하는 일에 전혀 상관을 하지 않기 때문에 앱을 실행시키는데에 문제가 생기지 않는다.(앱과 관련된 컨테이너를 실행시키는 노드는 워커 노드!)



GKE(Google Kubernetes Engine)



쿠버네티스 클러스터 생성하기

일단 Google Cloud Platform에서 kubernetes Engine을 검색하고 만들기를 누른다. 첫 시작이니까 클러스터를 기본적으로 구성하고 만들어준다.


앱을 쿠버네티스 클러스터에 배포하기





엔드포인트확인

  1. 연결(connect)버튼을 누른다.
  2. 명령줄 액세스의 명령어를 복사한다.
  3. cloud shell 버튼을 누른다.
  4. cloud shell 커맨드라인에 복사한것을 붙여넣어서 실행한다.
  5. cloud shell에 kubectl create deployment hello-world-rest-api --image=in28min/hello-world-rest-api:0.0.1-RELEASE
  6. kubectl expose deployment hello-world-rest-api --type=LoadBalancer --port=8080
  7. 구글 클라우드에서 서비스 및 수신에서 확인할 수 있다.

※클라우드 환경에서는 리소스를 사용하지 않을 때 사이즈를 줄여놓는게 좋으므로
gcloud container clusters resize --zone us-central1-c first-cluster --num-nodes=0 명령어를 실행해주자.사용할때마다 노드사이즈만 0에서 3으로 변경하자!



kubectl 명령어 (쿠버네티스 전용 명령어)



  • kubectl version 버전확인
  • kubectl create deployment 배포할 이름 --image=도커이미지
    (ex. kubectl create deployment hello-world-rest-api --image=in28min/hello-world-rest-api:0.0.1-RELEASE)
  • kubectl expose deployment hello-world-rest-api --type=LoadBalancer --port=8080
  • gcloud container clusters resize --zone --num-nodes=0(ex. gcloud container clusters resize --zone us-central1-c first-cluster --num-nodes=0)
  • kubectl get events
  • kubectl get events --sort-by=.metadata.creationTimestamp(시간순서대로 이벤트 확인)
  • kubectl get pods
  • kubectl get replicaset(또는 rs)
  • kubectl get deployment
  • kubectl get service
  • kubectl describe pod (포드이름)
  • kubectl componentstatuses // 마스터노드 확인
    그 외의 명령어들 확인하기

포드 자동생성 확인하기



  1. kubectl get pods -o wide(pod 세부정보) 포드의 세부정보를 확인해보자.
  2. kubectl delete pods hello-world-rest-api-nums-nums-pod 자동생성 확인을 위하여 pod를 삭제해보자. 이렇게 삭제하더라도 다시 포드를 확인해보보면 새로운 포드(아이디번호가 다른)가 자동생성 되어 있다. 바로 replicaset(레플리카셋)이 항상 포드를 모니터링 하고 있고 필요한 포드 수보다 수가 줄어들면, 포드를 만들어냅니다.
  3. kubectl scale deployment hello-world-rest-api --replicas=3 레플리카셋에서 관리하는 포드의 개수를 3개 만들어보자.
    kubectl scale deployment를 이용하여 더 많은 포드를 유지할 수 있다.



새버전 배포시에도 자동 관리가 됨



  • kubectl set image deployment hello-world-rest-api hello-world-rest-api=DUMMY_IMAGE:TEST(오류가 있는 주소로 배포나 잘못된 이미지) 배포하더라도 계속해서 실행된다.
  • 또한 새 버전의 포드(인스턴스)를 늘리고 기존 버전의 포드(인스턴스)를 삭제하는 롤링업데이트 방식으로 무중단 배포가 이루어진다.



구글 클라우드 지역(region)과 지역대(zone) 이해하기



구글 클라우드는 전세계적으로 region을 갖고 있는데 왜 여러 region을 갖고 있을까? ->

  1. 거리가 먼 곳에 앱을 배포해버리면 접속하는데에 대기 시간이 길어질 것이다. 그러므로 가까운 지역에 배포할 수 있게끔 해준다.
  2. 특정 지역에만 배포해버리면 가용성이 떨어진다. 특정 지역이 전쟁으로 인해 다운이 되어버릴 수 도 있기 때문에 여러 지역에 걸쳐 배포를 해놔야 한다.
  3. 법률상의 이유로 국가 외로 데이터를 가져가는게 불법일 수 있기 때문에 해당 국가에 region이 있을 수도 있다.