728x90
지금까지 해온 업무나 기술정리를 노션과 티스토리에 정리했는데 놀고있는 서버에 뭐라도 띄워볼까 했습니다..
마침 서버와 나스 둘다 있고..
Id 이름 상태
----------------------------------------------------
10 k8s-master 실행중
21 k8s-node2 실행중
22 k8s-node3 실행중
23 k8s-node1 실행중
kvm으로 vm도 4개에 클러스터 잘 되어 있고..
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 214d v1.21.1
k8s-node1 Ready <none> 214d v1.21.1
k8s-node2 Ready <none> 214d v1.21.1
k8s-node3 Ready <none> 132d v1.21.1
클러스터도 잘 돌아가고 있었죠!!
그래서 워드프레스와 MySQL 설치를 진행했습니다.
우선 시크릿을 만들고요!!
apiVersion: v1
data:
password: 비밀번호!!!
kind: Secret
metadata:
name: mysql-pass
namespace: wordpress
그다음 NFS를 기반으로한 PV와 PVC를 만들어 줬어요!
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-data-pv
namespace: wordpress
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 50Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: mysql-data-pvc
namespace: wordpress
nfs:
path: /volume2/server_k8s_nfs/mysql
server: *.*.*.*
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
status:
phase: Bound
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: wordpress-data-pv
namespace: wordpress
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 20Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: wordpress-data-pvc
namespace: wordpress
nfs:
path: /volume2/server_k8s_nfs/wordpress
server: *.*.*.*
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
status:
phase: Bound
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-data-pvc
namespace: wordpress
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
volumeMode: Filesystem
volumeName: mysql-data-pv
status:
accessModes:
- ReadWriteMany
capacity:
storage: 50Gi
phase: Bound
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-data-pvc
namespace: wordpress
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
volumeMode: Filesystem
volumeName: wordpress-data-pv
status:
accessModes:
- ReadWriteMany
capacity:
storage: 20Gi
phase: Bound
그리고 아주 잘 만들어졌습니다.
NAS와 통신도 잘 되고 이제 MySQL과 Wordpress를 만들어 보겠습니다.
다행히 이전에 저 클러스터에 MetalLB를 설치 해 두었고 자동으로 DHCP로부터 IP를 할당 받아 포트포워딩으로 볼 수 있습니다.
apiVersion: v1
kind: Service
metadata:
name: wordpress-lb
namespace: wordpress
labels:
app: wordpress-web
spec:
ports:
- port: 80
selector:
app: wordpress-web
tier: frontend
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-web
labels:
app: wordpress-web
spec:
selector:
matchLabels:
app: wordpress-web
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress-web
tier: frontend
spec:
containers:
- image: wordpress:4.8-apache
name: wordpress-web
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress-web
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wordpress-data-pvc
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
namespace: wordpress
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
namespace: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
요롷게 말이죠!!
위처럼 정상적으로 할당이 되었다면...
네! 페이지가 잘 나와요!!! 매우 만족스럽습니다. 그럼 모니터링을 위해 Istio로 사이드카를 붙여볼게요
사이드카 붙이는건 너무 쉽습니다. istio설치는 미리 해 두었어요! 그래서 라벨만 달아주면 자기가 알아서 사이드카를 구축합니다
kubectl label namespace [네임스페이스이름] istio-injection=enabled --overwrite
근데 전 이상하게 아무리 기다려도 사이드카가 생성이 안되더라고요.. 그래서 참을성없던 저는 그냥 메뉴얼하게 붙여버렸습니다.
kubectl -n istio-system get configmap istio-sidecar-injector -o=jsonpath='{.data.config}' > inject-config.yaml
kubectl -n istio-system get configmap istio-sidecar-injector -o=jsonpath='{.data.values}' > inject-values.yaml
kubectl -n istio-system get configmap istio -o=jsonpath='{.data.mesh}' > mesh-config.yaml
위처럼 이스티오 컨피그를 쭉 뽑아내서
istioctl kube-inject \
--injectConfigFile inject-config.yaml \
--meshConfigFile mesh-config.yaml \
--valuesFile inject-values.yaml \
--filename mysql.yaml \
| kubectl apply -f -
istioctl kube-inject \
--injectConfigFile inject-config.yaml \
--meshConfigFile mesh-config.yaml \
--valuesFile inject-values.yaml \
--filename wordpress.yaml \
| kubectl apply -f -
디플로이를 업데이트 해 주었습니다. 그러니 파드가 다시 생성되면서
키알리로 아주 예쁜 모니터링이 완성 되었습니다!!!
이제 SSL적용과 컨텐츠를 하나 둘 입력해야 겠네요...하하 Domain은 구매해서 DDNS로 연동해 놓았는데
빨리 만들어서 하나둘 채워넣고 싶군요!!
728x90
'Server Infra > Kubernetes' 카테고리의 다른 글
Docker Image 사이즈 튜닝 (0) | 2022.01.09 |
---|---|
Docker Image Size 줄이기 다양한 팁들 (0) | 2022.01.09 |
Certified Kubernetes Application Developer(CKAD) 합격 후기 (0) | 2022.01.05 |
Certified Kubernetes Administrator(CKA) 합격 후기 (0) | 2022.01.05 |
POD execution stack (0) | 2020.11.09 |