kubernetes pv pvc nfs nginx 실전 지구 화 메모리 볼 륨, 지구 화 메모리 볼 륨 성명 실전

PV 사용
상태 적 인 응용 과 데이터 에 대한 지속 적 인 응용 이 있 습 니 다. 우 리 는 hostPath 나 empty Dir 방식 으로 우리 의 데 이 터 를 지속 적 으로 저장 해 야 합 니 다. 그러나 우 리 는 응용 프로그램의 지속 적 인 데 이 터 를 저장 해 야 합 니 다. 그러면 용 기 는 재 구축 후에 도 예전 의 데 이 터 를 사용 할 수 있 습 니 다.그러나 분명히 저장 자원 과 CPU 자원, 그리고 메모리 자원 이 많이 다르다. 바 텀 기술 의 세부 사항 을 차단 하고 사용자 가 더욱 편리 하 게 사용 할 수 있 도록 Kubernetes 는 PV 와 PVC 두 가지 중요 한 자원 대상 을 도입 하여 저장 에 대한 관 리 를 실현 했다.이것 도 우리 수업 에서 여러분 과 설명해 야 할 핵심 입 니 다. PV 와 PVC 입 니 다.
개념 PV 의 전 칭 은 PersistentVolume (지구 화 볼 륨) 이 고 저층 의 공유 저장 소 에 대한 추상 적 인 것 이다. PV 는 관리자 가 만 들 고 설정 하 는데 구체 적 인 저층 의 공유 저장 기술 의 실현 방식 과 관련된다. 예 를 들 어 Ceph, GlusterFS, NFS 등 은 모두 플러그 인 체 제 를 통 해 공유 저장 소 와 의 연결 을 완성 한다.
PVC 의 전 칭 은 PersistentVolumeClaim (지구 화 볼 륨 성명) 이 고 PVC 는 사용자 가 저장 하 는 성명 이다. PVC 와 Pod 는 비교적 유사 하 다. Pod 는 노드 를 소모 하고 PVC 는 PV 자원 을 소모 하 며 Pod 는 CPU 와 메모 리 를 요청 할 수 있 으 며 PVC 는 특정한 저장 공간 과 접근 모드 를 요청 할 수 있다.진정 으로 저장 소 를 사용 하 는 사용 자 는 밑바닥 의 저장 소 구현 디 테 일 에 관심 을 갖 지 않 고 PVC 만 직접 사용 하면 된다.
그러나 PVC 를 통 해 일정한 저장 공간 에 요청 하 는 것 도 저장 장치 에 대한 다양한 수 요 를 만족 시 키 기 에 부족 할 수 있 습 니 다. 또한 서로 다른 응용 프로그램 이 저장 성능 에 대한 요구 도 다 를 수 있 습 니 다. 예 를 들 어 읽 기와 쓰기 속도, 병행 성능 등 이 있 습 니 다. 이 문 제 를 해결 하기 위해 Kubernetes 는 새로운 자원 대상 인 StorageClass 를 도 입 했 습 니 다.StorageClass 의 정 의 를 통 해 관리 자 는 저장 자원 을 특정한 유형의 자원 으로 정의 할 수 있다. 예 를 들 어 빠 른 저장, 느 린 저장 등 이다. 사용 자 는 StorageClass 의 설명 에 따라 각종 저장 자원 의 구체 적 인 특성 을 직관 적 으로 알 수 있다. 그러면 응용 특성 에 따라 적당 한 저장 자원 을 신청 할 수 있다.
NFS 설치
저 희 는 편리 함 을 보 여주 기 위해 상대 적 으로 간단 한 NFS 라 는 저장 자원 을 사용 하기 로 결 정 했 습 니 다. 그 다음 에 저 희 는 노드 10.129.247.241 에 NFS 서 비 스 를 설치 하고 데이터 디 렉 터 리: / data / k8s /
방화벽 을 닫다
systemctl stop firewalld.service
systemctl disable firewalld.service

설치 설정 nfs
yum -y install nfs-utils rpcbind

공유 디 렉 터 리 설정 권한:
chmod 755 /data/k8s/

nfs, nfs 의 기본 설정 파일 을 설정 합 니 다. / etc / exports 파일 에 다음 설정 정 보 를 추가 합 니 다.
vi /etc/exports
/data/k8s  *(rw,sync,no_root_squash)

설정 설명:
/ data / k8s: 공 유 된 데이터 디 렉 터 리 입 니 다 *: 누구나 연결 할 수 있 는 권한 이 있 음 을 의미 합 니 다. 물론 하나의 네트워크, 하나의 IP 일 수도 있 고 도 메 인 이름 rw 일 수도 있 습 니 다. 읽 기와 쓰기 권한 sync: 파일 을 하 드 디스크 와 메모리 no 에 동시에 기록 하 는 것 을 의미 합 니 다.root_squash: NFS 호스트 에 로그 인하 여 공유 디 렉 터 리 를 사용 하 는 사용자 가 root 일 때 그 권한 은 익명 사용자 로 전 환 됩 니 다. 보통 UID 와 GID 는 nobody 신분 이 됩 니 다. 물론 nfs 의 설정 이 많 습 니 다. 관심 있 는 학생 들 은 인터넷 에서 찾 아 볼 수 있 습 니 다.
서비스 nfs 를 시작 하려 면 rpc 에 등록 해 야 합 니 다. rpc 가 다시 시작 되면 등 록 된 파일 을 잃 어 버 립 니 다. 그 에 게 등 록 된 서 비 스 는 시작 순 서 를 다시 시작 해 야 합 니 다. rpcbid 를 먼저 시작 하 십시오.
$ systemctl start rpcbind.service
$ systemctl enable rpcbind
$ systemctl status rpcbind

