zoukankan      html  css  js  c++  java
  • kubernetes之Pod中的容器共享进程Namespace

    简介

    此文讲述如何配置Pod中的容器恭喜共享进程Namespace。当进程名称空间共享被激活,在同一个Pod中,一个容器的进程可以在其他容器中看到。可以使用此功能来配置协作容器,例如日志处理程序sidecar容器,或对不包含调试实用程序(例如shell)的容器映像进行故障排除。在Kubernetes v1.17中已处于稳定状态。

    备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。

    配置Pod共享进程Namespace

    使用shareProcessNamespace激活进程Namespace共享。例如:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      shareProcessNamespace: true
      containers:
      - name: nginx
        image: nginx
      - name: shell
        image: busybox
        securityContext:
          capabilities:
            add:
            - SYS_PTRACE
        stdin: true
        tty: true
    

    1、在集群中创建nginxPod

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      shareProcessNamespace: true
      containers:
      - name: nginx
        image: nginx
      - name: shell
        image: busybox
        securityContext:
          capabilities:
            add:
            - SYS_PTRACE
        stdin: true
        tty: true
    

    创建Pod

    # kubectl apply -f /root/k8s-example/pods/share-process-namespace.yaml
    

    2、将 shell 容器附加到nginx容器上,运行ps命令

    # kubectl attach -it nginx -c shell
    

    输出内容如下:

    / # ps ax
    PID   USER     TIME  COMMAND
        1 root      0:00 /pause
        6 root      0:00 nginx: master process nginx -g daemon off;
       11 101       0:00 nginx: worker process
       12 root      0:00 sh
       18 root      0:00 ps ax
    

    可以用信号通知其他容器中的进程。 例如,将SIGHUP发送到nginx以重新启动worker进程。 这需要SYS_PTRACE功能。

    / # kill -HUP 6
    / # ps ax
    PID   USER     TIME  COMMAND
        1 root      0:00 /pause
        6 root      0:00 nginx: master process nginx -g daemon off;
       12 root      0:00 sh
       19 101       0:00 nginx: worker process
       20 root      0:00 ps ax
    

    甚至可以使用/proc/$pid/root链接访问另一个容器映像。

    / # head  /proc/6/root/etc/nginx/nginx.conf 
    
    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    

    理解进程Namepsace共享

    Pod可以共享很多资源,例如共享进程名称空间。不过,某些容器图片可能会与其他容器隔离,因此了解这些差异很重要:

    • 容器的进程不再有PID 1一些容器在没有 PID 1进程或运行诸如kill -HUP 1之类的命令来发出容器进程信号拒绝启动(例如:,容器使用 systemd)在具有共享进程名称空间的Pod中,kill -HUP 1将向Pod沙箱发出信号。 (在以上示例中为/ pause。)
    • 进程对Pod中的其他容器可见。 这包括/proc中所有可见的信息,例如作为参数或环境变量传递的密码。 这些仅受常规Unix权限保护。
    • 容器文件系对Pod中其他容器通过/proc/$pid/root链接。这使调试更加容易,但是这也意味着文件系统秘密仅受文件系统许可权保护。
  • 相关阅读:
    Nginx配置文件的路径
    有关Tomcat 8.5版本文件上传后无权限访问的问题
    常见HTTP状态码列表
    服务器BMC(带外)
    CDN问题
    PECE
    linux系统概述
    干货--整蛊你的舍友
    arp请求与回复
    huawei oceanstor
  • 原文地址:https://www.cnblogs.com/mcsiberiawolf/p/12230787.html
Copyright © 2011-2022 走看看