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

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

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

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

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

1.进入容器exec

scss 复制代码
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

shell 复制代码
#和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,然后查看这个容器的日志)。

r 复制代码
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发起连接。

bash 复制代码
[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 

根据端口查看连接客户端

bash 复制代码
[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命令的使用。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
hyf3266336 小时前
泛程序:从零开始搭建稳定程序项目框架
运维·服务器·爬虫·百度·seo
哎呦喂我去去去6 小时前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#
为自己_带盐6 小时前
安敢越雷池一步?浅尝雷池WAF社区版
运维·web安全
NiceCloud喜云7 小时前
海外云服务器怎么选?适用场景、价格和避坑经验总结
运维·服务器
easy_coder7 小时前
Linux LVM 知识文档
linux·运维
小小的木头人8 小时前
Ubuntu 使用 udev + systemd + UUID 实现 USB 硬盘自动挂载
linux·运维·ubuntu
布鲁飞丝9 小时前
彩笔运维勇闯机器学习--cpu与qps的线性关系
运维·人工智能·机器学习
kaoa0009 小时前
Linux入门攻坚——84、网络虚拟化技术-1
linux·运维·服务器
RisunJan9 小时前
Linux命令-shutdown(安全关闭或重启系统)
linux·服务器·安全
2601_9657984710 小时前
MTDb Movie & TV Database Script Setup, Caching, and SEO Guide
linux·服务器·数据库·php