2023. 10. 29. 00:46ㆍDOIK@CloudNet
- cloudnet에서 주관하는 쿠버네티스 데이터베이스 오퍼레이터 스터디 2기 내용입니다
- 목적: 다양한 db 오퍼레이터 실습으로 eks 환경에서 db 배포 및 운영을 위한 다양한 db 오퍼레이터 실습
쿠버네티스 중요 개념&특성
원래 지난주 내용인데 환경 배포 내용이 길어져서 이번주로 옮겼다.
- statefulset: 상태저장이 필요한 서비스(대표적으로 DB!) 반대로 stateless의 대표적인 예는 웹서버
- headless: statefulset으로 배포된 pod에 접속할 때. cluster의 구성요소일 때.
쿠버네티스 오퍼레이터

- 커스텀 컨트롤러가 커스텀 리소스를 watch 하면서 .yaml 의 상태를 잘 유지하고 있는지 계속해서 확인
- https://operatorhub.io/?category=Database 에서 다양한 오퍼레이터를 확인하고 선택할 수 있다
- 최소 성숙도 lv3 이상의 오퍼레이터 사용을 권한다
용어
CRD(Custom Resource Declaration):오퍼레이터로 사용할 상태 관리 객체 정의
CR(Custom Resource): CRD된 객체들의 실제 상태 데이터 //여기까지가 Custom Resource
CC(Custom Controller): CR을 watch 및 이상시 대응 //Custom Controller
=> 오퍼레이터가 전부 다 (설정만 해놓으면) 알아서 한다. 와 신난다!
따라서 오퍼레이터는 custom resource+custom controller 의 조합이다.
MySQL 8.0

- DBengines 기준 점유율 2위
- DB 운영에서 가장 중요한 두 가지: 확장성과 가용성(scalability/availabilty)를 보장하기 위해 복제가 수행된다
- 오라클, MySQL은 레거시에 많이 쓰여 왔지만 상용이라 요금이 나옴. 그래서 완전한 오픈소스인 PostgreSQL이 핫해지고 있다고 회사에서 알려주셨다.
- 아래 그림처럼 클러스터링 되고 GR(Group Replication) 된다고 한다.

InnoDB
- MySQL을 위한 DB 엔진
- transaction 및 대용량 데이터 처리에 유리
실습1. 커스텀 리소스 생성
실제로는 오퍼레이터허브에서 가져다가 쓰겠지만 그래도 직접 한번...!
지난 포스팅 https://hitherex.tistory.com/2 를 따라 배포를 성공적으로 마쳤다고 가정하고 진행.
#.yaml 파일 받아오기
curl -s -O https://raw.githubusercontent.com/gasida/DOIK/main/2/resourcedefinition.yaml
#터미널에서 내용 확인
cat resourcedefinition.yaml | yh
#파일 실행해서 적용, -f: filename이 뒤에 따라온다는 flag
kubectl apply -f resourcedefinition.yaml
스터디장 가시다님이 올려놓으신 .yaml 파일을 가져와서 그 이름 그대로 저장하고, 해당 파일을 터미널에서 바로 확인하고, 실행해서 적용하는 curl, cat command

- 실행 전 k get crd 로 클러스터 내 CRD를 리스트 해보면 crontab이 없다. 그러나 이 yaml file의 names 부분에 crontabs가 있어서 crontabs를 CRD로 추가할 수 있다.
CRD를 추가했으면 실제 동작할 CR을 가져올 차례다.
CRD 가져올때랑 비슷하게 1.가져오고 2.확인하고 3.생성 4.(new!) 확인 5.(new!) 삭제
#파일 가져오기
curl -s -O https://raw.githubusercontent.com/gasida/DOIK/main/2/my-crontab.yaml
#내용 확인
cat my-crontab.yaml | yh
#.yaml 돌려서 생성
kubectl apply -f my-crontab.yaml
#생성 확인
kubectl get crontab
#리소스 상세정보 확인
kubectl get crontab -o yaml | yh
#삭제
kubectl delete -f resourcedefinition.yaml
CRD를 날리면 CR도 같이 날아가는 걸로 봐서 CR은 CRD에 귀속되어 있다.
이렇게 하면 리소스를 생성하고 날리는 작업까지 수행한거고, 정작 동작 내용인 custom controller는 없으므로 아무 동작도 어싸인되어 있지 않다.
실습2. MySQL operator for Kubernetes

