프로젝트 목표
App 구성 조건
Wordpress App
Mysql App
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
labels:
apps: wordpress
spec:
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
minReadySeconds: 20
selector:
matchLabels:
apps: wordpress
tier: frontend
replicas: 3
template:
metadata:
name: myapp-pod
labels:
apps: wordpress
tier: frontend
spec:
containers:
- name: nginx
image: wordpress:5.9.1-php8.1-apache
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- name: myapp-volume
mountPath: /var/www/html/
livenessProbe:
httpGet:
path: /
port: 80
startupProbe:
httpGet:
path: /
port: 80
readinessProbe:
httpGet:
path: /
port: 80
resources:
requests:
memory: "128Mi"
cpu: "500m"
volumes:
- persistentVolumeClaim:
claimName: myapp-pvc
name: myapp-volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myapp-pvc
labels:
apps: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs-client
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ing
spec:
tls:
- secretName: myapp-tls-secret
defaultBackend:
service:
name: myapp-svc
port:
number: 80
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-svc
port:
number: 80
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
labels:
apps: wordpress
spec:
ports:
- port: 80
targetPort: 80
nodePort: 31111
type: NodePort
selector:
apps: wordpress
tier: frontend
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-deploy
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
apiVersion: v1
kind: Secret
metadata:
name: myapp-tls-secret
type: kubernetes.io/tls
data:
tls.crt: # base64로 인코딩된 crt 삽입
tls.key: # base64로 인코딩된 key 삽입
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mydb-statefulset
labels:
apps: wordpress
spec:
selector:
matchLabels:
apps: wordpress
tier: mysql
replicas: 1
serviceName: mysql-svc
template:
metadata:
labels:
apps: wordpress
tier: mysql
name: mydb
spec:
containers:
- name: database
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: password
volumeMounts:
- name: mysql-volume
mountPath: /var/lib/mysql
startupProbe:
exec:
command:
- mysqladmin
- ping
livenessProbe:
exec:
command: ['mysqladmin','ping']
volumes:
- name: mysql-volume
persistentVolumeClaim:
claimName: mysql-pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
labels:
apps: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs-client
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
labels:
apps: wordpress
spec:
ports:
- port: 3306
clusterIP: None
selector:
apps: wordpress
tier: mysql
1 . 이번 프로젝트에서 기존의 코드를 참조하지 않고 explain command와 쿠버네티스 공식문서를 이용하여 YAML파일 대부분을 작성한 것은 매우 만족스러웠다. 하지만 MYSQL App 구축에서 Read Replica를 이용하여 DB이중화를 하지 못하였다. 강사님이 만들어놓은 코드가 있긴하지만 참조를 안하고 생각으로 구축하려다보니 감이 안잡혀서 결국 성공하지 못했다. 추후에 강사님의 코드나 , 공식문서 등을 참조해서 완성해볼 것이다.
2 . 가장 아쉬웠던 점으로 , MYSQL App과 Wordpress App의 구성 조건을 모두 만족하여 구성했지만 두개의 App을 연동시키지 못하였다. MYSQL App의 서비스는 헤드리스 서비스로 생성을 하였고 셀렉터를 지정했기 때문에 MYSQL DB를 담당하는 파드의 ip가 집적 노출된다. 따라서 서비스가 아닌 파드를 집적 연결하는 것이 가능해지는데, 문제는 이 파드 자체를 Wordpress와 연결하는 방법을 찾지 못하였다. 추후에 더 연구해서 연동하는 것까지 완성 시킬 것이다.