我们了解到 k8s 主要分为两种部署方式,一种是 kubeadm
,另外一种是二进制,而 kubeadm
方式部署的 k8s 集群,除了 kubelet
之是使用 systemd
之外,其他组件都是以 容器化
的方式部署的,而二进制部署的集群,都是用 systemd
方式管理组件服务的,因此这两种部署方法查看日志的方式也不一样。
一、使用 systemd 管理(适用于 kubeadm)
指定 kubelet
日志:
journalctl -u kubelet
提示:日志过多建议重定向到文件中方便查看。
而 journal
这个命令实际查看的日志来源于:/va/log/messages
补充:主配置文件地址:
/var/lib/kubelet/config.yaml
注意:二进制部署方式一般会指定日志的路径,故上述方法不适用二进制部署方式
二、使用容器管理(输出控制台)
kubectl logs <pod名称> -n <命名空间>
可搭配
--tail
和-f
使用
该日志被 docker 容器接管,实际目录为:/var/lib/docker/containers/<container-id>/<container-id>-json.log
查看方式:查询该 pod 所在的节点-》查询对应的 docker 容器 id-》进入对应目录查看
三、查看容器标准输出日志(日志在本地文件中)
查看日志方式:进入 pod 中-》查看对应目录下的日志
改进办法:将日志文件持续化到宿主机上
扩展:
docker 中涉及的两个卷volume
和bind mount
,其中volume
是卷目录由 docker 管理,bind mount
是挂载宿主机上文件或者目录到容器中,而 k8s 与 docker 相对应的,也有两种卷,分别为emptydir
和hostpath
,emptydir
由 k8s 管理,文件存放在 k8s 自己设定的目录中,hostpath
可以由用户控制,可以放到宿主机上任意目录中。
1.hostPath
示例:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: web
image: lizhenliang/nginx-php
volumeMounts:
- name: logs
mountPath: /usr/local/nginx/logs
volumes:
- name: logs
hostPath:
path: /tmp/logs
type: Directory
apply 之前先在每个节点上创建
、tmp/logs
目录,否则 pod 会创建失败
参数解释:
volumes
:设置数据卷来源type
:挂载的类型,文件还是目录path
:挂载的文件或者目录的路径volumeMounts.name
与volumes.name
:卷名称需要对应mountPath
:容器中目录挂载的路径
pod 创建成功后,会在对应节点的 /tmp/logs
下发现有两个 nginx 的日志文件
curl 10.244.36.92 后会在 access.log 下实时刷出日志:
将日志文件挂载到宿主机目录,这样一来,就可以进容器查看或者在宿主机查看日志了。
2.emptyDir
示例:
apiVersion: v1
kind: Pod
metadata:
name: my-pod2
spec:
containers:
- name: web
image: lizhenliang/nginx-php
volumeMounts:
- name: logs
mountPath: /usr/local/nginx/logs
volumes:
- name: logs
emptyDir: {}
emptyDir 日志目录查看方法:
- 1.在分配的节点上使用 docker ps 命令查找 my-pod2 分配的 pod-id
- 2.进入目录
/var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~empty-dir/
:
curl 同样达到上述效果。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于