解密k8s文件挂载中出现神秘数字420

起因

某同学在查看pod的挂载文件状态时,看到有一个Mode状态为420,但是不记得yaml中有写这个数字,要写也是777、755、644等,也不会写420呀?那么这个数字时哪里来的?什么含义呢?

场景再现

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-with-configmap
spec:
  containers:
    - name: my-container
      image: nginx:latest
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: example-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-config
data:
  config.txt: |
    key1=value1
    key2=value2

在应用后,我们再次查看pod的运行yaml
kubectl get pod -o yaml
你会发现example-config定义中有个mode420

  volumes:
  - configMap:
      defaultMode: 420
      name: example-config
    name: config-volume

揭开谜底

kubectl get cm(或其他资源)输出中看到的 mode 值(如 420)实际上是一个十进制表示的权限值,而 Linux 文件权限通常以八进制表示。因此,这个值是十进制形式的 Linux 权限。

如何理解 420

  1. 十进制 420 转换为八进制:
    十进制 420 转为八进制是 0644,表示:

    • 所有者(Owner):读写权限(rw-)。
    • 组用户(Group):只读权限(r--)。
    • 其他用户(Others):只读权限(r--)。
  2. 为什么用十进制显示:

    • Kubernetes 内部使用十进制表示权限值,因为权限值存储在系统(如 etcd)中时,通常以整数形式保存。
    • 当使用 kubectl 查看资源时,mode 字段中的权限值直接显示为十进制,而不是 Linux 常用的八进制格式。
  3. 常见值对照表:

十进制值八进制值权限含义
4200644所有者可读写,其他用户只读
4930755所有者可读写执行,其他用户可读执行
3840600仅所有者可读写
5110777所有用户可读写执行

kubectlmode 的来源

  • 当一个 ConfigMap 被定义或挂载为文件时,Kubernetes 会为每个文件设置一个默认权限。
  • mode 是文件权限的表示,来源于 Kubernetes 内部的权限分配逻辑:
    • 默认值:挂载时文件默认为 0644,即十进制 420
    • 安全考虑:Kubernetes 限制权限,防止非必要的执行权限或过多的写权限。

验证与查看

如果您想验证 420 在实际挂载后的表现,可以通过以下步骤:

  • 在容器中检查权限:
    kubectl exec -it my-pod-with-configmap -- ls -l /etc/config
    
    输出会显示:
    -rw-r--r-- 1 root root 6 Dec 5 12:00 key
    
    其中,-rw-r--r-- 对应八进制权限 0644,十进制为 420

总结

  1. kubectl get cm 中的 mode 是文件权限的十进制表示。
  2. 420 转为八进制是 0644,是文件权限的常见默认值。
  3. 这种表示方法更贴近底层系统存储,但与 Linux 常用八进制表示有所不同。理解转换规则后,就可以轻松解读这些值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值