前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Kubernetes(k8s)-日志(logs)和exec内部逻辑

Kubernetes(k8s)-日志(logs)和exec内部逻辑

作者头像
运维小路
发布2025-02-19 23:21:22
发布2025-02-19 23:21:22
12200
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

前面介绍Kubernetes的时候,经常使Kubectl命令,都是直接操作的kube-apiserver,但是今天这2个命令实际操作对象的是Pod,而Pod分布在不同的Node节点,所以需要搞清楚他们的原理,方便更好运维Kubernetes集群。

在我们日常运维当中,经常需要看容器日志或者进入容器,Docker里面我们使用的参数是logs和exec。Kubernetes里面使用Kubectl命令也有2个同样的参数,但是他们内部逻辑是什么呢?如果有什么问题应该怎么排查呢?所以我们需要对它有一定的理解才可以。

1.进入容器exec

代码语言:javascript
代码运行次数:0
复制
kubectl exec -it xxx -n xxxx  sh(或者bash)

xxx 代表是Pod名字。

-n xxxx 代表是命名空间,如果是默认命名空间(default)可以省略。

sh或者bash则需要看容器里面有什么。根据经验大部分容器都有bash和sh;极少部分只有sh;还有特殊容器bash和sh都没有,也就无法通过该方式进入。

进入以后就和使用Docker exec进入容器是一样的效果。可以看到容器里面的文件和ip等信息。

2.查看日志logs

代码语言:javascript
代码运行次数:0
复制
#和linux命令tail效果基本是一样的
#从头显示到结尾
kubectl   logs xxx -n xxxx
#持续显示
kubectl   logs -f xxx -n xxxx 

xxx 代表是Pod名字。

-n xxxx 代表是命名空间,如果是默认命名空间(default)可以省略。

还需要特别注意一点,无论是log还是exec的参数,如果是针对单容器的Pod是没问题的,如果是多容器的Pod则需要添加另外一个参数 -c xxxx,指的就是容器或者说containerd的名字。-p参数的含义是如果上一个容器因为故障崩溃了,然后重启启动了一个新的容器,使用-p参数可以看到上一个崩溃容器的日志(等效于在Docker里面先找到退出容器的ID,然后查看这个容器的日志)。

代码语言:javascript
代码运行次数:0
复制
kubectl   logs xxx -n xxxx -c xxxxx
#查看退出pod的日志
kubectl   logs -f xxx -n xxxx -p
kubectl exec -it xxx -n xxxx -c xxxxx  sh(或者bash)

我们在部署集群的时候,有个操作是把 /etc/kubernetes/admin.conf文件复制到/root/.kube/config的操作,实际上这个文件就是kubectl文件的配置文件,这个配置文件决定了kubectl去连接谁。从这个配置文件上可以看到我们kubectl的所有操作都是连接到kube-apiserver的,那它是怎么连接到不同节点的的容器呢?

Node节点的kubelet显示从kube-apiserver有连接过来,正常是kubelet主动向kube-apiserver汇报自己的状态,只有当使用logs和exec的时候kube-apiserver才会主动向kubelet发起连接。

代码语言:javascript
代码运行次数:0
复制
[root@node01 ~]# netstat -lnpa |grep 10250
tcp6       0      0 :::10250                :::*                    LISTEN      26156/kubelet       
tcp6       0      0 192.168.31.212:10250    192.168.31.211:55594    ESTABLISHED 26156/kubelet 

根据端口查看连接客户端

代码语言:javascript
代码运行次数:0
复制
[root@master01 ~]# netstat -lnpa |grep 55594
tcp        0      0 192.168.31.211:55594    192.168.31.212:10250    ESTABLISHED 10900/kube-apiserve 

如果终止logs和exec命令,则这个网络连接就会消失,所以这两个功能可能出现问题的地方就是:kube-apiserver连接kubelet的10250端口或者kubelet连接容器运行时。尤其是kube-apiserver连接kubelet的10250端口,因为这个连接都是通过网络连接,网络连接异常就会出现问题,这个问题在生产环境也遇到过。

这里有个疑惑的点,我也一直没太研究明白。kubelet的监听的10250是属于https端口,使用的证书是文件:/var/lib/kubelet/pki/kubelet.crt和kubelet.key,这个证书默认是1年有效期。但是在我以前运维的环境中,多次发现这个证书过期,但是也并没有影响logs和exec命令的使用。

历史推荐内容Docker-docker基本信息,基本命令,dockerfile,原理,仓库,存储网络日志,番外篇云计算&虚拟化-包括服务器购买,虚拟化介绍,虚拟磁盘,虚拟网络,创建虚拟机,安装虚拟机,dashboard,xml解释,克隆,快照,初始化,esxi介绍。Linux进阶-包括硬件,日常运维,基础软件,日志,进阶命令,防火墙,shell编程,内核,linux系统及初始化Linux基础-包括文件的增删改查,磁盘管理,网络配置,用户配置,权限配置

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档