
1. EmptyDir

apiVersion: v1
kind: Pod
metadata:
name: pod-volume-1
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: empty-dir
mountPath: /mount1
- name: container2
image: kubetm/init
volumeMounts:
- name: empty-dir
mountPath: /mount2
volumes:
- name : empty-dir
emptyDir: {}
mount | grep mount1
echo "file context" >> file.txt
2. hostPath

apiVersion: v1
kind: Pod
metadata:
name: pod-volume-3
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: host-path
mountPath: /mount1
volumes:
- name : host-path
hostPath:
path: /node-v
type: DirectoryOrCreate
3. Pvc / Pv

PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-03
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteOnce
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In,
values: [k8s-node1]}
PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-01
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: ""
POD
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-3
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: pvc-pv
mountPath: /mount3
volumes:
- name : pvc-pv
persistentVolumeClaim:
claimName: pvc-01
label & select 이용
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-04
labels:
pv: pv-04
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteOnce
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In,
values: [k8s-node1]}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-04
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2G
storageClassName: ""
selector:
matchLabels:
pv: pv-04

1-1) StorageOS Operator 설치
설치
kubectl apply -f https://github.com/storageos/cluster-operator/releases/download/1.5.0/storageos-operator.yaml
설치 확인
kubectl get all -n storageos-operator
Depolyment 수정
kubectl edit deployments.apps storageos-cluster-operator -n storageos-operator
spec.containers.env의 DISABLE_SCHEDULER_WEBHOOK의 Value를 true로 설정
spec:
containers:
- command:
- cluster-operator
env:
- name: DISABLE_SCHEDULER_WEBHOOK
value: "false" # true 로 변경
image: storageos/cluster-operator:1.5.0
imagePullPolicy: IfNotPresent
관리 계정을 위한 Secret 생성 (username 및 password를 Base64문자로 만들기)
echo -n "admin" | base64
echo -n "1234" | base64
apiUsername 및 apiPassword 부분에 위 결과로 나온 문자 넣기
kubectl create -f - <<END\
apiVersion: v1
kind: Secret
metadata:
name: "storageos-api"
namespace: "storageos-operator"
labels:
app: "storageos"
type: "kubernetes.io/storageos"
data:
apiUsername: YWRtaW4= # admin
apiPassword: MTIzNA== # 1234
END
1-2) StorageOS 설치
StorageOS 설치 트리거 생성
kubectl apply -f - <<END
apiVersion: "storageos.com/v1"
kind: StorageOSCluster
metadata:
name: "example-storageos"
namespace: "storageos-operator"
spec:
secretRefName: "storageos-api" # Reference the Secret created in the previous step
secretRefNamespace: "storageos-operator" # Namespace of the Secret
k8sDistro: "kubernetes"
images:
nodeContainer: "storageos/node:1.5.0" # StorageOS version
resources:
requests:
memory: "512Mi"
END
설치 확인
kubectl get all -n storageos
Dashboard 접속을 위한 Service 수정 (방법 1)
kubectl edit service storageos -n storageos
spec에 externalIPs와 Master IP 추가
spec:
clusterIP: 10.109.77.121
externalIPs: # 추가
접속
Dashboard 접속을 위한 Service 수정 (방법 2)
kubectl edit service storageos -n storageos
type을 NodePort로 변경
spec:
ports:
- name: storageos
port: 5705
protocol: TCP
targetPort: 5705
nodePort: 30705 # port 번호 추가
type: NodePort # type 변경
접속
1-3) Default StorageClass 추가
kubectl apply -f - <<END
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: default
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/storageos
parameters:
adminSecretName: storageos-api
adminSecretNamespace: storageos-operator
fsType: ext4
pool: default
END
StorageClass 확인

2-1) PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-hostpath1
spec:
capacity:
storage: 1G
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/hostpath
type: DirectoryOrCreate
2-2) PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-hostpath1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: ""
2-3) PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-fast1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: "fast"
2-4) PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-default1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2G

3-1) Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-hostpath1
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
terminationGracePeriodSeconds: 0
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: hostpath
mountPath: /mount1
volumes:
- name: hostpath
persistentVolumeClaim:
claimName: pvc-hostpath1
cd /mount1
touch file.txt
StorageOS Dashboard
yaml
StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: default
annotations:
# Default StorageClass로 선택
storageclass.kubernetes.io/is-default-class: "true"
# 동적으로 PV생성시 PersistentVolumeReclaimPolicy 선택 (Default:Delete)
reclaimPolicy: Retain, Delete, Recycle
provisioner: kubernetes.io/storageos
# provisioner 종류에 따라 parameters의 하위 내용 다름
parameters: