问题描述
在使用 Openshift/Kubernetes 环境中,使用 NetApp 的 Trident PV(持久卷)编排器动态创建卷时,希望能够通过 CLI 与运行在集群中的 Trident 容器进行交互。用户已经尝试了一些方法,但并不满意。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方法1:使用服务器字符串
可以使用 tridentctl
CLI 的 -s
或 --server
参数来指定要远程连接的服务器。在这种情况下,您可以通过远程 shell 进入 Trident 容器,然后将其指向与本地 Trident Orchestrator 守护程序进行交互。
例如:
$ oc -n trident rsh trident-6bdbdbc5dd-l8qtr
Defaulting container name to trident-main.
Use 'oc describe pod/trident-6bdbdbc5dd-l8qtr -n trident' to see all of the containers in this pod.
/ #
现在可以进行交互:
/ # tridentctl -s 127.0.0.1:8000 get backend
+--------------------------+----------------+--------+---------+
| NAME | STORAGE DRIVER | ONLINE | VOLUMES |
+--------------------------+----------------+--------+---------+
| ontapnas_192.168.101.101 | ontap-nas | true | 389 |
+--------------------------+----------------+--------+---------+
/ #
方法2:创建 Bash 函数
为了扩展上述方法,可以在 Bash 中构建一个 shell 函数或别名,以简化这种交互的过程。
在 Openshift 中:
tridentctl () {
oc rsh -t -n trident -c trident-main \
$(oc get pods -n trident -l app=trident.netapp.io -o jsonpath="{.items[].metadata.name}") \
tridentctl -s 127.0.0.1:8000 $*
}
在 Kubernetes 中:
tridentctl () {
kubectl exec -t -n trident \
$(kubectl get pods -n trident -l app=trident.netapp.io -o jsonpath="{.items[].metadata.name}") \
-c trident-main -- tridentctl -s 127.0.0.1:8000 $*
}
设置了其中一个函数后,您可以从 macOS 系统运行以下命令:
$ tridentctl get storageclass -o json
{
"items": [
{
"Config": {
"version": "1",
"name": "basic",
"attributes": {
"backendType": "ontap-nas"
},
"storagePools": null,
"additionalStoragePools": null
},
"storage": {
"ontapnas_192.168.101.101": [
"NA_01_aggr1",
"NA_01_aggr2"
]
}
}
]
}
这些函数的工作原理是确定 trident
命名空间中 Pod 的名称,然后远程执行相同的方法(来自方法1)连接到 Pod 内运行的 Trident Orchestrator 守护程序,使用 --server
字符串。
使用这些方法的优点是可以使用函数/别名来编码它,使其更加简洁。
注意,使用上述 shell 函数/别名的方法无法与以下命令一起使用:
$ tridentctl create backend -f <backend-file>
因为您将在引用的文件 <backend-file>
中引用本地系统的文件系统,但实际上 tridentctl
命令将在另一个系统上的 Pod 中执行。该 Pod 无法访问您本地系统的文件系统。
在这种情况下,您的选择是将文件复制到 Pod 的 /tmp
文件系统中并从那里执行,或者通过管道(|
)将文件的内容重定向,例如:
$ cat <backend-file> | tridentctl create backend -f -
参考链接:
– NetApp Trident Read the Docs
– Trident for Kubernetes (overview)
– NetApp Trident (Github)