如何在 Kubernetes 中格式化输出?
How to format the output in Kubernetes?
我想获取命令的特定输出,例如获取服务的节点端口和负载均衡器。我该怎么做?
关于究竟想从 Kubernetes 中检索什么的问题非常缺乏,但我认为我可以提供一个很好的基线。
当您使用 Kubernetes 时,您很可能正在使用 kubectl
与 kubeapi-server
交互。
可用于从集群检索信息的一些命令:
$ kubectl get RESOURCE --namespace NAMESPACE RESOURCE_NAME
$ kubectl describe RESOURCE --namespace NAMESPACE RESOURCE_NAME
示例:
假设您有一个类型为 LoadBalancer
的 Service
(我编辑了一些输出以提高可读性):
$ kubectl get service nginx -o yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
clusterIP: 10.2.151.123
externalTrafficPolicy: Cluster
ports:
- nodePort: 30531
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: A.B.C.D
从该输出中获取 nodePort
可以像这样完成:
kubectl get svc nginx -o jsonpath='{.spec.ports[].nodePort}'
30531
从该输出中获取 loadBalancer IP
可以像这样完成:
kubectl get svc nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
A.B.C.D
您还可以将 kubectl
与 custom-columns
一起使用:
kubectl get service -o=custom-columns=NAME:metadata.name,IP:.spec.clusterIP
NAME IP
kubernetes 10.2.0.1
nginx 10.2.151.123
有很多方法可以使用 kubectl
检索数据,您可以通过以下方式阅读更多信息:
kubectl get --help
:
-o, --output='': Output format. One of:
json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...
See custom columns, golang template and jsonpath template.
其他资源:
- Kubernetes.io: Docs: Reference: Kubectl: Overview
- Github.com: Kubernetes client: Python - 如果您想使用 Python
检索此信息
如果您只想提取单个值,也许作为脚本的一部分,那么您要搜索的是 -ojsonpath
,例如这个例子:
kubectl get svc service-name -ojsonpath='{.spec.ports[0].port}'
这将提取服务中列出的第一个端口的值 specs。
文档 - https://kubernetes.io/docs/reference/kubectl/jsonpath/
如果你想提取一个对象的完整定义,比如一个服务,那么你要搜索的是-oyaml
例如这个例子:
kubectl get svc service-name -oyaml
这将以 yaml 格式输出整个服务定义。
如果您想获得对资源(例如服务)的更用户友好的描述,那么您正在搜索描述命令,例如这个例子:
kubectl describe svc service-name
文档 - https://kubernetes.io/docs/reference/kubectl/overview/#output-options
我想获取命令的特定输出,例如获取服务的节点端口和负载均衡器。我该怎么做?
关于究竟想从 Kubernetes 中检索什么的问题非常缺乏,但我认为我可以提供一个很好的基线。
当您使用 Kubernetes 时,您很可能正在使用 kubectl
与 kubeapi-server
交互。
可用于从集群检索信息的一些命令:
$ kubectl get RESOURCE --namespace NAMESPACE RESOURCE_NAME
$ kubectl describe RESOURCE --namespace NAMESPACE RESOURCE_NAME
示例:
假设您有一个类型为 LoadBalancer
的 Service
(我编辑了一些输出以提高可读性):
$ kubectl get service nginx -o yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
clusterIP: 10.2.151.123
externalTrafficPolicy: Cluster
ports:
- nodePort: 30531
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: A.B.C.D
从该输出中获取 nodePort
可以像这样完成:
kubectl get svc nginx -o jsonpath='{.spec.ports[].nodePort}'
30531
从该输出中获取 loadBalancer IP
可以像这样完成:
kubectl get svc nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
A.B.C.D
您还可以将 kubectl
与 custom-columns
一起使用:
kubectl get service -o=custom-columns=NAME:metadata.name,IP:.spec.clusterIP
NAME IP
kubernetes 10.2.0.1
nginx 10.2.151.123
有很多方法可以使用 kubectl
检索数据,您可以通过以下方式阅读更多信息:
kubectl get --help
:
-o, --output='': Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns, golang template and jsonpath template.
其他资源:
- Kubernetes.io: Docs: Reference: Kubectl: Overview
- Github.com: Kubernetes client: Python - 如果您想使用 Python 检索此信息
如果您只想提取单个值,也许作为脚本的一部分,那么您要搜索的是 -ojsonpath
,例如这个例子:
kubectl get svc service-name -ojsonpath='{.spec.ports[0].port}'
这将提取服务中列出的第一个端口的值 specs。
文档 - https://kubernetes.io/docs/reference/kubectl/jsonpath/
如果你想提取一个对象的完整定义,比如一个服务,那么你要搜索的是-oyaml
例如这个例子:
kubectl get svc service-name -oyaml
这将以 yaml 格式输出整个服务定义。
如果您想获得对资源(例如服务)的更用户友好的描述,那么您正在搜索描述命令,例如这个例子:
kubectl describe svc service-name
文档 - https://kubernetes.io/docs/reference/kubectl/overview/#output-options