Kubeedge Container Log 1
Contents
总体架构图
源码分析准工作:
kubernetes 1.18.8
kubeedge 1.8.1
具体流程分析:
当我们执行查看日志操作(`kubectl logs -f pre-fengniao-daemonset-infra-vtrl6 -n pmpp distro --tail 1 -v=8`),执行了那些步骤?
0、边缘node上线:
当node上线时,node会收集并上报node的信息: node监听端口源码:
|
|
node IP地址源码: node 启动时,会从配置文件中读取本node的IP地址
|
|
1、客户端发起动作:
客户端可以时kubectl log…, 也可以是通过client-go客户端
但是最后都是调用如下api:
/containerLogs/{podNamespace}/{podID}/{containerName}
2、k8s-apiserver
当请求发送到apiserver,根据请求中的参数,查询即将要连接的pod的信息,最主要的就是ip和port。 代码流程:
|
|
代码中node.Status.DaemonEndpoints.KubeletEndpoint.Port
可以通过查看kubectl 查看:
|
|
3、请求日志数据
至此,请求指定node的日志的ip和port已经拿到,发送请求到 xxx.xxx.xxx.xx:10350的node。
这个逻辑在k8s中是没有问题的,因为master节点和所有的node在同一个网络平面。
但是边缘node和master在不同的内网。所以需要通过iptables nats转发,之前需要显式的通过命令配置:
iptables -t nat -A OUTPUT -p tcp --dport 10350 -j DNAT --to cloudcore-ip:10003
即,将apiserver请求的10350的数据转发到cloudcore机器的10003端口。kubeedge1.8以后,这部分工作已经集成在cloudcore代码里了:
|
|
同时cloudcore的10004和边缘node通过websocket建立连接。所以请求到达cloudcore,cloudcore在经过处理,最终将请求发送到边缘node。