如何使用jsonpath在Windows Powershell的每一行上获得一个k8s群集节点名称?

时间:2020-09-18 19:39:21

标签: windows powershell kubectl

因此,ConvertFrom-Json毫无疑问:

C:\> (kubectl.exe get nodes -o json | ConvertFrom-Json).items.metadata.name
aks-nodepool1-30294001-vmss000000
aks-nodepool1-30294001-vmss000001
aks-nodepool1-30294001-vmss000003
aks-nodepool2-30294001-vmss000000
aks-nodepool2-30294001-vmss000001
aks-nodepool2-30294001-vmss000002
C:\>

也有name输出格式,但是它在节点名前加上了node/

C:\> kubectl.exe get nodes -o name
node/aks-nodepool1-30294001-vmss000000
node/aks-nodepool1-30294001-vmss000001
node/aks-nodepool1-30294001-vmss000003
node/aks-nodepool2-30294001-vmss000000
node/aks-nodepool2-30294001-vmss000001
node/aks-nodepool2-30294001-vmss000002
C:\>

那很接近,但仍然不是。也许有一种方法可以指示kubectl不要在资源类型前面加上名称?仍然可以轻松删除前缀:

C:\> (kubectl.exe get nodes -o name) -replace '^node/',''
aks-nodepool1-30294001-vmss000000
aks-nodepool1-30294001-vmss000001
aks-nodepool1-30294001-vmss000003
aks-nodepool2-30294001-vmss000000
aks-nodepool2-30294001-vmss000001
aks-nodepool2-30294001-vmss000002
C:\>

但是,这个问题与jsonpath有关。现在这就是我得到的:

C:\> kubectl.exe get nodes -l agentpool=nodepool2 -o jsonpath='{.items[*].metadata.name}'
aks-nodepool2-30294001-vmss000000 aks-nodepool2-30294001-vmss000001 aks-nodepool2-30294001-vmss000002
C:\>

我每行需要一个。当然,我可以按空格分开:

C:\> (kubectl.exe get nodes -l agentpool=nodepool2 -o jsonpath='{.items[*].metadata.name}') -split '\s+'
aks-nodepool2-30294001-vmss000000
aks-nodepool2-30294001-vmss000001
aks-nodepool2-30294001-vmss000002
C:\>

但是我想知道,如果没有任何外部工具使用一些kubectl标志或jsonpath功能,是否可以实现这一目标。

1 个答案:

答案 0 :(得分:1)

即使没有jsonpath

,这也应该对您有用
kubectl.exe get nodes -l agentpool=nodepool2 -o custom-columns=NAME:.metadata.name --no-headers

我没有标签的示例

$ kubectl get nodes -o custom-columns=NAME:.metadata.name --no-headers
gke-cluster-1-default-pool-82008fd9-8x81
gke-cluster-1-default-pool-82008fd9-qkp7
gke-cluster-1-default-pool-82008fd9-tlc7


$ kubectl get nodes -o jsonpath='{.items[*].metadata.name}'
gke-cluster-1-default-pool-82008fd9-8x81 gke-cluster-1-default-pool-82008fd9-qkp7 gke-cluster-1-default-pool-82008fd9-tlc7

EDIT1: 正如评论中所讨论的,这次使用jsonpath

发布了一个答案
kubectl get nodes -l agentpool=nodepool2 -o "jsonpath={range $.items[*].metadata.name}{}{'\n'}{end}"