본문 바로가기

가상화/Kubernetes

[kubernetes] NFS 구성

반응형

개요

kubernetes에서 지원하는 많은 볼륨중, 가장 많이 쓰이고 효율적인 NFS를 이용하여 파드를 구성하는 방법을 예로 들어 구성해보도록 한다.

구성환경

kubernetes 1.17.4, Docker 19.03.8

구성 절차

1. nfs 서버/클라이언트 구성
2. 이미지 빌드 및 registry 등록
3. 디플로이먼트 및 서비스 생성

 

1. NFS 구성

 1.1 NFS 서버

 - nfs 마운트 포인트 지점및 html Document Root 디렉토리, html파일 생성

shell> mkdir -p /opt/nfsvolumes/html
shell> vi /opt/nfsvolumes/html/index.html

  - /etc/exports 파일

/opt/nfsvolumes *(rw,no_root_squash,no_all_squash,sync)

 1.2 Worker Node

 - Wokrker Node에 nfs-util(centos),nfs-common(debian,ubuntu) 패키지 설치

2. 이미지 빌드

 - nginx의 default.conf 파일 복사

shell> docker pull nginx:1.17.8
shell> docker run -itd --name tempnginx nginx:1.17.8  
shell> docker cp tempnginx:/etc/nginx/conf.d/default.conf  default.conf 
shell> docker stop tempnginx && docker rm tempnginx

 - default.conf 파일 편집

server { 
    listen       80; 
    server_name  localhost; 

    #charset koi8-r; 
    #access_log  /var/log/nginx/host.access.log  main; 

    location / { 
        root   /nfs/html;      # Document Root를 NFS 디렉토리 변경
        index  index.html index.htm; 
    }

 - Dockerfile 빌드
   shell> docker build -t registry.hoya.com/nginxnfs:v1 .

FROM nginx:1.17.8 
MAINTAINER admin@hoya.com 
WORKDIR /etc/nginx 
copy default.conf conf.d/default.conf 
run mkdir /nfs

 - 빌드한 이미지를 registry 서버에 push

   shell> docker push registry.hoya.com/nginxnfs:v1

 

3. 디플로이먼트 및 서비스 생성

 3.1 디플로이먼트 생성

 shell> kubectl get apply -f  nginxnfs-deployment.yaml

 - nginxnfs-deployment.yaml

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nginxnfs-deployment 
  labels: 
    app: nginxnfs 
spec: 
  replicas: 3 
  selector: 
    matchLabels: 
      app: nginxnfs 
  template: 
    metadata: 
      labels: 
        app: nginxnfs 
    spec: 
      containers: 
      - name: nginxnfs 
        image: registry.hoya.com/nginxnfs:v1 
        ports: 
        - containerPort: 80 
        volumeMounts: 
        - name: nfsvol1 
          mountPath: /nfs 
          readOnly: false 
      volumes: 
      - name : nfsvol1 
        nfs: 
          path: /opt/nfsvolumes 
          server: 192.168.0.167

 - Deployment 확인

shell> kubectl get deploy 
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE 
nginxnfs-deployment   3/3     3            3           8m6s 
shell>

 - Pod 확인

shell> kubectl get pod
NAME                                  READY   STATUS    RESTARTS   AGE
nginx-deployment-5d9b77cbff-f6m5f     1/1     Running   7          4d6h
nginx-deployment-5d9b77cbff-jfbjb     1/1     Running   7          4d6h
nginx-deployment-5d9b77cbff-nj7vv     1/1     Running   7          4d6h
shell>

 3.2 서비스 생성 

  shell> kubectl expose deploy nginxnfs-deployment --name nginxnfs-svc --type=NodePort

  OR shell> kubectl apply -f nginxnfs-svc.yaml

  - nginxnfs-svc.yaml

kind: Service 
apiVersion: v1 
metadata: 
  name: nginxnfs-svc 
spec: 
  type: NodePort 
  selector: 
    app: nginxnfs 
  ports: 
    - nodePort: 30163 
      port: 80 
      targetPort: 80

  - 서비스 확인

shell> kubectl get svc
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP      10.96.0.1               443/TCP        12d
nginxnfs-svc       NodePort       10.97.200.215           80:30163/TCP   3m5s
shell>

 3.3 NFS 마운트 확인

 - 컨테이너 접속후 NFS 볼륨이 마운트 되었는지 확인

shell> kubectl exec -it nginxnfs-deployment-b8647bf5b-k5tw4 bash
root@nginxnfs-deployment-b8647bf5b-k5tw4:/etc/nginx# df -h
Filesystem                      Size  Used Avail Use% Mounted on
overlay                          16G  7.1G  7.7G  48% /
tmpfs                            64M     0   64M   0% /dev
tmpfs                           2.0G     0  2.0G   0% /sys/fs/cgroup
192.168.0.167:/opt/nfsvolumes    44G   33G   11G  76% /nfs
/dev/mapper/mydebian2--vg-root   16G  7.1G  7.7G  48% /etc/hosts
shm                              64M     0   64M   0% /dev/shm
tmpfs                           2.0G   12K  2.0G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                           2.0G     0  2.0G   0% /proc/acpi
tmpfs                           2.0G     0  2.0G   0% /sys/firmware
root@nginxnfs-deployment-b8647bf5b-k5tw4:/etc/nginx#
반응형