그리고 nfs 서 비 스 를 시작 합 니 다:
$ systemctl start nfs.service
$ systemctl enable nfs
$ systemctl status nfs
[root@k8smaster k8s]# systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since   2020-01-10 09:53:13 CST; 1 weeks 2 days ago
 Main PID: 4090 (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
   CGroup: /system.slice/nfs-server.service

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.


Started 는 NFS 서버 가 성공 적 으로 시작 되 었 음 을 증명 합 니 다.
또한 우 리 는 아래 의 명령 을 통 해 확인 할 수 있다.
[root@k8smaster k8s]# rpcinfo -p|grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl

구체 적 인 디 렉 터 리 마 운 트 권한 보기:
$ cat /var/lib/nfs/etab
[root@k8smaster k8s]# cat /var/lib/nfs/etab
/data/k8s       *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)

여기까지 nfs server 를 설치 하 는 데 성 공 했 습 니 다. 그 다음 에 노드 10.129.247.242 에 nfs 클 라 이언 트 를 설치 하여 nfs 를 검증 하 겠 습 니 다.
nfs 를 설치 하려 면 현재 방화벽 을 닫 아야 합 니 다.
$ systemctl stop firewalld.service
$ systemctl disable firewalld.service

그리고 nfs 설치
$ yum -y install nfs-utils rpcbind

설치 가 완료 되면 위의 방법 과 마찬가지 로 rpc 를 시작 한 다음 nfs 를 시작 합 니 다.
$ systemctl start rpcbind.service 
$ systemctl enable rpcbind.service 
$ systemctl start nfs.service    
$ systemctl enable nfs.service

마 운 트 데이터 디 렉 터 리 클 라 이언 트 가 시작 되면 클 라 이언 트 에서 nfs 테스트 를 마 운 트 합 니 다. 먼저 nfs 에 공유 디 렉 터 리 가 있 는 지 확인 하 십시오.
[root@k8smaster k8s]# showmount -e 10.129.247.241
Export list for 10.129.247.241:
/data/k8s *

그리고 클 라 이언 트 에 새 디 렉 터 리 를 만 듭 니 다.
$ mkdir -p /root/course/kubeadm/data

nfs 공유 디 렉 터 리 를 위 디 렉 터 리 에 마 운 트 하기:
$ mount -t nfs 10.129.247.240:/data/k8s /root/course/kubeadm/data

마 운 트 에 성공 한 후 클 라 이언 트 위의 디 렉 터 리 에 파일 을 새로 만 든 다음 nfs 서버 의 공유 디 렉 터 리 아래 에 도 이 파일 이 나타 날 지 관찰 합 니 다.
$ touch /root/course/kubeadm/data/test.txt

그리고 nfs 서버 에서 보기:
$ ls -ls /data/k8s/
total 4

위 에 test. txt 파일 이 나타 나 면 nfs 마 운 트 에 성 공 했 음 을 증명 합 니 다.
//        
systemctl disable firewalld.service
systemctl stop firewalld.service
yum -y install nfs-utils rpcbind
mkdir -p /data/k8s
chmod 755 /data/k8s/
vi /etc/exports
systemctl start rpcbind.service
systemctl enable rpcbind
systemctl status rpcbind
systemctl start nfs.service
systemctl enable nfs
systemctl status nfs
systemctl disable firewalld.service
systemctl stop firewalld.service
yum -y install nfs-utils rpcbind
systemctl start rpcbind.service 
systemctl enable rpcbind.service 
systemctl start nfs.service    
systemctl enable nfs.service
showmount -e 10.129.247.241
mkdir -p /root/course/kubeadm/data
mount -t nfs 10.129.247.241:/data/k8s /root/course/kubeadm/data
touch /root/course/kubeadm/data/test.txt

PV
위의 NFS 공유 저장 소 가 있 으 면 PV 와 PVC 를 사용 할 수 있 습 니 다.PV 는 저장 자원 으로서 주로 저장 능력, 액세스 모드, 저장 유형, 회수 정책 등 관건 적 인 정 보 를 포함 합 니 다. 다음은 PV 대상 을 새로 만 들 고 nfs 형식의 백 엔 드 저장 소, 1G 의 저장 공간 을 사용 합 니 다. 액세스 모드 는 ReadWrite Once 이 고 회수 전략 은 Recyle 입 니 다. 대응 하 는 YAML 파일 은 다음 과 같 습 니 다. (pv1 - demo. yaml)
pv
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv1
spec:
  capacity: 
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/k8s
    server: 10.129.247.241

PVC
pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nfs
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

