728x90
반응형
1. MASTER서버를 서버 공유 폴더를 생성한다.
* 서버측 nfs 패키지 설치
#!/bin/sh
# NFS 서버 패키지를 설치한다.
sudo apt install -y nfs-kernel-server
# 공유 디렉터리를 만든다.
sudo mkdir /srv/nfs
# 공유 디렉터리에 권한을 부여한다.
sudo chown -R nobody:nogroup /srv/nfs
sudo chmod 777 /srv/nfs
# 공유 디렉터리 내보내기를 설정한다.
echo "/srv/nfs *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee /etc/exports
# NFS 서버를 재시작하고 상태를 확인한다.
sudo systemctl restart nfs-kernel-server
sudo systemctl status nfs-kernel-server
# NFS 포트를 방화벽에서 허용한다.
sudo iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 2049 -j ACCEPT
2. node 서버를 클라이언트로 설정
node1,node2,node3 클라이언트 다 설치
#!/bin/sh
# NFS 클라이언트 패키지를 설치한다.
sudo apt install -y nfs-common
# 마운트할 디렉터리를 만든다.
sudo mkdir /srv/nfs
# 서버의 아이피와 함께 명령어를 이용하여 마운트할 디렉토리 확인
showmount -e 10.0.100.2 #서버 아이피
# 디렉터리를 마운트한다.
sudo mount -t nfs 10.0.100.2:/srv/nfs /srv/nfs
# 디스크를 확인한다.
df -h
# 공유디렉토리 해제하기
아래의 명령을 입력하면 mount point 가 해제된다.
umount /nfs
#공유디렉토리 영구 설정
서버 리부팅시에 자동으로 연결을 하기 위하여 아래의 파일을 편집한다.
vi /etc/fstab
해당 파일의 하단에 아래와 같이 nfs 로 연결할 정보를 입력한 후 저장한다.
10.0.100.2:/srv/nfs /srv/nfs nfs rw,sync,hard,intr 0 0
nfs 주요 데몬
rpc.mountd
* NFS 마운트 데몬이다
* /etc/exports 설정에 따라 클라이언트의 마운트 요청을 처리한다.
rpc.nfsd
* 클라이언트가 rpc.mountd에 접속이 유지되면, rpc.nfsd를 사용하여 클라이언트의 요구에 따라 처리한다.
* /etc/exports 설정에 따라 클라이언트는 다양한 작업을 할 수 있다.
rpc.lockd
* 파일 잠금과 관련된 데몬으로 현재 사용 중인 파일을 다른 사람이 사용할 수 없게 잠그는 역할을 한다.
rpc.startd
* 파일 잠금과 해제의 역할을 한다.
Portmap
– RPC(Remote Procedure Call) 프로그램을 port(tcp/udp)에 매핑시켜주는 데몬이다.
– NFS를 사용하려면 꼭 필요한 데몬이다.
– RPC를 사용하는 프로그램(NFS)이 시작되면 portmap은 서비스를 제공할 port를 portmap에 등록시킨다.
– portmap은 Time Service를 필요하다.
(Time Service는 xinetd 데몬에 포함된 것이다)
– portmap이 자신의 운영체제에 설치되어 있는지 확인해 봐야된다.
3. sa.yaml 파일 생성
vi sa.yaml
kind: ServiceAccount
apiVersion: v1
metadata:
name: nfs-provisioner-sa
labels:
env: production
tier: storage
app: nfs
name: nfs-provisioner-sa
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-provisioner-cr
labels:
env: production
tier: storage
app: nfs
name: nfs-provisioner-cr
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["watch", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services", "endpoints"]
verbs: ["get"]
- apiGroups: ["extensions"]
resources: ["podsecuritypolicies"]
resourceNames: ["nfs-provisioner"]
verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-provisioner-crb
labels:
env: production
tier: storage
app: nfs
name: nfs-provisioner-crb
subjects:
- kind: ServiceAccount
name: nfs-provisioner-sa
namespace: default
roleRef:
kind: ClusterRole
name: nfs-provisioner-cr
apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-provisioner-r
labels:
env: production
tier: storage
app: nfs
name: nfs-provisioner-r
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-provisioner-rb
labels:
env: production
tier: storage
app: nfs
name: nfs-provisioner-rb
subjects:
- kind: ServiceAccount
name: nfs-provisioner-sa
namespace: default
roleRef:
kind: Role
name: nfs-provisioner-r
apiGroup: rbac.authorization.k8s.io
4. sc.yaml 파일생성
vi sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs
labels:
env: production
tier: storage
app: nfs
name: nfs
provisioner: nfs-provisioner
parameters:
archiveOnDelete: "false"
5. deployment.yaml 파일생성
vi deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-provisioner-deployment
labels:
env: production
tier: storage
app: nfs
name: nfs-provisioner-deployment
spec:
selector:
matchLabels:
env: production
tier: storage
app: nfs
name: nfs-provisioner-pod
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
env: production
tier: storage
app: nfs
name: nfs-provisioner-pod
spec:
serviceAccountName: nfs-provisioner-sa
containers:
- name: nfs-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
env:
- name: PROVISIONER_NAME
value: nfs-provisioner
- name: NFS_SERVER
value: 10.0.100.2
- name: NFS_PATH
value: /srv/nfs
volumeMounts:
- name: nfs-volume
mountPath: /persistentvolumes
volumes:
- name: nfs-volume
nfs:
server: 10.0.100.2
path: /srv/nfs
이런구조로 파일 생성
6. 실행
root@master:/home/msa/k8s/envirionments/nfs# kubectl create -f sa.yaml
serviceaccount/nfs-provisioner-sa created
clusterrole.rbac.authorization.k8s.io/nfs-provisioner-cr created
clusterrolebinding.rbac.authorization.k8s.io/nfs-provisioner-crb created
role.rbac.authorization.k8s.io/nfs-provisioner-r created
rolebinding.rbac.authorization.k8s.io/nfs-provisioner-rb created
root@master:/home/msa/k8s/envirionments/nfs# kubectl create -f sc.yaml
storageclass.storage.k8s.io/nfs created
root@master:/home/msa/k8s/envirionments/nfs# kubectl create -f deployment.yaml
deployment.apps/nfs-provisioner-deployment created
7. 확인
root@master:/home/msa/k8s/envirionments/nfs# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nfs-provisioner-deployment 1/1 1 1 91s
root@master:/home/msa/k8s/envirionments/nfs# kubectl get ServiceAccount
NAME SECRETS AGE
default 0 64m
nfs-provisioner-sa 0 2m20s
root@master:/home/msa/k8s/envirionments/nfs#
공유폴더 설정 끝
# NFS 설정옵션
rw : 읽기, 쓰기 가능
ro : 읽기만 가능
secure : 클라이언트 마운트 요청시 포트를 1024 이하로 한다.
noaccess : 엑세스 거부
root_squach : 클라이언트의 root가 서버의 root 권한을 획득하는 것을 막는다.
no_root_squash : 클라이언트의 root와 root를 동일하게 한다.
sync : 파일 시스템이 변경되면 즉시 동기화 한다.
all_squach : root를 제외하고 서버와 클라이언트의 사용자를 동일한 권한으로 설정 한다.
no_all_squach : root를 제외하고 서버와 클라이언트의 사용자들을 하나의 권한을 가지도록 설정한다.
728x90
반응형
'시스템 > 쿠버네티스' 카테고리의 다른 글
[쿠버네티스] MSA(4) configmap 생성 (0) | 2024.01.25 |
---|---|
[쿠버네티스] MSA(3) 도메인별 시크릿 키 생성 (0) | 2024.01.25 |
[쿠버네티스] MSA(1) 개발환경 셋팅 (0) | 2024.01.25 |
[쿠버네티스] 젠킨스에서 깃랩전송시 fatal: could not read Username 에러 발생시 (0) | 2024.01.24 |
[쿠버네티스] Argocd TLS/SSL 적용 (0) | 2024.01.24 |
댓글