概述
日志是我们在运维部署当中非常重要的一个东西,对于我个人工作经验而言,一般出现问题,第一步事情就是查看日志,其次是服务器资源查看这样去定位问题,那么在kubernets集群当中呢,我主要给其分了两种类型:
- kubernetes组件日志
- 运行于kubernetes上的容器应用日志
kubernetes组件日志
我们知道在kubernetes集群是有多个组件组成,协同为我们提供一个运行容器的环境。当运行当中出现问题,也是需要查看对应组件的日志,进行问题排查、处理。那么常见的日志如下:
1 2 3 4 5
| /var/log/kube-apiserver.log /var/log/kube-proxy.log /var/log/kube-controller-manager.log /var/log/kube-scheduler.log /var/log/kubelet.log
|
当然根据搭建集群的方式不同,我们配置的日志目录也不尽相同,所以只是列举一下;
如果组件的安装方式由systemd来管理的话 我们还可以通过以下命令进行排错
1 2 3
| journalctl -u kubelet 或 systemctl status kubelet -l
|
如果使用的是kuernetes插件式方式部署的组件则使用以下命令
运行于kubernetes上的容器应用日志
运行于kubernetes上的,比如一个nginx容器;我们如何查看这个应用的日志呢?
从容器标准输出截获
用法类似于docker
1
| kubectl logs -f {POD_NAME} -c {Container_NAME}
|
进入容器进行查看
1 2
| kubectl exec -it {POD_NAME} -c {Container_NAME} /bin/sh docker exec -it {Container_NAME} /bin/sh
|
将日志文件挂载到主机目录
比如我要把nginx的日志挂载到运行于该POD的宿主机的某个目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| # 编写yaml文件 # 这里我们知道手写一个yaml是很烦的,而且那么多关键词不是那么容易记住, # 那么此时就需要在现有环境中找一个pod然后把他的yaml导出再做修改 # 如果环境中还是没有pod,那就直接run一个
$ kubectl get pod nginx-67ccc95d8c-fd5nk -o yaml --export > nginx.yaml
# 删除一些不必要的字段 $ vim nginx.yaml
apiVersion: v1 kind: Pod metadata: name: nginx labels: run: nginx spec: containers: - image: nginx:latest imagePullPolicy: IfNotPresent name: nginx volumeMounts: - mountPath: /var/log/nginx # nginx应用默认日志目录 name: nginx-log-volume volumes: - name: nginx-log-volume hostPath: path: /var/k8s/log # 宿主机目录 $ kubectl create -f nginx.yaml pod "nginx" created
# 查看宿主机,这样容器的日志目录我就挂到了宿主 # 而不用在进入容器中查看了 $ ll /var/k8s/log/ total 0 -rw-r----- 1 root root 0 Dec 18 15:17 access.log -rw-r----- 1 root root 0 Dec 18 15:17 error.log
|
注意点: 写yaml的时候一定要养成导出现有资源类型的yaml的习惯再去修改;这样能避免手动编写时格式的一些问题,如果关键字记不住那就一定要用kubectl explain
获取资源文档