ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서비스를 외부로 노출하기 ( wordpress - mysql )
    클라우드 교육/kubernetes 2023. 1. 2. 17:53

     

    시크릿 생성

    pv ( mysql, wordpress ) 생성

    pvc ( mysql, wordpress ) 생성

    mysql ,wordpress deployment 생성

    mysql ,wordpress service 생성

    순으로 진행된다. 

     

    namespace는 test라는것을 만들어서 진행했다. 

     

     

     

    먼저 시크릿

     

     

     

    password를 설정하기전에 자신의 password암호화를 한다. 

     

    아래처럼 입력하면 원하는 password의 암호화된 것을 얻을 수 있는데, 

    echo -n <password> | base64

    저걸로 아래에 넣어준다. 

     

    #secret-mysql.yaml
    
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysql-root
    type: Opaque
    data:
      password: <secret password>

     

     

     

    그리고 pv를 생성한다. 

    #pv-mysql.yaml
    
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      namespace: test
      name: pv0001
      labels:
        type: local
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/wordpress-server/mysql"

     

    #pv-wordpress.yaml
    
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      namespace: test
      name: pv0002
      labels:
        type: local
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/wordpress-server/wordpress"

     

    pvc파일 

    #pvc-mysql.yaml
    
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      namespace: test
      name: mysql-v
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    #pvc-wordpress.yaml
    
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      namespace: test
      name: wordpress-v
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi

     

    mysql deployment

    #mysql.yaml
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: test
      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
                  valueFrom:
                    secretKeyRef:
                      name: mysql-root
                      key: password
                - name: MYSQL_DATABASE
                  value: k8sdb
                - name: MYSQL_USER
                  value: k8suser
                - name: MYSQL_ROOT_HOST
                  value: '%'
                - name: MYSQL_PASSWORD
                  value: admin
              ports:
                - containerPort: 3306
                  name: mysql
              volumeMounts:
                - name: mysql-v
                  mountPath: /var/lib/mysql
          volumes:
            - name: mysql-v
              persistentVolumeClaim:
                claimName: mysql-v

     

    mysql service

    #mysql-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      namespace: test
      name: mysql
      labels:
        app: mysql
    spec:
      type: ClusterIP
      ports:
        - port: 3306
      selector:
        app: mysql

     

     

    mysql service를 배포했으면, clusterip를 긁어서 

    wordpress deployment에 넣어준다. 

    #wordpress.yaml
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: test
      name: wordpress
      labels:
        app: wordpress
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: wordpress
      template:
        metadata:
          labels:
            app: wordpress
        spec:
          containers:
            - image: wordpress:4.8-apache
              name: wordpress
              env:
              - name: WORDPRESS_DB_HOST
                value: <mysql_service_port>:3306
              - name: WORDPRESS_DB_NAME
                value: k8sdb
              - name: WORDPRESS_DB_USER
                value: k8suser
              - name: WORDPRESS_DB_PASSWORD
                valueFrom:
                  secretKeyRef:
                    name: mysql-root
                    key: password
              ports:
                - containerPort: 80
                  name: wordpress
              volumeMounts:
                - name: wordpress-v
                  mountPath: /var/www/html
          volumes:
            - name: wordpress-v
              persistentVolumeClaim:
                claimName: wordpress-v

     

    #wordpress-service.yaml
    
    apiVersion: v1
    kind: Service
    metadata:
      namespace: test
      labels:
        app: wordpress
      name: wordpress
    spec:
      type: NodePort
      ports:
        - nodePort: 31000
          port: 80
          targetPort: 80
          protocol: TCP
      selector:
        app: wordpress

     

     

    이렇게 해주고 master node의 ip에 nodeport를 붙여주면 접속이 된다. 

     

     

     

     

     

     

    NFS 볼륨 사용

    node1에 

     

     

    node2,3에는

     

    mount -t nfs 192.168.108.22:/nfs-server ./nfs-server

     

     

     

     

     

    pv.yaml

     

    pvc.yaml

    mysql.yaml

     

     

    걍 mysql은 아래처럼 만들기

     

    https://icarus8050.tistory.com/143

     

     

     

    https://cleanupthedesk.tistory.com/16

     

     

    '클라우드 교육 > kubernetes' 카테고리의 다른 글

    redis를 이용해 방명록 생성  (0) 2023.01.04
    쿠버네티스 모니터링  (1) 2023.01.03
    테인트와 톨러레이션  (0) 2023.01.02
    쿠버네티스 컨피그맵 / 시크릿  (0) 2022.12.29
    서비스 리소스  (6) 2022.12.28

    댓글

Designed by Tistory.