kubernetes通过kubectl无法查看日志问题处理过程

问题现象

输入:

kubectl logs --tail 200 -f -n xxx pod-name-xxxx.
复制代码

返回结果:

error: You must be logged in to the server (the server has asked for the client to provide credentials (get nodes))
复制代码

已知信息

  1. kubernetes版本:1.17.2
  2. 证书前不久已更新

排查过程

看到这个报错,很直观的信息,锁定在证书问题上。 我立即执行了kubectl get nodes 。能够返回节点信息。问题到这里,那我们基本锁定了应用是kube-apiserver与kubelet交互过程中出现了证书问题。 难道是证书过期?这个应该不太可能,前不久我才更新了master的证书!秉承严谨的态度,我还是登陆到master节点,输入命令

kubeadm alpha certs check-expiration
ls /etc/kubernetes
复制代码

image.png

image.png 没有问题,证书没有过期,kubelet的证书也自动轮转过。 为了确认证书没问题,我使用curl配合证书直接调用kubelet的接口。

curl -k --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt --key /etc/kubernetes/pki/apiserver-kubelet-client.key https://xxx.xxx.xx.xx:10250/metrics
复制代码

没有问题,能够正常返回监控度量数据。 既然证书本身没有问题,那大概就是apiserver使用上的问题了。再次抱着严谨的态度,输入命令:

ps -ef|grep kube-apiserver
ps -ef|grep kubelet
复制代码

image.png

image.png 没有问题,kube-apiserver和kubelet配置的证书路径都是正确的。 那这就很神奇了,既然配置目前看都没有问题,那我开始怀疑是不是kube-apiserver证书没生效? 索性使用重启大法。

## 选择一个kube-apiserver的pod
kubectl delete pod -n kube-system kube-apiserver-xxxxx
复制代
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: kubectl logs命令可以用来查看Kubernetes集群中容器的实时日志。可以使用以下命令来查看实时日志: ``` kubectl logs -f <pod-name> <container-name> ``` 其中,`<pod-name>`是要查看日志的Pod的名称,`<container-name>`是要查看日志的容器的名称。使用`-f`选项可以实时跟踪日志输出。 ### 回答2: Kubectl logs是Kubernetes命令行工具中一个非常有用的命令,它可以帮助开发者查看正在运行的Pod的实时日志。当Pod在运行时,经常需要查看日志来监测应用程序的运行状态,跟踪错误和排除故障。 使用kubectl logs查看实时日志非常简单,只需要在命令行中输入kubectl logs pod-name命令即可。该命令将返回指定Pod的所有容器的日志输出。如果Pod中有多个容器,则需要在命令中指定容器的名称。例如,kubectl logs pod-name container-name。 Kubectl logs命令还有其他一些常用的选项: –follow或-f:该选项将会跟随日志输出并不断地更新控制台,直到通过CTRL+C停止命令。 –timestamps或-t:该选项将显示每条日志记录的时间戳。 –tail:该选项将返回日志记录的最后几行(默认值为10)。 以上是kubectl logs查看实时日志的一些常用选项。此外,还可以使用输出到文件和搜索日志等高级选项。 总之,kubectl logs命令是一个强大的工具,可帮助开发者查看正在运行的Pod的实时日志,便于快速查看程序运行状态和解决问题。当出现问题时,使用kubectl logs命令是一种快速和有效的调试方法。 ### 回答3: Kubectl logs是Kubernetes命令行工具(kubectl)提供的一个用于查看运行中容器实时日志的命令。该命令能够帮助开发者和运维人员快速定位和解决出现在应用程序中的问题Kubectl logs命令可以帮助用户查看单个容器的实时日志,并且可以按照时间戳显示和筛选输出的日志内容。此外,用户还可以选择要查看日志的不同级别,例如:错误、警告和调试信息。命令的具体用法可查阅官方文档。 在使用Kubectl logs命令时,需要知道想要查看日志的容器名称和所在的命名空间。在命令行中输入kubectl logs <pod-name> [<container-name>] -n <namespace> ,<pod-name>是pod的名称,<container-name>是容器的名称(如果只有一个容器,则可以省略该选项),<namespace>是所在的命名空间。 需要注意的是,Kubectl logs命令只能查看正在运行的容器的实时日志,如果容器已停止或不可访问,则无法查看日志。此外,在生产环境中,要谨慎使用Kubectl logs命令,因为它可能会暴露敏感信息,例如应用程序的内部状态、数据库凭据等。为了确保安全,可以使用Kubernetes的内置日志记录系统或第三方日志记录工具来收集和分析容器日志。 总之,Kubectl logs命令是Kubernetes命令行工具中非常有用和重要的一个命令,开发者和运维人员可以借助该命令快速定位和解决应用程序的问题,在保证安全性的前提下,为应用程序的维护和优化提供重要的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值