Инструменты Trident#
Trident#
Trident - инструмент для автоматического управления предоставлением хранилища данных на основе NetApp. Он обеспечивает доступ к хранилищу данных через REST-API, к которому можно подключиться через интерфейс командной строки.
Предварительные условия#
Предварительные условия установки Trident:
права администратора кластера DropAPP;
возможность монтирования тома со всех рабочих узлов DropApp;
установлен
kubectl.
Установка#
Для установки Trident выполните шаги:
Загрузите и распакуйте Trident-operator.
Для установки Trident-operator необходимо создать манифест, который описывает конфигурацию оператора. В манифесте нужно указать имя оператора, версию, настройки ресурсов и другие параметры. Ниже приведен пример манифеста для установки Trident-operator:
apiVersion: dapp-trident-operator-template kind: OperatorGroup metadata: name: trident spec: targetNamespace: trident-system reconciliation: Periodic period: 1m operators: – name: trident.io/trident version: x.x.xЭто создаст группу операторов Trident с именем Trident и настройкой периодической проверки ресурсов в целевой области Trident-system. Далее можно использовать оператор Trident для управления ресурсами в DropApp.
Ниже представлен пример готового манифеста:
Trident.yaml
--- apiVersion: v1 kind: Namespace metadata: name: trident --- apiVersion: v1 kind: ServiceAccount metadata: name: trident-operator namespace: trident labels: app: operator.trident.netapp.io --- # Source: trident-operator/templates/clusterrole.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: null name: trident-operator labels: app: operator.trident.netapp.io rules: # Permissions same as Trident - apiGroups: - "" resources: - namespaces verbs: - get - list - apiGroups: - "" resources: - persistentvolumes - persistentvolumeclaims verbs: - get - list - watch - create - delete - update - patch - apiGroups: - "" resources: - persistentvolumeclaims/status verbs: - update - patch - apiGroups: - storage.k8s.io resources: - storageclasses verbs: - get - list - watch - create - delete - update - patch - apiGroups: - "" resources: - events verbs: - get - list - watch - create - update - patch - apiGroups: - "" resources: - secrets verbs: - get - list - watch - create - delete - update - patch - apiGroups: - "" resources: - resourcequotas verbs: - get - list - watch - create - delete - update - patch - apiGroups: - "" resources: - pods verbs: - get - list - watch - create - delete - update - patch - apiGroups: - "" resources: - pods/log verbs: - get - list - watch - apiGroups: - "" resources: - nodes verbs: - get - list - watch - update - apiGroups: - storage.k8s.io resources: - volumeattachments verbs: - get - list - watch - update - patch - apiGroups: - storage.k8s.io resources: - volumeattachments/status verbs: - update - patch - apiGroups: - snapshot.storage.k8s.io resources: - volumesnapshots - volumesnapshotclasses verbs: - get - list - watch - update - patch - apiGroups: - snapshot.storage.k8s.io resources: - volumesnapshots/status - volumesnapshotcontents/status verbs: - update - patch - apiGroups: - snapshot.storage.k8s.io resources: - volumesnapshotcontents verbs: - get - list - watch - create - delete - update - patch - apiGroups: - csi.storage.k8s.io resources: - csidrivers - csinodeinfos verbs: - get - list - watch - create - delete - update - patch - apiGroups: - storage.k8s.io resources: - csidrivers - csinodes verbs: - get - list - watch - create - delete - update - patch - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - get - list - watch - create - delete - update - patch - apiGroups: - trident.netapp.io resources: - tridentversions - tridentbackends - tridentstorageclasses - tridentvolumes - tridentvolumepublications - tridentvolumereferences - tridentnodes - tridenttransactions - tridentsnapshots - tridentbackendconfigs - tridentbackendconfigs/status - tridentmirrorrelationships - tridentmirrorrelationships/status - tridentsnapshotinfos - tridentsnapshotinfos/status - tridentprovisioners # Required for Tprov - tridentprovisioners/status # Required to update Tprov's status section - tridentorchestrators # Required for torc - tridentorchestrators/status # Required to update torc's status section verbs: - get - list - watch - create - delete - update - patch - apiGroups: - policy resources: - podsecuritypolicies verbs: - use resourceNames: - tridentpods # Now Operator specific permissions - apiGroups: - "" resources: - namespaces verbs: - create - patch - apiGroups: - apps resources: - deployments - daemonsets - statefulsets verbs: - get - list - watch - create - apiGroups: - apps resources: - deployments - daemonsets - statefulsets verbs: - delete - update - patch resourceNames: - trident-csi - trident-csi-windows - trident - apiGroups: - "" resources: - pods/exec - services - serviceaccounts verbs: - get - list - create - apiGroups: - "" resources: - pods/exec - services verbs: - delete - update - patch resourceNames: - trident-csi - trident - apiGroups: - "" resources: - serviceaccounts verbs: - delete - update - patch resourceNames: - trident-controller - trident-node-linux - trident-node-windows - trident-csi - trident - apiGroups: - authorization.openshift.io - rbac.authorization.k8s.io resources: - clusterroles - clusterrolebindings verbs: - list - create - apiGroups: - authorization.openshift.io - rbac.authorization.k8s.io resources: - clusterroles - clusterrolebindings verbs: - delete - update - patch resourceNames: - trident-controller - trident-node-linux - trident-node-windows - trident-csi - trident - apiGroups: - policy resources: - podsecuritypolicies verbs: - list - create - apiGroups: - policy resources: - podsecuritypolicies resourceNames: - tridentpods verbs: - delete - update - patch - apiGroups: - security.openshift.io resources: - securitycontextconstraints verbs: - get - list - create - apiGroups: - security.openshift.io resources: - securitycontextconstraints resourceNames: - trident-controller - trident-node-linux - trident-node-windows - trident verbs: - delete - update - patch - apiGroups: - policy resources: - podsecuritypolicies verbs: - use resourceNames: - tridentoperatorpods --- # Source: trident-operator/templates/clusterrolebinding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: trident-operator labels: app: operator.trident.netapp.io subjects: - kind: ServiceAccount name: trident-operator namespace: trident roleRef: kind: ClusterRole name: trident-operator apiGroup: rbac.authorization.k8s.io --- # Source: trident-operator/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: operator.trident.netapp.io name: trident-operator namespace: trident spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: operator.trident.netapp.io name: trident-operator template: metadata: labels: app: operator.trident.netapp.io name: trident-operator spec: nodeSelector: kubernetes.io/arch: amd64 kubernetes.io/os: linux serviceAccountName: trident-operator containers: - command: - /trident-operator - --debug=false env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: OPERATOR_NAME value: trident-operator image: dappregistry/1.2/trident-operator:22.10.0 imagePullPolicy: IfNotPresent name: trident-operatorНастройте серверную часть временного хранилища, которую установщик Trident будет использовать один раз для подготовки тома для хранения собственных метаданных.
Поместите файл backend.json в каталог установки
setup:cp sample-input/<backend template>.json setup/backend.json vi setup/backend.jsonПримеры файлов конфигурации для различных типов backend можно найти в
sample-inputкаталоге.Выполните проверку возможности установки Trident:
# ./tridentctl install --dry-run -n trident INFO Starting storage driver. backend=setup/backend.json INFO Storage driver loaded. driver=ontap-nas INFO Dry run completed, no problems found.Флаг
--dry-runпозволяет выполнить проверку текущей среды и убедиться что Trident установится успешно без внесения изменений в среду.Флаг
-nуказывает namespace, в которое будет установлен Trident.Запустите установщик Trident:
#./tridentctl install -n trident INFO Starting storage driver. backend=setup/backend.json INFO Storage driver loaded. driver=ontap-nas INFO Starting Trident installation. namespace=trident INFO Created service account. INFO Created cluster role. INFO Created cluster role binding. INFO Created PVC. INFO Created PV. pv=trident INFO Waiting for PVC to be bound. pvc=trident INFO Created Trident deployment. INFO Waiting for Trident pod to start. INFO Trident pod started. namespace=trident pod=trident-7d5d659bd7-tzth6 INFO Trident installation succeeded.Проверьте результат установки:
kubectl get pod -n tridentВывод будет следующим:
NAME READY STATUS RESTARTS AGE trident-7d5d659bd7-tzth6 2/2 Running 1 14s # ./tridentctl -n trident version +----------------+----------------+ | SERVER VERSION | CLIENT VERSION | +----------------+----------------+ | v22.10.0 | v22.10.0 | +----------------+----------------+Создайте внутреннюю конфигурацию хранилища, из которой Trident будет выделять тома:
./tridentctl -n trident create backend -f setup/backend.json +-----------------------+----------------+--------+---------+ | NAME | STORAGE DRIVER | ONLINE | VOLUMES | +-----------------------+----------------+--------+---------+ | ontapnas_10.0.0.1 | ontap-nas | true | 0 | +-----------------------+----------------+--------+---------+Создайте класс хранения
./tridentctl -n trident get backend +-----------------------+----------------+--------+---------+ | NAME | STORAGE DRIVER | ONLINE | VOLUMES | +-----------------------+----------------+--------+---------+ | ontapnas_10.0.0.1 | ontap-nas | true | 0 | +-----------------------+----------------+--------+---------+ cp sample-input/storage-class-basic.yaml.templ sample-input/storage-class-basic.yaml vi sample-input/storage-class-basic.yamlКласс хранилища в данном сценарии основан на
sample-input/storage-class-basic.yaml.templ, который поставляется с установщиком, заменив__BACKEND_TYPE__именем драйвера хранилища.Используйте
kubectlдля создания хранилища как объекта DropApp:kubectl create -f sample-input/storage-class-basic.yamlПроверьте базовый класс хранилища:
kubectl get sc basic NAME PROVISIONER basic netapp.io/trident ./tridentctl -n trident get storageclass basic -o json { "items": [ { "Config": { "version": "1", "name": "basic", "attributes": { "backendType": "ontap-nas" } }, "storage": { "ontapnas_10.0.0.1": [ "aggr1", "aggr2", "aggr3", "aggr4" ] } } ] }Создайте манифест постоянного тома для использования созданного класса хранилища
sample-input/pvc-basic.yamlУбедитесь, что имя класса соответствует созданному в шаге 6:
kubectl create -f sample-input/pvc-basic.yaml # Аргумент '-aw' позволяет наблюдать за процессом подготовки постоянного хранилища kubectl get pvc -aw NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE basic Pending basic 1s basic Pending default-basic-6cb59 0 basic 5s basic Bound default-basic-6cb59 1Gi RWO basic 5sСмонтируйте том в pod:
cat << EOF > 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 EOF kubectl create -f task-pv-pod.yamlУбедитесь, что pod запустился:
kubectl get pod -awУбедитесь, что pod смонтирован в папке
/usr/share/nginx/html:kubectl exec -it task-pv-pod -- df -h /usr/share/nginx/html Filesystem Size Used Avail Use% Mounted on <IP-address>:/trident_demo_default_basic_6cb59 973M 192K 973M 1% /usr/share/nginx/htmlУдалите pod:
kubectl delete pod task-pv-podНа данном шаге удален только pod, том продолжает существовать и может быть использован другими pods.
Удалите том выполнив команду:
kubectl delete pvc basic
Trident-operator#
Trident-operator - оператор DropApp, который используется для управления динамическим предоставлением и управления хранилищем данных. Оператор обеспечивает автоматическое создание и удаление хранилища данных в DropApp, управление и распределение данных между узлами кластера.
Данный раздел содержит шаги необходимые для начала работы с Trident Operator для установки и управления Trident.
Предварительные условия для установки Trident-operator#
Предварительные условия для установки Trident Operator:
получены права администратора кластера DropAPP;
разрешено монтирование тома со всех рабочих узлов DropApp;
установлен
kubectl.
Установка Trident-operator#
Установите установочный пакет Trident из репозитория:
wget https://<repo>/v22.10.0 /trident-installer-22.10.0.tar.gz
# Путь указан в качестве примера
tar -xf trident-installer-20.04.0.tar.gz
cd trident-installer