쓰다
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nfs-pvc
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nfs-pvc
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
      volumes:
      - name: www
        persistentVolumeClaim:
          claimName: pvc-nfs-2

---

apiVersion: v1
kind: Service
metadata:
  name: nfs-pvc
  labels:
    app: nfs-pvc
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: web
  selector:
    app: nfs-pvc
[root@k8smaster k8s]# kubectl get nodes -o wide
NAME        STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8smaster   Ready    master   46h   v1.15.4   10.129.247.241           CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.7
k8snode1    Ready       46h   v1.15.4   10.129.247.242           CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.7
k8snode2    Ready       46h   v1.15.4   10.129.247.243           CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.7
[root@k8smaster k8s]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1                443/TCP        46h
nfs-pvc      NodePort    10.108.174.179           80:13507/TCP   4m26s

/ data / k8s / 디 렉 터 리 에 index. html 새로 만 들 기
집단 외 / 내부 방문
http://10.129.247.241:13507/ http://10.129.247.242:13507/ http://10.129.247.243:13507/
CLUSTER - IP 접근
[root@k8smaster k8s]# curl http://10.108.174.179/ hello pvc
Kubernetes 가 지원 하 는 PV 유형 은 매우 많 습 니 다. 예 를 들 어 흔히 볼 수 있 는 Ceph, GlusterFs, NFS, 심지어 HostPath 도 가능 합 니 다. 그러나 HostPath 는 전에 도 말 했 듯 이 단기 테스트 에 만 사용 할 수 있 고 더 많은 지원 유형 은 Kubernetes PV 공식 문서 로 가서 볼 수 있 습 니 다. 모든 저장 유형 은 각자 의 특징 이 있 기 때 문 입 니 다.그래서 우 리 는 사용 할 때 해당 하 는 문 서 를 보고 해당 하 는 인 자 를 설정 할 수 있 습 니 다.
그리고 똑 같이 kubectl 로 직접 만 들 면 됩 니 다.
$ kubectl create -f pv1-demo.yaml
persistentvolume "pv1" created
$ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM               STORAGECLASS   REASON    AGE
pv1       1Gi        RWO            Recycle          Available                                                12s

pv1 이 이미 생 성 되 었 음 을 볼 수 있 습 니 다. 상 태 는 Available 입 니 다. pv1 이 준비 되 었 음 을 나타 내 고 PVC 에 신청 할 수 있 습 니 다.우 리 는 위의 속성 을 각각 해석 합 시다.
Capacity (저장 능력) 일반적으로 PV 대상 은 하나의 저장 능력 을 지정 하고 PV 의 capacity 속성 을 통 해 설정 해 야 합 니 다. 현 재 는 저장 공간의 설정 만 지원 합 니 다. 바로 우리 가 있 는 storage = 1Gi 입 니 다. 그러나 미래 에는 IOPS, 스루풋 등 지표 설정 이 추 가 될 수 있 습 니 다.
AccessModes (액세스 모드) AccessModes 는 PV 에 대한 액세스 모드 설정 으로 사용자 가 저장 자원 에 대한 접근 권한 을 설명 하 는 데 사 용 됩 니 다. 접근 권한 은 다음 과 같은 몇 가지 방식 을 포함 합 니 다.
ReadWrite Once (RWO): 읽 기와 쓰기 권한 이지 만 한 노드 에 만 마 운 트 됩 니 다. ReadOnly Many (ROX): 읽 기 권한 만 있 고 여러 노드 에 마 운 트 될 수 있 습 니 다. ReadWrite Many (RWX): 읽 기와 쓰기 권한 은 여러 노드 에 마 운 트 될 수 있 습 니 다. 주의: 일부 PV 는 여러 접근 모드 를 지원 할 수 있 지만 마 운 트 할 때 한 가지 접근 모드 만 사용 할 수 있 습 니 다.다양한 접근 모드 는 적용 되 지 않 습 니 다.
다음 그림 은 Volume 플러그 인 이 지원 하 는 접근 모드 입 니 다: volume - access modes
persistentVolume Reclai정책 (회수 정책) 제 가 지정 한 PV 회수 정책 은 Recycle 입 니 다. 현재 PV 가 지원 하 는 정책 은 세 가지 가 있 습 니 다.
Retain (보류) - 데 이 터 를 보존 하려 면 관리자 가 수 동 으로 데 이 터 를 정리 해 야 합 니 다. Recycle (회수) - PV 의 데 이 터 를 제거 해 야 합 니 다. rm - rf / thevolume / * Delete (삭제) - PV 와 연 결 된 백 엔 드 저장 소 에서 volume 의 삭제 작업 을 완성 하 는 것 과 같 습 니 다. 물론 이것 은 클 라 우 드 서비스 업 체 의 저장 서비스, 예 를 들 어 ASW EBS 와 같은 경우 가 많 습 니 다.그러나 주의해 야 할 것 은 현재 NFS 와 HostPath 두 가지 유형 만 회수 정책 을 지원 하고 있다 는 점 이다.물론 일반적으로 Retain 이라는 전략 보험 으로 설정 합 니 다.

좋은 웹페이지 즐겨찾기