背景
项目刚上云(使用 k8s、Docker 那一套),正式环境已经跑起来了。当然就免不了出错,出错就得找日志、看日志。最开始只是查看问题,在单独的 Pod 中,进去使用 vi 那一套还能勉强查看。直到有一天,领导要求下载最近三天的日志文件。咋也不知道非得下载下来干嘛,领导叫你干就干。
由于 dashboard 页面提供的功能不足,日志文件可以下载,但是只能下载当天的。所以只能找个折中的办法来下载。这时请教集团运维那边的人,说是 s3cmd 可以。得了,学习,搞上吧!
s3cmd
介绍
s3cmd 是一个免费的命令行工具客户端,用于在 Amazon S3 和其他使用 S3 协议的云存储服务提供商上传、下载等功能。
思路
(前提:我们没有主机,只有这些分配好的资源,所以我们不能使用 kubectl 命令啥的,只能单独操作自己的 Pod)
思路:有一个 s3cmd 服务,然后将 Pod 里面的日志文件上传到 COS 云存储中,然后从 COS 下载。
将 s3cmd 打成镜像
vim /root/.s3cfg 配置如下四个参数即可
access_key = xxxx //云存储的 access_key
secret_key = xxxxxxxx //云存储的 secret_key
host_base = 你的云存储ip
host_bucket = %(bucket)s.你的云存储ip
将这些配置文件修改,然后把整个 s3cmd 打成一个 docker 服务。上传到镜像仓库备用。
cke 配置文件
主要的地方:
- nodeName :一定要换成业务服务所在的 node 节点
- volumes.hostPath.path 和业务的路径一致;volumeMounts.mountPath 和业务的路径一致
然后应用下面的配置文件,即可启动一个服务。此时进到服务控制台,比如业务Pod配置: volumes.hostPath.path=/var/log,那么此时进去到 s3cmd 下的 /var/log 就能看见和业务 Pod 一样的内容,即是那些日志文件,然后使用 s3cmd 命令将文件上传到 COS。再从 COS 下载即可
apiVersion: apps/v1
kind: Deployment
metadata:
name: s3cmd
namespace: xxx
labels:
app: s3cmd
spec:
replicas: 1
selector:
matchLabels:
app: s3cmd
template:
metadata:
labels:
app: s3cmd
spec:
# 这里你换成你们 k8s node 节点
nodeName: 192.168.0.1
volumes:
- name: log-volume
hostPath:
path: /xx/xx/xx/xx/
type: ''
containers:
- name: s3cmd
image: xxxxx/s3cmdtool:latest
command: ["/bin/sh"]
args: ["-c", "while true; do echo i am alive!; sleep 30;done"]
volumeMounts:
- name: log-volume
mountPath: xxxxx/xx
简单命令
这里只举例了一个命令行的用法:就是工作中需要的,把业务 Pod 中的文件上传到 COS,当然还有其他很多用法
s3cmd put test.bin s3://cos/file.dump
将 test.bin 上传到 cos 这个桶下,并重命名为 file.dump
总结
- 文章只是提供了一些思路,比如 将 s3cmd 打成 Docker ,然后用配置文件生产 K8s 服务等都需要学习。
- s3cmd 工具的了解和学习,还有其他很多命令等着学习
- 如果不能直接达成目得,可以请教他人,并折中促成
- 还是应该上一个 ELK(Elasticsearch、Logstash、Kibana),因为发布到生成环境是三个节点,目前不支持日志文件挂在到同一个目录下。