< Running Databases in Kuberetes Cluster >
Kubernetes automates the deployment on containerrized applications
Kubernetes는 컨테이너화된 애플리케이션의 배포를 자동화
- 쿠버네티스는 공유 리소스 클러스터 내에서 애플리케이션을 실행하기 위한 오픈소스 크로스 플랫폼 프레임워크
- 쿠버네티스를 사용하기 위해서는 애플리케이션은 도커 이미지 안에 패키징해야 함
데이터베이스의 경우 이미 구성된 데이터베이스 소프트웨어가 있는 도커 이미지를 찾을 수 있음 - 공급 업체 또는 다른 제 3자가 이미지를 제공하면 인터넷을 통해 다운로드할 수 있음
- 도커 이미지를 얻은 후 클러스터에 이미지를 배포하기 위해서는 yaml 형식의 구성 파일이 필요하며
구성 후, 특정 워크로드에 적용 가능하며 몇 가지 간단한 CLI 명령어를 통해 배포, 관리, 삭제 가능 - 쿠버네티스는 배포가 동기화되지 않은 경우에도 얻을 수 있는 결과를 보장하며
구성이 수정될 경우 새 구성과 일치하도록 배포를 변경
또한 비정상 상태가 되어도 정상 상태를 유지
Advantages of Kubernetes
쿠버네티스의 장점
- 초기 구성이 완료된 후 배포를 재현하고 테스트를 하기 위해
업데이트 제거 및 배포 삭제를 간단한 스크립트로 자동화하여 다른 환경으로도 빠르고 쉽게 이동 가능 - 많은 기여자가 있는 클라우드 네이티브 재단에서 관리하는 매우 인기있는 오픈 소스 프로젝트이자 클록 크로스 플랫폼이므로
- Linux 및 Windows에서 지원하며 다양한 공용 및 사설 클라우드 등 모든 주요 클라우드 제공업체에서 사용 가능
(AWS의 Kubernetes, Microsoft의 Azure Kubernetes, Google의 GKE, Red Hat의 Openshift) - 온프레미스나 하이브리드 환경에서도 실행할 수 있으며 자체 데이터 센터에서 실행되는 머신 클러스터에 직접 설치 가능
하나의 도구와 하나의 스크립트 세트를 이용해 모든 환경에서 소프트웨어를 배포할 수 있음
Kubernetes clusters consist of master and worker nodes
Kubernetes 클러스터는 마스터 및 작업자 노드로 구성
- 쿠버네티스를 사용하려면 구성을 변경해야 함
- 클러스터가 필요하며 클러스터에는 하나 이상의 마스터가 필요하고 몇 개의 작업자 노드가 필요
- 명령과 구성이 마스터로 전송되며 마스터는 구성을 저장하고 작업자 노드에게 애플리케이션을 배포한 다음 모니터링
만약 무언가 실패할 경우 마스터는 쿠버네티스 엔진이 사용될 때 애플리케이션이 예상대로 실행되고 있는지 확인해 수정 - 구글은 마스터를 서비스로 제공하며 마스터의 가용성과 확장성을 보장
Google Kubernetes Engine (GKE) automates the creation of Kubernetes clusters
Google Kubernetes Engine(GKE)은 Kubernetes 클러스터 생성을 자동화
- Google Kubernetes 엔진을 이용해 Google 클라우드에 클러스터를 생성
- 노드의 위치 번호와 각 노드의 크기를 지정하면 사전 구성된 가상 머신으로 컴퓨팅 엔진이 실행되고 GKE 서비스에 의해 관리
- 마스터 노드는 Google에서 자동으로 제공하기 때문에 작업자 (작업자 노드) 를 구성하기만 하면 됨
- 또한 설정할 수 있는 추가 옵션이 많이 있음
Automate cluster creation with the Google Cloud SDK
Google Cloud SDK로 클러스터 생성 자동화
- Google Cloud SDK 및 CLI를 사용해 클러스터 생성을 쉽게 스크립팅할 수 있으며
gcloud를 통해 간단히 클러스터 생성 명령을 할 수 있음 - gcloud container clusters create 클러스터이름 매개변수(시스템 크기, 노드 수, 보안 설정 등) 순으로 표시
To send commands to the master, first log in to the cluster
마스터에 명령을 보내려면 먼저 클러스터에 로그인
- 명령을 보내기 위해 자격 증명 얻기를 호출하며 여러 클러스터를 가질 수 있으므로 올바른 하나의 클러스터에 연결 필요
The kubectl CLI is used to send commands to the cluster
kubectl CLI는 클러스터에 명령을 보내는 데 사용
- 클러스터에 연결을 한 후에는 Google Cloud SDK에 포함되어 있는 kubectl cli를 사용할 수 있으며
유지 관리를 담당하는 클라우드 네이티브 재단에서 CLI를 다운로드할 수 있음
YAML is used to configure an application
YAML은 애플리케이션을 구성하는 데 사용
- 데이터베이스에 대해 쿠버네티스 클러스터에서 실행되도록 애플리케이션 구성하는 yaml을 사용
- 디스크 영구 볼륨 클레임으로 수행한 다음 배포를 구성하며 마지막으로 실행할 도커 이미지를 지정하여 서비스를 구성
- 서비스에서 데이터베이스에 연결해야 하는 클라이언트 애플리케이션에서 데이터베이스에 대한 액세스를 제공
PersistentVolumeClaim reserves disk space on the cluster
PersistentVolumeClaim은 클러스터에서 디스크 공간을 예약
- 영구 볼륨 클레임을 구성하는 예
- 클러스터의 디스크 공간이 데이터베이스에서 사용할 이름인 mysql-data-disk를 참고
- 액세스 모드는 한 배포에서 사용하는 ReadWriteOnce (읽기-쓰기) 디스크로 만듦
- 1GB의 디스크 공간만 할당
In a Deployment, specify the Docker image
배포에서 Docker 이미지 지정
- 배포 구성의 일부 예
- mysql 버전 5.7 도커 이미지가 다운로드되어 클러스터에서 실행
- 3306 포트가 기본적으로 mysql이 실행되는 포트
Also in a Deployment, mount the volume claims and specify paths
또한 배포에서 볼륨 클레임을 탑재하고 경로를 지정
- 볼륨 섹션 영구 볼륨 클레임 예
- mysql-data-disk(영구 볼륨 클레임)가 mysql-data 라는 볼륨으로 연결되고
해당 볼륨에 대해 /var/lib/mysql은 데이터베이스가 데이터를 쓸 위치
In a Deployment, you can configure environment variables
배포에서 환경 변수를 구성할 수 있음
- mysql 루트 사용자의 암호에 대해 환경 변수가 생성되고 있다는 배포 구성 알림
- 암호 값은 쿠버네티스 암호로 별도로 저장됨
Secrets are used to keep sensitive data out of the configuration files
비밀은 구성 파일에서 민감한 데이터를 유지하는 데 사용
- 민감한 데이터를 구성 파일에서 제외하는 것의 예
- 이 시점에서 암호가 별도로 생성됨
Service provides access to the database running in the cluster
서비스는 클러스터에서 실행 중인 데이터베이스에 대한 액세스를 제공
- 서비스는 클러스터에서 실행 중인 프로그램에 대한 액세스를 제공
- 클라이언트는 클러스터의 애플리케이션에 직접 연결하지 않고 각 서비스를 통해 이동하며
할당된 IP 주소 요청은 배포된 응용 프로그램에 대한 요청을 프록시하는 서비스에 만들어짐 - 위의 예시에서 응용 프로그램은 이전에 구성한 mysql 데이터베이스 서비스가 되는 것
When the configuration is complete,
use kubectl to deploy the resources specified in the YAML files
구성이 완료되면 kubectl을 사용하여 YAML 파일에 지정된 리소스를 배포
- 응용 프로그램을 배포할 준비가 되면 구성 코드를 하나 이상의 파일에 저장할 수 있음
- 위처럼 kubectl apply 명령을 사용해 구성 파일을 지정하여 적용하며,
만약 apply 대신 delete를 사용하는 경우 클러스터에서 구성된 모든 것을 제거
Helm can be used to simplify deployment of databases to a Kubernetes cluster
Helm은 Kubernetes 클러스터에 대한 데이터베이스 배포를 단순화하는 데 사용할 수 있음
- 데이터베이스를 클러스터 장체 배포하는 더 쉽고 나은 방법인 쿠버네티스를 위한 오픈소스 패키지 매니저 Helm이 존재
- Linux의 apt-get 또는 Windows의 chocolaty와 유사한 쿠버네티스용 오픈 소스 패키지 관리자
- 클러스터에서 실행할 수 있도록 helm을 구성한 다음 helm 차트를 사용해 배포를 자동화할 수 있음
- heml 차트는 mysql과 같은 많은 데이터베이스를 포함한 수백 개의 애플리케이션에 대해 사전 구성된 배포를 제공
After Helm is initialized on a Kubernetes cluster, installing applications is easy
Kubernetes 클러스터에서 Helm을 초기화한 후 애플리케이션을 쉽게 설치할 수 있음
- init을 실행해 쿠버네티스 클러스터에서 helm을 초기화
- 클라우드 셸에는 helm이 이미 설치되어 있으므로 설치가 필요하지 않음
- 위의 예시의 경우 필요한 차트 및 모든 매개변수가 배포되고 있으므로 고유한 구성 파일을 작성할 필요가 없음
Search for Helm charts at Helm Hub
Helm Hub에서 Helm 차트 검색
- helm 허브 웹사이트에서 차트를 검색할 수 있음