-
github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 4부AWS 2023. 4. 3. 10:20
3부 링크
일단 mysql 에 해당 볼륨을 올리기 위해 yaml 파일들을 작성해보자.
우선 my-sql 네임스페이스를 하나 만들고 kubectl config 를 통해 해당 네임스페이스를 기본으로 고정시켜보자.
kubectl create ns my-sql kubectl config set-context --current --namespace=my-sql
mysql 폴더에 mysql 관련 yaml 파일을 넣을 것이다.
mkdir mysql cd mysql
https://postlude.github.io/2021/08/10/k8s-mysql/
해당블로그에서 일부분 가져오고 약간 수정하겠다.
동적 프로비저닝을 사용할 것이므로 storageclass.yaml 을 만들겠다.
#storageclass.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer
3부에서 본 예제를 그대로 가져왔다.
pvc도 필요하므로 3부 예제를 그대로 가져온다.
#pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: ebs-sc resources: requests: storage: 5Gi
5기가 정도로 해보자.
다음으로 mysql deployment를 작성해본다.
#deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0.26 env: - name: MYSQL_ROOT_PASSWORD value: root ports: - containerPort: 3306
패스워드가 그대로 yaml 에 들어가 있으므로 secret를 사용할 것이다.
그리고 볼륨도 사용해보겠다.
secret를 만들어준다.
secret를 만들 때는 넣고자하는 비밀번호를 base64로 encoding 해야한다.
echo -n root | base64
이렇게 하면 root 라는 평문을 base64 인코딩해서 나온 값을 출력해준다.
n 플래그가 없다면 개행을 포함한 평문을 인코딩 하므로 이상한 값이 되므로 n 플래그를 꼭 넣어주자.
#secret.yaml apiVersion: v1 kind: Secret metadata: name: mysql-root namespace: my-sql type: Opaque data: password: cm9vdA==
이렇게 된다.
이제 deployment 에 볼륨사용과, 시크릿 사용까지 해서 완성본을 올린다.
apiVersion: apps/v1 kind: Deployment metadata: name: mysql labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql volumeMounts: - name: persistent-storage mountPath: /var/lib/mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-root key: password ports: - containerPort: 3306 volumes: - name: persistent-storage persistentVolumeClaim: claimName: ebs-claim
데이터가 잘 저장되는지 mysql pod 에 들어가서 database와 table 만들고, 데이터 하나 넣어보자.
https://youngkyonyou.github.io/kubernetes/2021/07/27/Kubernetes-Mysql.html
위의 블로그를 참고해서 service를 하나 만들어준다.
apiVersion: v1 kind: Service metadata: name: mysql spec: ports: - port: 3306 selector: app: mysql clusterIP: None
clusterIP 를 None로 설정해서 서비스 이름으로 mysql에 접속 할 수 있게한다.
우리가 만든 deploy 에 접속하기 위한 명령어다.
kubectl exec -it mysql-7465c7d895-j98lg -- mysql -h mysql -proot
이런식으로 하면 된다. pod 아이디 잘 적어주자.
잘 접속했으면, database 하나 만들자.
create database test character set utf8mb4 collate utf8mb4_general_ci;
use test;
CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, userid VARCHAR(20), nickname VARCHAR(100), PRIMARY KEY(id) ) ENGINE= MYISAM CHARSET=utf8;
ALTER TABLE users MODIFY COLUMN userid varchar(20) UNIQUE;
insert into users ('userid', 'nickname') values('my_id', 'my_name');
이렇게 하고 deploy 를 삭제한다음 다시 만들어보자. 그러면 넣은 데이터가 그대로 있을 것이다.
'AWS' 카테고리의 다른 글
github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 6부 (0) 2023.04.05 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 5부 (0) 2023.04.03 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 3부 (0) 2023.04.03 ec2에서 jenkins 빌드서버 만들어보기 2편 (0) 2023.03.31 ec2에서 jenkins 빌드서버 만들어보기 1편 (0) 2023.03.31