docker - 使用 Kubernetes 上的卷的挂载路径出现问题

标签 docker nginx kubernetes persistent-volumes persistent-volume-claims

我有一个 3 节点集群(1 个主节点和 2 个工作节点) 我有一个部署,在工作节点之一上以 pod 镜像作为 nginx 运行。以下是其 list 定义:-

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: nginx
    spec:
      volumes:
      - name: logs
        emptyDir: {}
      containers:
      - image: nginx
        name: nginx
        resources: {}
        volumeMounts:
          - name: logs
            mountPath: /var/log/nginx

如果我跟踪 nginx 日志,我可以看到日志在/var/log/nginx 位置生成:-

vagrant@mykubemaster:~/my-k8s/sidecar$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-5bb7d5c6dd-hjxnr   1/1     Running   0          8m8s
vagrant@mykubemaster:~/my-k8s/sidecar$ kubectl exec nginx-5bb7d5c6dd-hjxnr -- tail -f /var/log/nginx/access.log
10.32.0.1 - - [06/Jan/2021:02:43:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
10.32.0.1 - - [06/Jan/2021:02:43:56 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
10.32.0.1 - - [06/Jan/2021:02:46:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
10.32.0.1 - - [06/Jan/2021:02:46:17 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
10.32.0.1 - - [06/Jan/2021:02:48:29 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"

但是,问题是,如果我通过 ssh 进入工作节点(两个节点)甚至主节点,我看不到在/var/log 下创建的任何 nginx 文件夹,然后该文件( access.log)正在被存储,我可以使用 -f 和 --tail 命令很好地流式传输?

我的理解是,当我们进行卷挂载时,Pod 会使用配置 Pod 的 VM 存储位置。如果在 Node02 上,则位于 Node02 list 中指定的某个位置。

如果您能帮助我理解这一点并找到文件路径,我将不胜感激。

最佳答案

您将日志存储在 emptyDir volume 中。这并不是为了持久化,也不是为了从 pod 外部访问;它在主机系统上没有固定的位置,一旦删除 Pod,其中的内容就会丢失。

image: nginx 的特定情况下,Docker Hub nginx 镜像默认配置为将其访问日志写入容器的 stdout。如果您删除 volumes:volumeMounts:,那么 kubectl logs deployment/nginx 将向您显示访问日志。然后,集群管理员可以部署日志收集器将这些日志转发到其他地方;参见例如 Using a node logging agent在 Kubernetes 文档中。

同样的建议也适用于大多数其他进程:将日志记录设置为转到进程的标准输出而不是文件,Kubernetes 将收集它,如果需要查看,您可以部署转发器将日志发送到其他地方稍后再讲。

关于docker - 使用 Kubernetes 上的卷的挂载路径出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65589644/

相关文章:

docker - SageMaker 部署错误 "serve"在 $PATH 中找不到可执行文件

r - nginx反向代理的Docker容器内的 Shiny 服务器不会遵循301重定向

Django 1.3 URL重写

docker - 为什么开源无服务器框架(如 OpenWhisk)需要编排器(如 Kubernetes)

python - 在Elastic Beanstalk上使用Docker部署Flask应用程序:资源创建取消错误

java - 将自签名证书导入 Docker 的 JRE cacert 服务无法识别

nginx - 1.14 以上的 Nginx 版本是否已弃用乘客?

kubernetes - 如何使用Kubernetes端点对象?

linux - 在 Linux 容器上的 dotnet Core 中实现消息消费者

nginx - Docker中的NGINX服务失败,限制了内存和CPU使用率