본문 바로가기

Server Infra/Kubernetes

쿠버네티스 wordpress 설치하기!

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