我有以下docker
命令:
docker service inspect --format {{.Spec.TaskTemplate.ContainerSpec.Env}} my_service_name")?
k8s
是否存在类似的模板命令?
在kubernetes中,有多种类似于docker群服务的对象类型:部署、复制集和状态集。
kubernetes中的每个对象都可以通过kubectl访问。例如,如果我有一个名为my_deployment_name的部署,我可以执行kubectl get deployment/my_deployment_name
并获取有关该部署的信息。我也可以更改输出格式,包括类似于您在swarm上使用的go模板类型格式。
这些kubernetes对象和swarm之间的主要区别在于,它没有指定一个依次创建一个容器的swarm任务模板,而是指定了一个pod模板,该模板可以包括多个容器。这意味着您需要处理容器列表,并查看每个容器中的env。下面是一个示例,展示了如何查看给定部署中的所有容器环境值:
kubectl get deployment/my_deployment_name -o go-template='{{range .spec.template.spec.containers}}{{.env}}{{end}}'
处理kubernetes对象的另一种方法是获取原始json或yaml,然后使用其他工具来解析它们。下面是一个json+jq示例,如果存在env
,则返回值;如果不存在,则返回false
:
kubectl get deployment/my_deployment_name -o json | jq '.spec.template.spec.containers[] | .env // false'
和另一个例子,但使用yaml+yq:
kubectl get deployment/my_deployment_name -o yaml | yq eval '.spec.template.spec.containers[].env' -
您将需要对这些命令进行更多的解析;Kubernetes在这个api中没有返回一个简单的变量列表——可能有些变量有一个引用另一个Kubernete对象的valueFrom
(例如secret(。
对于replicasets和statefulsets,有非常相似的命令。查看kubernetes对象布局的最简单方法是运行kubectl get -o yaml <resourcetype>/<resourcename>
,然后可以从中构建模板。
kubectl get
的完整文档可在此处找到:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get