Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kubernetes中的Sidecar容器日志文件路径问题

Kubernetes中的Sidecar容器日志文件路径问题
EN

Stack Overflow用户
提问于 2021-01-05 23:31:35
回答 2查看 1.1K关注 0票数 0

我在Kubernetes集群中的同一个Pod中运行了两个容器的部署。一个是NGINX,另一个是侧面(bash图像)。以下是定义文件:

代码语言:javascript
运行
AI代码解释
复制
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
      - image: bash
        name: sidecar
        command: ["/bin/sh","-c","tail -f /var/log/sidecar/access.log"]
        volumeMounts:
        - name: logs
          mountPath: /var/log/sidecar

我理解Docker映像(NGINX)生成到位置/var/log/nginx/access.log (ref-> https://docs.docker.com/config/containers/logging/)的标准日志。

我使用的是emptyDir卷,这意味着所有容器都将在主机上的吊舱中共享相同的存储位置。

当我在服务或Nginx上做curl时,我从NGINX服务器获得成功的响应,它的日志可以使用控制台上的kubectl logs <pod name> sidecar -f命令看到。

我不完全理解的是,命令( bash/sidecar容器中)中的文件路径是/var/log/sidecar/access.log,而不是/var/log/nginx/ able .log,那么为什么我能够获得这些日志,因为目录/var/log/sidecar中不存在文件access.log。

请告诉我,谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-06 01:45:46

在进入您的问题之前,您需要了解Kubernetes Pod的工作原理。

在Kubernetes中,同一个Pod中的所有容器都调度在同一个节点上。在节点内部,它们与容器运行时一起编排。

为了简化对接运行时,Kubernetes将根据您的配置生成两个容器。一个是NGINX,另一个是bash。在容器编排中,您可以定义一个卷并在不同的容器运行时之间共享它们。但是在场景后面,他们使用的是来自主机的相同的文件夹/文件。

因此,回到您的问题,Kubernetes在您的主机中创建了两个容器。它还创建了一个码头体积,用于在这两个集装箱之间共享。在容器内部,卷被安装到不同的路径中,但仍然共享来自工作机器的相同的真理源。

如果您想知道它在工作机器上的运行情况,可以将ssh输入到worker中,然后运行以下命令。

代码语言:javascript
运行
AI代码解释
复制
# Get your container ID
> docker ps
# Inspect your container
> docker inspect <container>

并尝试在输出中找出音量部分。您应该能够看到他们正在共享卷。

票数 3
EN

Stack Overflow用户

发布于 2021-01-06 01:39:26

也许你做错了什么,当测试这个。我已将您的K8s清单安装到我的K8s集群中,并发现所有内容都正常工作:

  1. 您有一个有两个容器(nginx和sidecar)的Pod,它们共享一个卷。

  1. nginx容器将卷装入/var/log/nginx并向其写入几个文件.

sidecar容器将相同的卷装入到/var/log/sidecar.中,从而访问nginx在下编写的日志。

/var/log/nginx.容器不能直接访问

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65591810

复制
相关文章
C++中派生类成员的访问属性
在派生类中,对基类的继承方式可以有public(公用的)、private (私有的)和protected(保护的)3种。 不同的继承方式决定了基类成员在派生类中的访问属性。 简单地说: (1)  公用继承(public inheritance) 基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。 (2)  私有继承(private inheritance) 基类的公用成员和保护成员在派生类中成了私有成员。其私有成员仍为基类私有。 (3)  受保护的继承(protected inheritance) 基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。 保护成员的意思是:  不能被外界引用,但可以被派生类的成员引用。
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.1K0
类的继承 方法和属性的重写
当子类和父类进行同一件事进行不同的操作需要重新写方法(例如电脑鼠标点击打开图片,平板电脑触摸打开图片)
用户2965768
2019/01/28
1.5K0
PHP-私有属性继承和重写
1.3 面向对象三大特性 封装 继承 多态 1.4 私有属性继承和重写 私有属性可以继承但不能重写。 <?php class A { private $name='PHP'; public fun
cwl_java
2022/11/30
6350
JAVA中重写equals()方法的同时要重写hashcode()方法
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。如下:(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true (2)当obj1.hashCode
xiangzhihong
2018/02/01
1.8K0
派生类的构造过程
1、先基类、后对象、再子类 多继承,初始化顺序跟基类的声明顺序有关,从左到右。 对象 ,与声明类的顺序有关,从上到下。
我与梦想有个约会
2023/10/20
1510
派生类的构造过程
python @property 设置只读属性 重写 getter setter 方法
@property广泛应用在类的定义中,可以让调用者写出简短的代码,就可以重写属性的 get 和 set 方法,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。
onety码生
2018/11/21
2.6K0
java中重载和重写的区别
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
全栈程序员站长
2022/09/08
6930
Java中的重载与重写的区别
java中的重载与重写的区别 1、重载发生在本类,重写发生在父类与子类之间; 2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同; 3、重载的参数列表不同,重写的参数列表必须相同。
全栈程序员站长
2022/07/18
8060
Python中的_new_方法的重写
new方法重写的步骤比较固定,直接上代码吧 # 代码 class MusicPlayer(object): # new方法的重写,是一个静态方法,必须主动传递cls参数 def __new__(cls, *args, **kwargs): # 1.创建对象时,new方法会被自动调用 print("创建对象,分配空间") # 2.为对象分配空间 instance = super().__new__(cls) #
benym
2022/07/14
7810
Java中的重载和重写的区别
重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理 重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法
共饮一杯无
2022/11/28
6120
Java中的重载和重写的区别
Java中的多态(重载和重写)
方法重写与方法重载之间的关系:重载发生在同一个类内部的两个方法或多个方法。重写发生在父类和子类之间。
你的明明呐丶
2022/06/27
6070
Java中的多态(重载和重写)
Java中的重载、重写和重构的区别
重载(overloaded): 重载就是在同一个类中允许同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可。
全栈程序员站长
2022/09/08
1.9K0
【说站】python中__new__的重写
1、重写__new__方法一定要return super().__new__(cls)。
很酷的站长
2022/11/23
7280
Java中的方法重载和重写(覆盖)
* 方法重载的判定:同一类中,方法名相同,参数列表不同(参数个数不同,参数列表中对应位置参数类型不同),其他方法返回值
用户7886150
2020/12/14
2.3K0
java中的UrlReWriter(url重写)_源码下载
==============================================
Hongten
2018/09/13
2.1K0
java中的UrlReWriter(url重写)_源码下载
css opacity属性_CSS中的opacity属性[通俗易懂]
With the growing need of making websites, the need for styling them has also increased. Therefore, CSS has become an indispensable part of creating websites. Thus one must be aware of which properties to use while creating a website.
全栈程序员站长
2022/09/01
3.2K0
css opacity属性_CSS中的opacity属性[通俗易懂]
TypeScript中的可选属性和只读属性
可选属性 接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在。 例如给函数传入的参数对象中只有部分属性赋值了。带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面
孙亖
2018/06/07
3K0
你真的了解Override吗,属性能够被重写吗?
最近想到了一个问题,Java的属性能够被Override吗?首先让我们看一下下面这个继承的例子。
三哥
2019/05/07
8130
你真的了解Override吗,属性能够被重写吗?
你真的了解Override吗,属性能够被重写吗?
最近想到了一个问题,Java的属性能够被Override吗?首先让我们看一下下面这个继承的例子。
三哥
2018/12/17
6930
Python使用元类约束派生类中必须实现指定的成员
创建派生类时指定元类,用来控制和约束派生类的创建过程,对派生类中的成员进行一定的限制。
Python小屋屋主
2021/12/29
1K0
Python使用元类约束派生类中必须实现指定的成员

相似问题

重写派生类中属性的特性

15

重写派生类中的NotMapped属性

10

使用派生类重写属性。

41

重写派生类中的公共属性

41

重写派生类中的设计器属性

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档