如何通过其部分名称访问kubernetes pod?

时间:2020-04-07 16:22:50

标签: kubernetes kubectl

我经常运行以下任务:

  • 读取服务日志X
  • 在服务Y内安装外壳程序

我在历史记录中经常使用以下内容:

kubectl logs `kubectl get pods --no-headers -o custom-columns=":metadata.name" | grep <partial_name>`

kubectl exec -it `kubectl get pods --no-headers -o custom-columns=":metadata.name" | grep <partial_name>` bash

您知道kubectl是否已经为此准备好了吗?还是应该创建自己的别名集?

3 个答案:

答案 0 :(得分:1)

Kubernetes实例通过标签(键值对)松散耦合。因此,Kubernetes提供了各种功能,可以帮助您基于标签对对象集进行操作。

如果您有几个具有相同服务的Pod,则很有可能由某些ReplicaSet使用某些特定标签来管理它们。如果运行,您应该看到它:

kubectl get pods --show-labels

现在,例如,用于汇总日志,您可以使用标签选择器,例如:

kubectl logs -l key=value

有关更多信息,请参见:https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/

答案 1 :(得分:0)

您可以启用外壳自动补全功能。 Kubectl提供了对Bash和Zsh的支持,这将节省您很多键入操作(您将使用TAB来获得建议/完成)。

Kuberentes文档提供了大量有关如何在Optional kubectl configurations下启用自动补全的信息。它涵盖了Linux上的Bash,MacOS和Zsh上的Bash。

答案 2 :(得分:0)

添加到我的.zshconfig

sshpod () {
  kubectl exec --stdin --tty `kubectl get pods --no-headers -o custom-columns=":metadata.name" | grep ${1} | head -n 1` -- /bin/bash
}

使用

sshpod podname

这个

  1. 查找所有 Pod
  2. greps 需要的名称
  3. 选择第一个
  4. sshs 进入 pod