参考文件 https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/
今天要来实作 Share Process Namespace between Containers in a Pod 这个任务
在同一个 Pod 的 Container 内的 Process 可以透过 namespace sharing 的方式, 让彼此可以互相沟通
这种设定可以用来让同一个 Pod 内的 Container 彼此合作. 举例来说, 建立一个专门处理应用log 的 SideCar Container 或是建立一个用来 Debug 的 Container 就可以这样做
1 建立一个 Pod 设定 shareProcessNames 让 Container 间 Process 可以互通
2 透过连线到其中一的 Container 验证查看另一个 Container 的 Process
建立 share-process-namespace.yaml 如下:
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
名称设定为 nginx
设定 shareProcessNamespace 为 true 这个设定用来让 Containers 间的 Process 可以互通
设定第一个 Container 使用 image 为 nginx 名称设定为 nginx
设定第二个 Container 使用 image 为 busybox 名称设定为 shell
设定第二个 Container 设定 securityContext 如下
capabilities:
add:
- SYS_PTRACE
增加这个 SYS_PTRACE 是开启 可以让另一个 Container Process 操作这个 busybox Container process 的权限
设定第二个 Container 开启 tty: true, stdin: true 打开 terminal 与 stdin 权限
建立布署使用以下指令
kubectl apply -f share-process-namespace.yaml
透过以下指令连线到 nginx
kubectl attach -it nginx -c shell
使用以下指令查看 Process
ps ax
透过以下指令发 SIGNUP 到 nginx 来重新启动 worker process
kill -HUP 7
注意的是, 这边 7 这个 PID 可能因为每个布署的不同而不同, 需要透过上面 ps ax 找到 master process 来处理
然後使用以下指令验证一下重起状态
ps ax
使用以下指令来查看 /proc/$pid/root 连结
head /proc/7/root/etc/nginx/nginx.conf
同一个 Pod 的 Container 透过 shared namespace namespace
以下有几个特性
有些 Container 需要 PID 1 来开启比如说需要 systemd 的 image
会透过 kill -HUP 1 来重启 Container Process
在 Pod 有开启 share process namespace, kill -HUP 1 则会变成发指令到 Pod 的 sandbox
包括所有在 /proc 下的资讯, 比如说环境参数或是运行参数
可是存取仍然需要是具有对应 UNIX 权限的使用者
透过这个方式可以有效的做 debug
这篇是 k8s 入门 30 天的最後一篇
大致上介绍了一些基础 k8s 基础概念
笔者发现在研究时由於自身经验的不足, 常常无法用良好的实际案例来解说
想要更理解 k8s 的效用, 後续应该要做更延伸应用
还需要去研究许多比如资讯安全的设置, NAT, Metric 监测, 或是建制 ci/cd 的 Pipeline runner 等等也许都是不错的应用情境
感谢各位订阅者一直以来的观看笔者的文章
<<: Day 29:利用 NPM 来安装 Next 布景主题
>>: Day29 :【TypeScript 学起来】React + TypeScript 实作简单 Todo App Part2
今天要说在後端的Cube.js Server连线DB後,对DB的请求需要做什麽样的设置,也就是如何建...
连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...
上一篇我们把MySQL安装设定好,并且开始跟django做互动了 今天我们就要来把MySQL的东东全...
前情提要 昨日实作其中一个英雄表单栏位「姓名」後,演示了如何使用 FormControl 表单控制项...
大家好,我是 A Fei,相信大家应该都听过费波那契数(Fibonacci)的大名,又称费式数列,是...