< Lab >
Lab into : Running Databases in GKE
실습: GKE에서 데이터베이스 실행
- Google 쿠버네티스 엔진 클러스터에서 데이터베이스를 실행하기 위해 GKE 클러스터 생성
- 클러스터에 mysql을 수동으로 구성을 수행
- Helm을 사용해 배포를 자동화
Running Databases in GKE
GKE에서 데이터베이스 실행
- GKE 클러스터 만들기
- Kubernetes Engine - Cluster - Create - GKE Standard으로 클러스터 생성
- Connect 클릭 - Run in Cloud Shell
- Enter 키를 눌러 명령을 실행한 후, kubectl 명령을 통해 연결 테스트
gcloud container clusters get-credentials cluster-1 --zone us-central1-c --project qwiklabs-gcp-00-38df640939ea Enter kubectl get nodes
- 클러스터를 구성하는 3개의 가상 머신 목록을 반환하는 것을 확인 가능
- 클러스터에 MySQL 배포 (Kubernetes 구성 파일을 사용해 Kubernetes 클러스터에 MySQL 데이터베이스 배포)
- 데이터베이스에 루트 암호가 필요하므로 비밀번호를 Kubernetes 시크릿으로 저장
비밀번호는 키-값 쌍이므로 키는 ROOT_PASSWORD이고 값은 password로 지정
kubectl create secret generic mysql-secrets --from-literal=ROOT_PASSWORD="password"
- 생성한 구성 파일에 대한 폴더를 생성하고 디렉토리 이동
mkdir mysql-gke cd mysql-gke
- Kubernetes 구성 파일을 작성하기 위해 Open Editor로 편집기를 연 후, mysql-gke 폴더에 volume.yaml 생성 및 입력
// mysql-gke/volume.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-data-disk // MySQL 데이터베이스 용으로 1GB의 디스크 공간을 예약하며 이름은 mysql-data-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
- MySQL 데이터베이스를 구성하기 위해 다른 새 파일 deployment.yaml 생성 및 입력
// mysql-gke/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deployment labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0 // MySQL 도커 이미지 지정 ports: - containerPort: 3306 volumeMounts: - mountPath: "/var/lib/mysql" subPath: "mysql" name: mysql-data env: // 이전에 생성한 암호를 사용하여 데이터베이스 루트 암호에 대한 환경 변수가 생성 - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secrets key: ROOT_PASSWORD - name: MYSQL_USER value: testuser - name: MYSQL_PASSWORD value: password volumes: - name: mysql-data persistentVolumeClaim: claimName: mysql-data-disk // 이전 파일에서 할당한 디스크 공간이 사용
- 데이터베이스에 액세스할 수 있도록 서비스가 필요하므로 sevice.yaml 파일 생성 및 입력
MySQL 데이터베이스에 요청을 전달하는 클러스터 내에서 데이터베이스에 대한 액세스를 제공하는 서비스가 생성
// mysql-gke/service.yaml apiVersion: v1 kind: Service metadata: name: mysql-service spec: selector: app: mysql ports: - protocol: TCP port: 3306 targetPort: 3306
- Open Terminal을 통해 CLI로 돌아간 후 ls를 통해 세 개의 YAML 파일 확인
- 데이터베이스를 배포하기 위해 kubectl 명령 입력
kubectl apply -f volume.yaml kubectl apply -f deployment.yaml kubectl apply -f service.yaml
- 리소스가 생성될 때까지 기다린 후 다음 명령 입력
kubectl get pods
- 마지막 명령에서 얻은 포드(pod) 이름을 클립보드에 복사하여 다음 명령을 입력
예) kubectl exec -it mysql-deployment-76fdc44468-rfhbp /bin/bash 나의 경우) kubectl exec -it mysql-deployment-7fb7f98766-4nkhr /bin/bash
- MySQL 포드 내에서 bash 프롬프트에 있으므로 MySQL에 로그인하기 위해 다음 명령을 입력한 후 password 입력
mysql -u root -p
- MySQL 프롬프트가 표시되는 것을 확인할 수 있으며 데이터베이스를 확인한 후, 새 데이터베이스 생성 후 재확인
show databases; create database pets; show databases;
- exit를 입력해 MySQL을 종료한 후 다시 exit를 입력해 Cloud Shell 명령 프롬프트로 이동 (MySQL → bash → Cloud Shell)
- 생성된 모든 것을 제거하기 위해 다음 명령을 입력
kubectl delete -f service.yaml kubectl delete -f deployment.yaml kubectl delete -f volume.yaml
- Helm을 사용하여 클러스터에 MySQL 배포
- Bitnami Helm 저장소를 클러스터에 추가 및 업데이트 하려면 다음 명령을 입력
helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update
- Helm을 사용하여 mydb라는 MySQL을 설치
helm install mydb bitnami/mysql
- Helm 설치 명령의 출력을 읽고 제공된 지침을 사용하여 데이터베이스에 연결 후 Cloud Shell 명령 프롬프트로 돌아감
kubectl run mydb-mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.28-debian-10-r0 --namespace default --command -- bash exit
- Helm 배포 확인
helm ls
- Helm 배포 삭제
helm delete mydb