20.1 워드프레스 앱의 구성
20.2 MySQL 비밀번호를 시크릿에 등록하기
MySQL에서 사용할 비밀번호 ‘test-passwd’를 저장한 password.txt 파일을 만들고 시크릿으로 등록한다.
•
echo -n test-passwd > ./password.txt
•
kubectl create secret generic mysql-pass --from-file=./password.txt
20.3 데이터베이스에 사용할 볼륨 만들기
이제 MySQL에 사용할 볼륨을 만든다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-volume
labels:
type: local
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /tmp/test-lv
persistentVolumeReclaimPolicy: Recycle
YAML
복사
wordpress/local-volume.yaml
•
볼륨의 용량 : 2Gi
•
접근 모드 : ReadWriteOnce
•
볼륨 경로 : /tmp/test-lv
•
볼륨 초기화 정책 : Recycle (데이터를 삭제하고 새로운 볼륨 사용)
kubectl create -f local-volume.yaml 명령으로 클러스터 적용 후 조회한다.
20.4 mysql 파드 실행하기
볼륨을 준비했으니 파드를 실행한다.
---
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-lv-claim
labels:
app: mysql
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password.txt
ports:
- containerPort: 3306
name: mysql
resources:
requests:
cpu: 50m
volumeMounts:
- name: mysql-local-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-local-storage
persistentVolumeClaim:
claimName: mysql-lv-claim
YAML
복사
wordpress/mysql.yaml
위 코드는 mysql 파드의 템플릿이다.
mysql에 접근할 때 엔드포인트 역할을 하는 서비스 설정, 앞에서 만든 볼륨과 연결할 때 필요한 정보를 요청하는 PVC 설정, 실제 MySQL을 배포할 때 필요한 정보를 담은 디플로이먼트 설정을 담아 파드를 만든다.
kubectl create -f mysql.yaml 로 클러스터에 적용한다.
kubectl exec -it <파드이름>-- bash 로 bash에 접속 후, mysql -uroot -p 로 위에서 만든 test-passwd를 입력한다. db가 잘 조회되면 성공.
20.5 워드프레스 앱을 실행하고 데이터베이스 연결하기
워드프레스 앱을 실행해 MySQL에 연결시킨다. 아래 코드는 워드프레스 앱을 실행하는 서비스와 디플로이먼트 설정 예시이다.
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30180
selector:
app: wordpress
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- image: wordpress:latest
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: mysql
# - name: WORDPRESS_DB_USER
# value: admin
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password.txt
ports:
- containerPort: 80
name: wordpress
resources:
requests:
cpu: 50m
YAML
복사
wordpress/wordpress.yaml
저장 후, kubectl apply -f wordpress.yaml 파일로 클러스터에 적용
localhost:30180으로 접속한 결과…
20.6 모니터링 도구 이용하기
우선 k8s 대시보드에서 워드프레스 앱을 확인한다.
다음은 프로메테우스 오퍼레이터를 실행한다.
kubectl --namespace monitoring port-forward svc/grafana 3000 명령을 실행 후, localhost:3000으로 접속한다. (id/pw : admin/admin)
19장의 사용자 설정을 참고.
접속 후, 검색창에 kubernetes를 쳐서 확인해보면 쿠버네티스 모니터링에 필요한 여러 항목을 확인할 수 있다.
근데 db연동이 안돼서 모니터링 데이터가 없음
20.7 wordpress 파드 늘리기
지금은 wordpress 파드 하나가 MySQL DB 하나를 이용하는 구조로 동작한다. 그럼 이를 3개로 늘렸을 때 정상적으로 동작하는지 확인해보자.
kubectl scale deployment wordpress --replicas 3
Running이 뜨며 잘 실행중인 것을 확인할수 있다. 사이트도 잘 접속된다.
DB연동이 안돼서 자꾸 Error establishing a database connection이 뜰 뿐..
20.8 wordpress 파드 오토스케일링 테스트하기
오토스케일링 테스트를 해보자. 다음은 워드프레스 앱 오토스케일링 설정 예시이다.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: wordpress-hpa
namespace: default
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: wordpress
targetCPUUtilizationPercentage: 30
YAML
복사
autoscaling/wordpress-autoscaling.yaml
.metadagta.name 필드 값은 wordpress-hpa로 설정했고, .spec.scaleTargetRef.name 필드 값은 wordpress로 설정해 wordpress 디플로이먼트를 오토스케일링할 수 있도록 했다.
kubectl apply -f wordpress-autoscaling.yaml
while true;do curl localhost:30180;done 명령으로 부하를 발생시킨다. 조금 시간이 흐른 뒤, kubectl get hpa 명령과 kubectl get pods 명령으로 상태를 확인한다.
이것도 DB 연동이 안돼서
원래는 TARGETS도 많이 100% 뚫고 올라가고 그에 맞게 pod들도 늘어난다. 데이터를 무한으로 생성해 부하를 걸어도 DB에 저장되지 않고 생성만 되는 상황..
모든 실습이 끝나면 자원을 정리한다.
kubectl delete -f wordpress.yaml
kubectl delete -f mysql.yaml
kubectl delete -f local-volume.yaml
kubectl delete secret mysql-pass
Shell
복사