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链接。这使调试更加容易,但是这也意味着文件系统秘密仅受文件系统许可权保护。
  • 相关阅读:
    Educational Codeforces Round 10 C. Foe Pairs 水题
    Educational Codeforces Round 10 B. z-sort 构造
    CDOJ 1048 Bob's vector 三分
    Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
    第14届电子科大初赛民间盗版部分题目题解
    HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数
    HDU 5653 Bomber Man wants to bomb an Array. dp
    HDU 5652 India and China Origins 二分+并查集
    HDU 5651 xiaoxin juju needs help 数学
    HDU 5650 so easy 数学
  • 原文地址:https://www.cnblogs.com/mcsiberiawolf/p/12230787.html
Copyright © 2011-2022 走看看