Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

4장에서 만든 image파일이 있어야 한다. 

직접 실습하며 만들어도 되고, 아래 파일을 직접 docker hub 에서 다운로드 가능하다.

gihyodocker/nginx:latest

...

gihyodocker/nginx-nuxt:latest

nginx

http://wikibook.co.kr/docker-kubernetes/

gihyodocker/{프로젝트명}:latest

docker image build -t {image이름:버전}  # 쿠버네티스 컨테이너를 만들 때 설정파일에 이미지 이름이 필요하다



1. 클라우드 환경

GCP 에서 제공하는 GKE(Google Kubernetes Enging) 를 사용한다.

GKE 는 쿠버네티스의 개발을 주도하는 구글이 제공하는 것으로, 쿠버네티스 서비스 중 가장 널리 사용된다.

...


1. GCP 프로젝트 생성

autumn-kuber 라는 이름으로 생성했다.

Image Added



2. gcloud SDK 설치 및 인증

gcloud SDK 는 GCP 서비스를 CLI 에서 조작하게 해주는 도구다.

...

https://cloud.google.com/sdk/docs/downloads-interactive?authuser=2&hl=ko#mac

(mac os 기준)

Code Block
languagebash
curl <https://sdk.cloud.google.com> | bash
exec -l $SHELL    # 재시작
gcloud init       # 사용할 계정, 프로젝트 등을 셋팅

...


설치되어 있는 경우 최신 버전으로 업데이트 한다.

Code Block
languagebash
gcloud components update

...


인증 및 초기설정

Code Block
languagebash
gcloud auth login
gcloud config set project autumn-kuber  # init 했을 경우 생략 가능
gcloud config set compute/zone asia-northeast1-a



3. 쿠버네티스 클러스터 생성

옵션

—cluster-version (클러스터 버전)

...

(교재의 버전은 예전 버전이라 지원되지 않음! 최신 버전으로 해주세요)

Code Block
languagebash
gcloud container clusters create autumn \

...


--cluster-version=**1.12.8-gke.10** \

...


--machine-type=n1-standard-1 \

...


--num-nodes=3

...


다음 에러 발생 시

GCP 콘솔에서 GKE 사용 설정이 필요!

Image Added


생성 완료

Image Added


gcloud 로 kubernetes 클러스터를 제어할 수 있도록 kubectl 에 인증정보 설정

Code Block
languagebash
gcloud container clusters get-credentials autumn

...


확인

Code Block
languagebash
kubectl get nodes

...



4. TODO 앱 구축

4장에서 만들었던 TODO 애플리케이션을 클라우드에 구축해보자.

...

  • 퍼시스턴트볼륨 (PersistentVolume)
  • 퍼시스턴트볼륨클레임 (PersistentVolumeClaim)
  • 스토리지클래스 (StorageClass)
  • 스테이트풀세트 (StatefulSet)


퍼시스턴트볼륨(PV)과 퍼시스턴트볼륨클레임(PVC)

인프라에 대한 복잡성을 추상화 하기 위한 방법.

쿠버네티스에서 스토리지를 확보하려면 퍼시스턴트볼륨과 퍼시스턴트볼륨클레임 이라는 리소스를 사용한다. 이 리소스는 클러스터가 구축된 플랫폼을

...

지원하는 퍼시스턴스 볼륨을 생성하기 위해 사용된다.

Image Added


퍼시스턴트볼륨 : 물리적 스토리지. 파드와 별개로 관리되며 별도의 생명주기를 가지고 있음.

퍼시스턴트볼륨클레임 : 추상화된 논리 리소스 (용량 동적 확보 가능). 사용자가 PV 에 하는 요청. (PV 를 파드에 직접 연결하는 것이 아니라, PVC 를 통해 사용한다)

접근 권한 (읽기/쓰기), 접근 노드 개수, 스토리지 종류 등을 설정할 수 있다.

*Dynamic Provisioning

별도로 PV 를 미리 정의할 필요 없이, PVC 만 정의하면 자동으로 PV 를 생성해주는 기능

Image Added


스토리지 클래스

퍼시스턴트볼륨으로 확보한 스토리지의 종류를 정의하는 리소스다. 동적 생성 시 PVC 에 스토리지 클래스를 지정하여 이에 맞는 디스크가 생성될 수 있다.

스테이트풀세트

stateless 애플리케이션을 배포하는 데 적합한 '디플로이먼트' 와 다르게,

'스테이트풀세트' 는 stateful 애플리케이션을 관리하는 데 적합한 리소스다. (컨트롤러)

디플로이먼트에서 생성한 파드 : 무작위로 생성된 식별자

스테이트풀세트에서 생성한 파드 : 일련번호가 붙는 유일한 식별자

→ 파드의 식별자가 안정적이기 때문에 파드가 재생성되어도 스토리지가 계속 같은 파드에 연결된다. 데이터를 똑같이 복구할 수 있다.


  • docker-kubernetes-master/ch06/ch06_3_3/*

...

설정의 volumeClaimTemplates 을 통해 퍼시스턴트볼륨클레임을 파드마다 자동으로 생성하는 템플릿을 생성할 수 있다.

따라서 각 파드(MySQL) 가 요구하는 퍼시스턴트볼륨클레임을 매번 만들지 않아도 된다.

Code Block
languagebash
kubectl apply -f mysql-master.yaml


슬레이브용 설정
Code Block
languagebash
kubectl apply -f mysql-slave.yaml


확인
Code Block
languagebash
kubectl get pod

초기 데이터 등록

(init-data.sh 는 tododb 디렉터리에 있다. 없을 경우 github 에서 받을 수 있다)

Code Block
languagebash
kubectl exec -it mysql-master-0 init-data.sh

p.235

error: unable to upgrade connection: container not found ("mysql")



4-2. TODO API

Nginx 와 API 는 강한 결합을 가져도 무방하기 때문에 파드 형태로 함께 구성한다.

Code Block
languagebash
kubectl apply -f todo-api.yaml

확인
Code Block
languagebash
kubectl get pod -l app=todoapi

4-3. TODO WEB

p.240

Code Block
languagebash
kubectl apply -f todo-web.yaml

...


정적 파일을 Nginx 에서 제공할 수 있도록 쿠버네티스 볼륨을 만들었다.

(emptyDir, volumeMounts)

web 컨테이너에 있는 정적 파일을 Nginx 컨테이너에 복사한다.

(todoweb 디렉토리 필요. 없을 경우 github 에서 받을 수 있다)

Code Block
languagebash
cp -R /todoweb/.nuxt/dist /

web 컨테이너의 /dist 디렉터리는 가상 볼륨을 통해 Nginx 와 공유되므로, Nginx 컨테이너의 /var/www_nuxt 디렉터리에도 파일이 위치한다.
Code Block
languagebash
ls -l /var/www/_nuxt/


4-4. 인그레스

인그레스를 통해 외부에서 웹 어플리케이션에 접근 가능하도록 해준다.

Code Block
languagebash
kubectl apply -f ingress.yaml
kubectl get ingress

...



...

참고


쿠버네티스의 볼륨

쿠버네티스의 볼륨은 컨테이너가 아닌 파드에 종속된다. 따라서 그 파드 안에 속해있는 컨테이너 간 공유가 가능하다.

...