kok202
쿠버네티스 강의 정리 ( 1강 : 오버뷰, Deployment)

2019. 6. 1. 03:48[정리] 기능별 개념 정리/Kubernetes

이 강의를 정리합니다. : https://www.youtube.com/watch?v=IFc1mG48j0s

위 강의는 다음 문서를 참고하고 있습니다.

정리는 강의의 문서를 따라 1.10 을 기준으로 정리합니다.

1.10 버전 : https://v1-10.docs.kubernetes.io/docs/tutorials/kubernetes-basics/ (강의. 영어)

1.14 버전 : https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/ (현재. 한국어)

 

쿠버네티스 기초 학습

쿠버네티스 기초 이 튜토리얼에서는 쿠버네티스 클러스터 오케스트레이션 시스템의 기초를 익힐 수 있는 가이드를 제공한다. 각각의 모듈에는 쿠버네티스의 주요 기능과 개념에 대한 배경 지식이 담겨 있으며 대화형 온라인 튜토리얼도 포함되어 있다. 대화형 튜토리얼에서 간단한 클러스터와 그 클러스터 상의 컨테이너화 된 애플리케이션을 직접 관리해볼 수 있다. 대화형 튜토리얼을 사용해서 다음의 내용을 배울 수 있다. 컨테이너화된 애플리케이션을 클러스터에 배포하기 디플로이

kubernetes.io

 

쿠버네티스 개요 : https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/ 

minikube : https://kubernetes.io/docs/tutorials/

쿠버네티스의 아주 작은 버전, 웹에서 쿠버네티스를 배울수 있는 환경

 

 

 

 

쿠버네티스의 목적

- 개발자가 배포를 다운타임이 없이 하루에도 여러번 할 수 있는 수준이 되는것을 목표로 한다.

- 컨테이너 중심의 관리 플랫폼이다.

- 소프트웨어를 패킹하는 것을 도와준다.

- 어떤 특정 머신에 배포하기 위해 머신에 들어가서 일일히 하나씩 배포하는게 아니라 프로젝트를 쿠버네티스에 요청하여 분산 배포를 자동화 하는것을 목적으로한다.

 

쿠버네티스는 주요 자동화 포인트

1. 좀 더 효율적인 방법으로 어플리케이션 컨테이너들의 어디에 분산해야 할지를 자동화한다.

2. 좀 더 효율적인 방법으로 어플리케이션 컨테이너들을 스케줄링 할지 자동화한다.

*. 어플리케이션을 어떻게 배포할 것인가는 Docker 가 좀 더 주요 포인트인 듯하다.

 

 

 

 

쿠버네티스 

- 하나의 유닛으로 연결된 여러 컴퓨터들의 클러스터를 추상화한게 쿠버네티스다.

- 도커 이미지를 배포할 수 있는 클러스터다. 

 

마스터 : 클러스터를 관장하는 매니저

- 모든 액티비티를 관리 (실행, 중지, 스케일링)

- 컨테이너를 띄우진 않고 클러스터를 관리만한다.

 

노드 : 어플리케이션을 돌리는 워커, 

- kubelet 을 가지고 있다.

- kubelet 은 하나의 노드를 관리하는 agent다.

- kubelet 을 통해 master 와 쿠버네티스 API 를 통해 통신한다.

- kubelet 안에는 Docker를 핸들링하는 툴이 필요하다.

 

minikube version  
minikube start  

 

kubectl version  
kubectl cluster-info 쿠버네티스의 마스터 정보 등이 들어있다.
kubectl get nodes 쿠버네티스 안의 모든 노드 정보를 보여준다.

 

 

 

 

 

쿠버네티스 Deployment (배포)

쿠버네티스를 배포하려면 배포 설정 파일이 필요하다. ( Deployment 설정 파일이 필요하다. )

Deployment 는 마스터가 관리한다. 

 

Deployment 설정 내용

어플리케이션 이미지를 명시한다.

몇개의 어플리케이션을 실행하기를 원하는지 명시한다.

쿠버네티스가 어떻게 인스턴스를 만들지 명시한다.

쿠버네티스가 어떻게 인스턴스를 갱신해야하는지 명시한다.

 

Deployment 컨트롤러의 역할

인스턴스가 만들어지고 인스턴스를 모니터링 하는 역할을 한다. 노드의 다운, 삭제가 되면 감지하고 다른 노드에 배포한다. (장애복구!)

 

kubectl run

kubectl run 의 역할 : Deployment 를 새로 생성하고 실행한다. 

1. Deployment 이름을 지정해줘야한다.

2. 어플리케이션 이미지의 위치를 알려줘야 한다.

* 어플리케이션 이미지가 도커 허브에 올라가있으면 이를 올리면 된다.

* 어플리케이션 이미지가 도커 허브에 올라가있지 않으면 Repository 전체 경로를 주면된다.

[] 어플리케이션을 특정 포트에서 실행하길 원하면 포트 파라미터를 주면된다.

 

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

1. Deployment 이름은 kubernetes-bootcamp 다.

2. Deployment 이미지는 gcr.io/google-samples/kubernetes-bootcamp:v1 에있다.

3. Deployment 는 port 8080 으로 열려있다.

 

kubectl get deployments

Deployment 정보를 볼 수 있다.

 

이 어플리케이션이 어떻게 도는지 볼려면 pod 를 보면된다. pod 는 기본적으로 클러스터 밖에서 접근이 불가능하고 클러스터 안에서만 서로 접근이 가능한 private 하고 isolated 된 쿠버네티스의 개념이다. (참고 : API 서버는 각 pod 이름을 기반해서 자동으로 endpoint를 만든다.) 

 

kubectl proxy

호스트와 쿠버네티스 클러스터 간의 연결을 한다. minikube 에서 다른 터미널을 열고 위 커맨드를 실행하면 starting to serve on 127.0.0.1:8001 이라고 뜨는데 127.0.0.1:8001 으로 들어오는 요청은 kubectl run 으로 생성, 실행한 deployment (8080 포트의 어플리케이션) 으로 연결된다.