ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes Persistent Volumes 사용하기
    설치&설정 관련 2020. 6. 27. 22:38
    728x90

    Kubernetes Persistent Volumes 사용하기

    준비 작업

    가장 쉽게 돈 안들이고 구성하기 위해서 Network file system(NFS)을 설치하여 사용한다.

    CentOS에 NFS 설치 & 구성

    우선 설치는 다음과 같이 쉽게 할 수 있다.

    $ yum install nfs-utils

    설치가 끝났면, nfs 데몬을 시작하고 재부팅시 자동으로 실행 될수 있도록 설정한다.

    # nfs 서버 기동
    $ systemctl start nfs-server
    # 서버 재기동시 nfs 서버 기동
    $ systemctl enable nfs-server

    이후 exports 할 디렉토리를 생성하고 exports에 해당 위치를 설정 합니다.

    $ mkdir /nfs
    $ vi /etc/exports
    /nfs *(rw,root-squash,sync)

    수정이 다 되었다면, 다음 명령으로 변경된 내역을 반영합니다.

    $ exportfs -r

    이후 해당 서비스를 다른 서버에서 사용하기 위해 방화벽을 허용해야 합니다.

    $ firewall-cmd --permanent --add-service=nfs
    $ firewall-cmd --reload
    $ firewall-cmd --list-all

    마지막으로 NFS 공유가 잘되었는지 확인합니다.

    $ showmount -e
    Export list for server:
    /nfs *
    
    $ sudo exportfs -v
    /nfs              <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,all_squash)

    추가 정보 /etc/exports 설정 정보

    옵션 기능
    ro 파일 시스템을 읽기전용으로 마운트
    rw 파일시스템을 읽기/쓰기 로 마운트
    root_squash 클라이언트에서 루트를 서버상에 nobody 사용자로 매핑
    no_root_squash 서버와 클라이언트 모두 같은 root를 사용
    secure 클라이언트 마운트 요청시 포트를 1024 이하로 설정
    anonuid 익명 사용자를 위한 사용자 ID를 지정하실 수 있음
    anongid 익명 사용자를 위한 그룹 ID를 지정하실 수 있음
    insecure 인증되지 않은 액세스도 가능
    noaccess 액세스 거부
    link_relative 서버에 있는 루트와의 링크를 포함하는 디렉토리에서 얻는 "../" 만큼 링크 앞에 두어 절대 심볼릭 링크를 상대 심볼릭 링크로 바꿀때 사용
    sync 파일 시스템이 변경되면 즉시 동기화합니다.
    async sync 옵션을 사용하지 않는 경우에 해당 하며, 서버는 데이터가 저장소에 안전히 저장됐는지를 확인하지 않음 클라이언트의 데이터 쓰기 요청이 들어오면 바로 응답을 보냄 데이터 curruption이 발생할 수 있지만 성능 향상을 기대할 수 있음
    no_subtree_check 파일 시스템의 전체 디렉토리가 아닌 하부 디렉토리가 내보내진 경우, 서버는 내보낸 하부 디렉토리에 요청된 파일이 존재하는지를 검사 함 이러한 검사 과정을 하부구조 검사라고 부르는데, 이 옵션을 선택하시면 하부구조 검사를 사용하지 않음 전체 파일 시스템이 내보내진 경우에 이 옵션을 선택하면 하부구조 검사를 하지 않음으로서 전송률을 높일 수 있음
    all_squash root를 제외하고 서버와 클라이언트의 사용자를 동일한 권한으로 설정
    no_all_squash root를 제외하고 서버와 클라이언트의 사용자들을 하나의 권한을 가지도록 설정
    NFS Exporting 설정 예
    /*
    /home/redhat  디렉토리를 one.linux.co.kr과 two.linux.co.kr 
    두 개의 클라이언트 컴퓨터들이 마운트할 수 있으며, 
    one 클라이언트 컴퓨터는 오직 읽기로만 마운트되고, 
    two 클라이언트 컴퓨터에는 읽기/쓰기로 마운트 된다.
    */
    
    /home/redhat   one.linux.co.kr  (ro)  two.linux.co.kr  (rw)
    # linux.co.kr 도메인 내에 있는 모든 컴퓨터들이 /usr/local/bin 파일 시스템을 읽기 전용으로 마운트된다.
    /usr/local/bin    *.linux.co.kr    (ro)
    # /pub 디렉토리에 대해서 읽기로만 마운트할 수 있고, 사용자 인증이 없이 액세스가 가능하며, 이 데렉토리 파일 시스템에 액세스 하는 모든 컴퓨터의 루트를 서버에서 nobody 사용자로 액세스할 수 있게 한다는 의미이다.
    /pub                                        (ro, insecure,root_square)

    클라이언트 설치 테스트

    우선 nfs 패키지를 설치 한다.

    $ yum install nfs-utils

    export 위치를 확인한다.

    # 192.168.0.1 서버 IP
    $ showmount -e 192.168.0.1
    Export list for server:
    /nfs *

    NFS 디렉토리와 마운트 한다.

    마운트할 디렉토리 생성
    $ mkdir /test/nfs
    # 마운트
    $ mount -t nfs -o sync 192.168.0.1:/nfs /test/nfs
    # 확인
    $ df -h | grep nfs
    192.168.0.1:/nfs  228G  9.8G  218G   5% /test/nfs

    만약 리부팅시 자동으로 마운트 하기를 원한다면 다음과 같이 설정한다.

    $ vim /etc/fstab
    192.168.0.1:/nfs     /test/nfs       nfs     sync    0 0

    mount를 끊기를 원한다면 다음과 같이 하면 된다.

    $ umount -f -l /test/nfs

    오류 발생 Linux: clnt_create: RPC: Program not registered 를 확인하면,

    nfs service가 제대로 기동 되지 않은 것이다. 다시 시작하자!

    $ service nfs status
    rpc.svcgssd is stopped
    rpc.mountd is stopped
    nfsd is stopped
    rpc.rquotad is stopped
    
    $ service nfs start
    Starting NFS services:                                     [  OK  ]
    Starting NFS quotas:                                       [  OK  ]
    Starting NFS daemon:                                       [  OK  ]
    Starting NFS mountd:                                       [  OK  ]
    
    $ chkconfig nfs on

    Persistent Volumes 추가

    kuberctl로 추가 하는 방법도 있고, 지금 사용하는 Rancher UI에서 처리 하는 방법도 있다.

    간단하게 Rancher UI에서 설정하는 방식은 우선 아래 메뉴로 이동 한다.

    이후 Add Volumes 버튼을 클릭해서 Volume을 설정을 한다.

    설정을 저장하면 다음과 같이 추가된 내역을 확인 할 수 있다.

    Claim 설정

    Available 된 Persistent Volumes을 pod와 연동을 위해서 Claim과 연결 해야 한다.

    다음 메뉴로 이동 한다.

    Add Volumn 버튼을 클릭하고, 아래와 같이 설정 한다.

    저장을 하고 나면, Bound 된 상태 확인이 가능하다.

    사용해보기

    이제 설정이 다 되었으면 다음과 같이 사용 하면 된다.

    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: elasticsearch
      namespace: devops-tool
      labels:
        app: elasticsearch
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: elasticsearch
      template:
        metadata:
          labels:
            app: elasticsearch
        spec:
          containers:
          - name: elasticsearch
            image: elasticsearch:latest
            ports:
            - containerPort: 9200
            imagePullPolicy: Always
            volumeMounts:
            - mountPath: /usr/share/elasticsearch/data
              name: elasticsearchdata
          volumes:
          - name: elasticsearchdata
            persistentVolumeClaim:
              claimName: mongodb-claim
    ---
    apiVersion: v1
    kind: Service
    metadata:
      namespace: devops-tool
      name: elasticsearch
    spec:
      ports:
        - port: 9200
          targetPort: 9200
          protocol: TCP
          name: http
          nodePort: 30560
      selector:
        app: elasticsearch
      type: LoadBalancer
    ---

    중간에 내용을 보면,

            volumeMounts:
            - mountPath: /usr/share/elasticsearch/data
              name: elasticsearchdata
          volumes:
          - name: elasticsearchdata
            persistentVolumeClaim:
              claimName: mongodb-claim

    여기를 잘 보면 된다.

    참고 자료

    728x90
Designed by Tistory.