ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NFS 구축 및 pv, pvc 생성과 K8S MySQL Statefulset 마운트
    K8S 2021. 7. 15. 00:17

     

    이번 포스팅은 NFS 서버를 구축한 후,

    이를 persistent volume으로 사용하여 mysql statefulset으로 배포하는 작업을 한다. 

     

    mysql 컨테이너에서 마운트된 디렉토리에 대한 접근 권한 문제 때문에

    삽집을 해서 이 부분에 대해서만 자세히 다룬다. 

     

    chown: changing ownership of '/var/lib/mysql/': read-only file system

     

    (처음에 mysql 컨테이너에서 나는 문제인줄 알았는데

    NFS 권한 설정 때문에 발생했던 문제였다.)

     

    NFS 서버는 EC2 우분투 18.04를 기준으로 하였고, 

    NFS 서버의 /data/mysql 디렉토리를 마운트하여 사용할 것이다. 

     

     

     

     

    1. NFS 서버 구축하기 

     

    먼저 마운트할 디렉토리를 만들어준다. 

    mkdir -p /data/mysql
    chmod -R 755 /data
    chown -R 999:999 /data

     

     

     

    NFS 서버 구성에 필요한 것들을 Install 해준다. 

    apt-get install -y nfs-common nfs-kernel-server rpcbind

     

     

    /etc/exports에 다음을 추가해준다. 

    /data/mysql *(rw,sync,no_root_squash)

    모든 경로(*)에 대해서 read, write를 허용해줄거다.  

     

     

    sudo systemctl restart nfs-server
    sudo systemctl enable nfs-server

     

     

    잘 마운트 되었는지 확인한다. 

    sudo exportfs -v

     

     

     

     

     

     

    2. pv, pvc 생성하기 

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: nfs-pv
    spec:
      capacity:
        storage: 2Gi
      volumeMode: Filesystem
      accessModes: 
      - ReadWriteMany
      nfs:
        path: "/data/mysql"
        server: 172.31.6.27  # nfs 서버 주소를 적어준다. 
    
    ---
    
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-nfs-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 2Gi

     

     

     

     

    3. Mysql Statefulset, Headless service 생성하기 

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: database
    data:
      MYSQL_ROOT_PASSWORD: 'root'
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-service
    spec:
      ports:
      - port: 3306
      selector:
        app: mysql
      clusterIP: None
    
    ---
    
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mysql
    spec:
      serviceName: mysql-service
      replicas: 1
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            envFrom: 
            - configMapRef:
                name: database
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
          volumes:
          - name: mysql-persistent-storage
            persistentVolumeClaim:
              claimName: my-nfs-pvc

     

     

     

     

    반응형

    댓글

Designed by Tistory.