- 필요시 pod로 바로 접근 가능!
- mysql operator, innodb cluster 설치
## MySQL Operator
# Repo 추가
helm repo add mysql-operator https://mysql.github.io/mysql-operator/
helm repo update
# 설치
helm install mysql-operator mysql-operator/mysql-operator --namespace mysql-operator --create-namespace --version 2.0.12
## InnoDB 설치
# 파라미터 파일
cat <<EOT> mycnf-values.yaml
credentials:
root:
password: #YOUR_PASSWORD
serverConfig:
mycnf: |
[mysqld]
max_connections=300 #default was 150
default_authentication_plugin=mysql_native_password
tls:
useSelfSigned: true
EOT
# 설치
helm install mycluster mysql-operator/mysql-innodbcluster --namespace mysql-cluster --version 2.0.12 -f mycnf-values.yaml --create-namespace
-MySQL shell 연결
# mysql shell 실행
kubectl exec -it -n mysql-operator deploy/mysql-operator -- mysqlsh
# 클러스터 연결
\connect root@mycluster.mysql-cluster.svc
#상태 확인
\status
#SQL, python 모드로 전환
\sql \py
#종료
\exit
- 포트포워딩: 인증을 우회할 수 있어 편리, 많이 사용한다
kubectl -n mysql-cluster port-forward service/mycluster mysql
- 바로 sql문 실행
kubectl exec -it -n mysql-operator deploy/mysql-operator -- mysqlx:root@$MDB2 --password=YOUR_PASSWORD --sqlx --execute='USE employees;SELECT * FROM employees LIMIT 10;'
장애발생
- 시나리오: 3개의 워커노드 중 1개를 drain (status:pending) 되었을 때 원복
kubectl uncorden $NODE
하면서 든 생각
- (스터디 메인 내용은 아니지만) 리눅스 쓸 줄 안다고 생각했는데 아니었던 것 같다... 역시 하나만 아는 사람이 제일 무섭다.
- 회사에서 학습할때 복붙을 지양하라는 조언을 들었었는데 맞는거같다.
레퍼런스
- DOIK 스터디 자료
- 스테이트풀셋 https://nearhome.tistory.com/107
[쿠버네티스] 쿠버네티스 스테이트풀셋 (StatefulSet) 소개 및 관리
들어가며: 기존 컨트롤러의 문제점 스테이트풀셋(StatefulSet) 소개 스테이트풀셋 이란? 스테이트풀셋의 주의사항 스테이트풀셋의 파드 이름 규칙 스테이트풀셋의 파드 DNS 주소 규칙 스테이트풀셋
nearhome.tistory.com
- 헤드리스 https://interp.blog/k8s-headless-service-why/
K8s Headless Service, 왜 필요한가
Service 의 역할과 목적을 알아보자
interp.blog
'DOIK@CloudNet' 카테고리의 다른 글
[DOIK2] 쿠버네티스 오퍼레이터 @stackable (2) | 2023.11.26 |
---|---|
[DOIK2] 쿠버네티스 오퍼레이터 @Kafka (0) | 2023.11.19 |
[DOIK2] 쿠버네티스 오퍼레이터 @MongoDB (1) | 2023.11.12 |
[DOIK2] 쿠버네티스 오퍼레이터 @PostgreSQL (0) | 2023.11.05 |
[DOIK2] 쿠버네티스 배포 및 기초 지식 (0) | 2023.10.22 |