티스토리 뷰
Mysql 관련 yaml 파일
○ mysql-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
○ mysql-pv.yaml
# hostpath 는 delete 를 위해서 /tmp 로 설정
kind: PersistentVolume
apiVersion: v1
metadata:
name: mysql-pv
labels:
type: local
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy:
Delete
hostPath:
path: "/tmp/mysql-pv"
○ mysql-service.yaml
# service 에도 label 을 적을 수도 있다 ( 여기선 참조 안하므로 필요 없다 )
# selector 로 label 을 찾는다
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
type: ClusterIP
ports:
- port: 3306
selector:
app: mysql
○ mysql.yaml
> 롤링 업데이트와 롤백을 위해서 Deployment 사용
>> env 의 내용
>>> create user myuser > grant all privileges on mydb.* to myuser@% identified by 'userpass'
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:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: mypass # db 관리자 암호
- name: MYSQL_DATABASE # database 이름
value: mydb
- name: MYSQL_USER # database에 권한이있는 db 사용자
value: myuser
- name: MYSQL_ROOT_HOST # root 계정이 access 할수 있는 mysql 클라이언트
value: '%' # 모든 mysql client 허용
- name: MYSQL_PASSWORD # DB 계정(myuser)의 암호
value: userpass
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
Wp 관련 yaml 파일
○ wp-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: wp-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
○ wp-pv.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: wp-pv
labels:
type: local
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/wp-pv"
○ wp-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: wordpress
name: wordpress
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: wordpress
○ wp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: mysql:3306
- name: WORDPRESS_DB_NAME
value: mydb
- name: WORDPRESS_DB_USER
value: myuser
- name: WORDPRESS_DB_PASSWORD
value: userpass
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pvc
실행
① wp-pv / wp-pvc | mysql-pv / mysql-pvc 실행하여 바운드 확인
② mysql.yaml >> mysql-service.yaml 실행
③ wp.yaml >> wp-service.yaml 실행
④ NodePort 로 접속
⑤ wordpress 정상 작동
● 전체 삭제 + 전체 실행 [ 디렉터리 자체 실행 ]
>> 순서는 문제가 없다
kubectl delete -f .
kubectl apply -f wp_examples
▩ 만약 mysql-pv.yaml 에서 정책을 Delete 가 아닌 Retain 으로 변경하고 전체 삭제 >> 전체 생성을 진행한다면,
>> :32681 접속시 삭제 전 만들었던 :31244 포트를 불러오면서 접근이 불가능해진다
● mysql-pv.yaml 에 있는 Path 를 참조하여 mysql 파드가 있는 node에 접속하여 확인해본다
○ mysql-pv 디렉터리 자체를 날려버린다
[ 접근은 권한이 없어서 불가.. ]
>> 이제는 포트가 그대로 유지된다
>> 하지만 mysql-pv.yaml 실행시 생성되었던 위치가 삭제되어서 제대로 작동을 안한다
○ 삭제 후 다시 파일 실행하여 pv 를 생성하면 정상작동한다
'Kubernetes [ 쿠버네티스 ]' 카테고리의 다른 글
Minikube 설치 (0) | 2024.03.13 |
---|---|
Kubernetes - secret / configmap (0) | 2024.03.13 |
Kubernets - pv / pvc (0) | 2024.03.12 |
Kubernetes - nfs-volume (0) | 2024.03.12 |
Kubernetes emptyDir (0) | 2024.03.12 |