Desplegando Trident en Kubernetes
Trident es un proyecto de código abierto totalmente mantenido por NetApp. Ha sido diseñado desde cero para ayudar a solucionar los requerimientos de persistencia de las aplicaciones en contenedores.
Después de haber Instalado kubernetes con kubeadm se hará la instalación de Trident, el cual se despliega como un pod dentro del propio clúster de kubernetes. Este pod se aprovisiona como un deployment de Kubernetes, el cual está compuesto por dos contenedores, un contenedor etcd para almacenar los datos de los volúmenes persistentes y otro contenedor con el trident-main. El contenedor etcd utiliza un volumen persistente para almacenar los datos.
Requisitos
Para que la instalación se lleve a cabo satisfactoriamente, es necesario poder montar el volumen persistente para el contenedor etcd durante el proceso de instalación. Para ello es necesario instalar los componentes NFS e iSCSI en los nodos del clúster de kubernetes. También se conecta los iniciadores iSCSI contra la dirección IP iSCSI del SVM de la cabina.
yum install nfs-utils -y
yum install -y iscsi-initiator-utils
iscsiadm --mode discovery --op update --type sendtargets --portal 192.168.0.202
iscsiadm --mode node -l all
iscsiadm --mode session
También se crea un namaspace en kubernetes.
kubectl create namespace trident
Instalación
Inicialmente se descarga el paquete de Trident, en este caso la versión 19.01.0, y se descomprime.
wget https://github.com/NetApp/trident/releases/download/v19.01.0/trident-installer-19.01.0.tar.gz
tar -xf trident-installer-19.01.0.tar.gz
En la carpeta ‘sample-imput’ se encuentran varios ficheros de ejemplos para backends, storage classes y persistent volumes claim. Para facilitar la instalación se copia un fichero de ejemplo de backend a la carpeta ‘setup’, y se edita con la información del entorno. En este caso se ha utilizado una Storage Virtual Machine de acceso NAS para este primer volumen persistente.
cp sample-input/backend-ontap-nas.json setup/backend.json
cat setup/backend.json
{
"version": 1,
"storageDriverName": "ontap-nas",
"backendName": "ONTAP NAS",
"managementLIF": "192.168.0.200",
"dataLIF": "192.168.0.201",
"svm": "kubernetes",
"username": "vsadmin",
"password": "password"
}
Se ejecuta el programa de instalación.
./tridentctl install -n trident
INFO Created installer service account. serviceaccount=trident-installer
INFO Waiting for object to be created. objectName=clusterRole
INFO Created installer cluster role. clusterrole=trident-installer
INFO Waiting for object to be created. objectName=clusterRoleBinding
INFO Created installer cluster role binding. clusterrolebinding=trident-installer
INFO Created installer configmap. configmap=trident-installer
INFO Waiting for object to be created. objectName=installerPod
INFO Created installer pod. pod=trident-installer
INFO Waiting for Trident installer pod to start.
INFO Trident installer pod started. namespace=trident pod=trident-installer
INFO Starting Trident installation. namespace=trident
INFO Created service account.
INFO Created cluster role.
INFO Created cluster role binding.
INFO Created Trident deployment.
INFO Waiting for Trident pod to start.
INFO Trident pod started. namespace=trident pod=trident-764d46d5d8-dhnll
INFO Waiting for Trident REST interface.
INFO Trident REST interface is up. version=19.01.0
INFO Trident installation succeeded.
INFO Waiting for Trident installer pod to finish.
INFO Trident installer pod finished. namespace=trident pod=trident-installer
INFO Deleted installer pod. pod=trident-installer
INFO Deleted installer configmap. configmap=trident-installer
INFO In-cluster installation completed.
INFO Deleted installer cluster role binding.
INFO Deleted installer cluster role.
INFO Deleted installer service account.
Después de que la instalación haya finalizado satisfactoriamente, se puede verificar la versión de Trident instalada.
./tridentctl version -n trident
+----------------+----------------+
| SERVER VERSION | CLIENT VERSION |
+----------------+----------------+
| 19.01.0 | 19.01.0 |
+----------------+----------------+
En el sistema de almacenamiento ONTAP se ha aprovisionado automáticamente el volumen para el contenedor etcd.
ontap::> volume show -vserver kubernetes
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
kubernetes trident_trident aggr_n3_DL_Data online RW 2GB 2.00GB 0%
Trident se ha instalado como un deployment de kubernetes, y se puede inspeccionar el pod para ver los detalles.
kubectl get deployment -n trident
NAME READY UP-TO-DATE AVAILABLE AGE
trident 1/1 1 1 5d22h
kubectl get pod -n trident
NAME READY STATUS RESTARTS AGE
trident-764d46d5d8-dhnll 2/2 Running 0 2m19s
En uno de los nodos de kubernetes se puede encontrar los dos contenedores y acceder a ellos.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e76d386fca73 643c21638c1c "/usr/local/bin/etcd…" 5 days ago Up 5 days k8s_etcd_trident-764d46d5d8-dhnll_trident_f551eabd-56fe-11e9-a678-0050569654ca_0
e047298c8a87 1a74b69a7a5d "/usr/local/bin/trid…" 5 days ago Up 5 days k8s_trident-main_trident-764d46d5d8-dhnll_trident_f551eabd-56fe-11e9-a678-0050569654ca_0