※ (2021.01.03) K8S 1.23 버전에서는 Trident install 불가합니다.
[root@master trident-installer]# ./tridentctl install -n trident
INFO Created Kubernetes clients. namespace=default version=v1.23.1
ERRO Kubernetes version 1.23.1 is an unsupported Kubernetes version; Trident supports Kubernetes versions in the range [1.17, 1.22]. NetApp will not take Support calls or open Support tickets when using Trident with an unsupported Kubernetes version.
알아야 할 것: PV, PVC, CSI 관련 문서
매뉴얼: https://netapp-trident.readthedocs.io/en/latest/kubernetes/deploying/tridentctl-deploy.html
(2024.04.15) trident 매뉴얼 문서 링크 변경됨 -> https://docs.netapp.com/us-en/trident/trident-use/ontap-nas-prep.html#requirements
(2023.10.17) tanzu에 설치하는 경우 vserver의 nfs에 mount-rootonly 옵션을 enable해 줘야 하는 경우도 있음
1. Download & extract the installer
* wget 없을 시 설치 (yum install wget)
[root@master ~]# wget https://github.com/NetApp/trident/releases/download/v21.07.2/trident-installer-21.07.2.tar.gz
[root@master ~]# tar -xf trident-installer-21.07.2.tar.gz
[root@master ~]# cd trident-installer
[root@master ~]# pwd
/root/trident-installer
2. Install Trident
[root@master ~]# ./tridentctl install -n trident
....
INFO Starting Trident installation. namespace=trident
INFO Created service account.
INFO Created cluster role.
INFO Created cluster role binding.
INFO Added finalizers to custom resource definitions.
INFO Created Trident service.
INFO Created Trident secret.
INFO Created Trident deployment.
INFO Created Trident daemonset.
INFO Waiting for Trident pod to start.
INFO Trident pod started. namespace=trident pod=trident-csi-679648bd45-cv2mx
INFO Waiting for Trident REST interface.
INFO Trident REST interface is up. version=21.07.2
INFO Trident installation succeeded.
....
[root@master ~]# kubectl get pod -n trident
NAME READY STATUS RESTARTS AGE
trident-csi-679648bd45-cv2mx 4/4 Running 0 5m29s
trident-csi-vgc8n 2/2 Running 0 5m29s
[root@master ~]# ./tridentctl -n trident version
+----------------+----------------+
| SERVER VERSION | CLIENT VERSION |
+----------------+----------------+
| 21.07.2 | 21.07.2 |
+----------------+----------------+
3. setup directory의 yaml 수정 (스토리지 파트 참조)
Assigning aggregates to SVMs: 연동할 Netapp SVM에 -aggr-list 속성을 지정해 줘야 한다. (link)
backend.json은 연동할 NetApp Storage에 대한 정보를 기입한다. 해당 부분은 스토리지 엔지니어에게 문의하면 된다.
storagePrefix는 스토리지에 생성되는 볼륨의 Prefix로, 정한 이후 수정이 불가능하다.
[root@master ~]# cp sample-input/backends-samples/ontap-nas/backend-ontap-nas.json backend.json
[root@master ~]# vi backend.json
[root@master ~]# cat backend.json
{
"debug": true,
"version": 1,
"storageDriverName": "ontap-nas",
"backendName": "ontap-nas_git",
"managementLIF": "10.100.30.43",
"dataLIF": "10.100.31.105",
"svm": "<svm_name>",
"username": "<username>",
"password": "<password>",
"aggregate": "<aggr_name>",
"storagePrefix": "<k8s_>"
}
[root@master ~]# ./tridentctl -n trident create backend -f backend.json
+---------------+----------------+--------------------------------------+--------+---------+
| NAME | STORAGE DRIVER | UUID | STATE | VOLUMES |
+---------------+----------------+--------------------------------------+--------+---------+
| ontap-nas_git | ontap-nas | ********-****-****-****-************ | online | 0 |
+---------------+----------------+--------------------------------------+--------+---------+
.[root@master ~]# ./tridentctl -n trident get backend
+---------------+----------------+--------------------------------------+--------+---------+
| NAME | STORAGE DRIVER | UUID | STATE | VOLUMES |
+---------------+----------------+--------------------------------------+--------+---------+
| ontap-nas_git | ontap-nas | ********-****-****-****-************ | online | 0 |
+---------------+----------------+--------------------------------------+--------+---------+
4. storage class 적용
[root@master ~]# cp sample-input/storage-class-samples/storage-class-csi.yaml.templ sample-input/storage-class-basic-csi.yaml
[root@master ~]# vi sample-input/storage-class-basic-csi.yaml
[root@master ~]# cat sample-input/storage-class-basic-csi.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: netapp-csi
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-nas"
provisioningType: thin
snapshots: "True"
[root@master ~]# kubectl create -f sample-input/storage-class-basic-csi.yaml
storageclass.storage.k8s.io/netapp-csi created
[root@master ~]# kubectl get sc netapp-csi
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
netapp-csi (default) csi.trident.netapp.io Delete Immediate false 25s
[root@master ~]# ./tridentctl -n trident get storageclass netapp-csi -o json
{
"items": [
{
"Config": {
"version": "1",
"name": "netapp-csi",
"attributes": {
"backendType": "ontap-nas",
"provisioningType": "thin",
"snapshots": "true"
},
"storagePools": null,
"additionalStoragePools": null
},
"storage": {
"ontap-nas_git": [
"n2_aggr1"
]
}
}
]
}
* 설치 중 문제 발생시 trident 완전 삭제
./tridentctl -n trident obliviate crd
* 테스트
각 node에 nfs-util이 설치되어 있어야 한다 (yum install -y nfs-utils)
설치 후 reboot
1. PVC 생성
[root@master ~]# cat sample-input/pvc-basic.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: basic
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: netapp-csi
[root@master ~]# kubectl create -f sample-input/pvc-basic.yaml
persistentvolumeclaim/basic created
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
basic Bound pvc-18b6c7af-a289-4c08-a82e-28289fdc477d 1Gi RWO netapp-csi 2s
2. pod 생성
[root@master ~]# vi task-pv-pod.yaml
[root@master ~]# cat task-pv-pod.yaml
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: basic
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
[root@master ~]# kubectl create -f task-pv-pod.yaml
pod/task-pv-pod created
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
task-pv-pod 1/1 Running 0 9m13s
[root@master ~]# kubectl exec -it task-pv-pod -- df -h /usr/share/nginx/html
Filesystem Size Used Avail Use% Mounted on
10.100.31.105:/k8s_pvc_18b6c7af_a289_4c08_a82e_28289fdc477d 1.0G 320K 1.0G 1% /usr/share/nginx/html
스토리지에서도 만들어진 PV 볼륨을 확인할 수 있다.
C190::> vol show
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
k8s k8s_pvc_18b6c7af_a289_4c08_a82e_28289fdc477d
n2_aggr1 online RW 1GB 1023MB 0%
'IT Infrastructure > Kubernetes' 카테고리의 다른 글
[Kubernetes] 2. 쿠버네티스 설치 및 클러스터 setup (1) | 2022.01.05 |
---|---|
[Kubernetes] 1. 컨테이너의 이해와 도커 설치 (1) | 2022.01.03 |
쿠버네티스 실무 교육 5일차 (1) | 2021.10.22 |
쿠버네티스 실무 교육 4일차 (0) | 2021.10.21 |