가상화/Kubernetes

[kubernetes] NFS 구성

날았다 고양이 2020. 4. 1. 13:35
반응형

개요

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#
반응형