개요
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# |
'가상화 > Kubernetes' 카테고리의 다른 글
[Docker] Priviate registry 구성 #3 - 인증 구성 (0) | 2020.04.03 |
---|---|
[Docker] Private registry 이미지 삭제 (4) | 2020.04.02 |
[Docker] Priviate registry 구성 #2 - TLS 구성 (0) | 2020.03.31 |
[Docker] Priviate registry 구성 #1 - 설치 (0) | 2020.03.31 |
[kubernetes] TroubelShooting (0) | 2020.03.27 |