nik*_*nik 10 kubernetes kubectl
我尝试编写一个模板,列出我的服务名称以及它们的外部端点+端口.但是,我没有找到任何示例或文档如何从数组中选择元素,在本例中是port
从ports
数组中选择.
我走得那么远:
kubectl get service -o=custom-columns=NAME:.metadata.name,IP:.spec.clusterIP,PORT:.spec.ports
Run Code Online (Sandbox Code Playgroud)
举一个更具体的例子,这是我的运行服务:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka-manager 10.3.242.200 146.148.20.235 9000:32619/TCP 11h
spark-master 10.3.242.209 104.199.21.235 7077:30588/TCP 11h
Run Code Online (Sandbox Code Playgroud)
我希望得到:
NAME EXTERNAL-ENDPOINT
kafka-manager 146.148.20.225:9000
spark-master 104.199.21.225:7077
Run Code Online (Sandbox Code Playgroud)
sur*_*ajd 23
TLDR
对于*
在方括号中使用列表的元素.
所以你的查询应该是这样的:
$ kubectl get service -n kube-system -o=custom-columns=NAME:.metadata.name,IP:.spec.clusterIP,PORT:.spec.ports[*].targetPort
NAME IP PORT
kube-dns 10.0.0.10 53,53
kubernetes-dashboard 10.0.0.250 9090
Run Code Online (Sandbox Code Playgroud)
注意*
在PORT:.spec.ports[*].targetPort
.
细节:
所以kubernetes期待一个json-path-expr
接一个header
.我在玩表达式时遇到的错误如下:
expected <header>:<json-path-expr>
Run Code Online (Sandbox Code Playgroud)
因此迭代列表中的所有元素而不是仅使用索引*
.
可以在这里找到各种其他json路径表达式.
如果您想使用自定义列在地图中搜索,您可以使用
[?(@.Key=="Value"]
Run Code Online (Sandbox Code Playgroud)
如果您想使用它,重要的一点是自定义列中的查询必须是内部[']
字符。
例如,以下查询失败:
kubectl get nodes -o=custom-columns=NAME:.metadata.name,CPU:.status.capacity.cpu,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type=="InternalIP")].address
Run Code Online (Sandbox Code Playgroud)
bash:意外标记“(”附近出现语法错误
但是如果我们使用字符执行相同的查询,[']
它就会起作用:
kubectl get nodes -o=custom-columns='NAME:.metadata.name,ROLE:TOBEDEFINED,CPU:.status.capacity.cpu,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type=="InternalIP")].address'
Run Code Online (Sandbox Code Playgroud)
NAME CPU MEM IP
name-node 8 8 10.10.10.10
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以用于*
理解 JSON 中的数据。例如:
kubectl get svc gdpr -o custom-columns='svc:*'
Run Code Online (Sandbox Code Playgroud)
对于我来说,该get
命令是完美的(由于外部 IP 信息)并且看起来像:
kubectl get svc -o custom-columns='SVC:.metadata.name,IP:.metadata.annotations.domainName,PORT:.spec.ports[*].targetPort'
#=>
SVC IP PORT
event site1.com 9000
gdpr site2.com 3333,8080
svcInt none 80
ui site6.com 80,6123,6124,6125,8081
Run Code Online (Sandbox Code Playgroud)
PS关于列出外部IP和主机:
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name} {.status.addresses[?(@.type=="ExternalIP")].address}{"\n"}'
#=>
ip-10-10-40-13.xxxxx.internal xx.xx.xx.175
ip-10-10-40-15.xxxxx.internal xx.xx.xx.236
ip-10-10-40-18.xxxxx.internal xx.xx.xx.207
Run Code Online (Sandbox Code Playgroud)
kubectl get nodes -o jsonpath='{range .items[*]}{.status.addresses[?(@.type=="ExternalIP")].address}{"\n"}'
#=>
xx.xx.xx.175
xx.xx.xx.236
xx.xx.xx.207
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7412 次 |
最近记录: |