我经常运行以下任务:
- 读取服务
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
是否已经为此做好了准备吗?还是应该创建自己的别名集?
Kubernetes实例通过标签(键值对(松散耦合。正因为如此,Kubernetes提供了各种功能,可以帮助您对基于标签的对象集进行操作。
如果你有几个相同服务的pod,很有可能它们是由某个ReplicaSet使用某个特定标签管理的。如果你运行,你应该看到它
kubectl get pods --show-labels
现在,例如,对于聚合日志,您可以使用标签选择器,如:
kubectl logs -l key=value
有关更多信息,请参阅:https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/。
添加到我的.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
这个
- 查找所有pod
- greps需要名称
- 选择第一个
- ssh进入吊舱
您可以通过部署/服务等访问pod:
kubectl exec -it svc/foo -- bash
kubectl exec -it deployment/bar -- bash
Kubernetes会选择一个符合标准的pod并将您发送到它。
您可以启用shell自动完成。Kuectl为Bash和Zsh提供了这种支持,这将节省您大量的输入(您将使用TAB来获得建议/完成(。
Kuberentes文档提供了一组关于如何在可选kubectl配置下启用自动完成的信息。它涵盖了Linux上的Bash、MacOS上的Bassh和Zsh。