IT 铁人赛 k8s 入门30天 -- day27 Communicate Between Containers in the Same Pod Using a Shared Volume

前言

今天要来实作 Communicate Between Containers in the Same Pod Using a Shared Volume 这个任务

k8s 在一个 Pod 内可以跑多个 container

而一般来说 Pod 会有一个主要应用的 container , 其他则是辅助应用的 container

这些 container 可以透过挂载 Pod 内的同一个 Volume 来做沟通

这次这个任务就是要来实践上面所说

建立两个 Container , nginx 与 debian , 共同挂载同一个 Volume

debian 把资料写入 shared-data 内

nginx 再从 shared-data 把档案牍出来

布署目标

1 建立一个包含两个 container 的 Pod

2 进入 nginx 的 container 验证可以从 shared-data 读出 debian 写入的档

3 清除布署

建立一个包含两个 container 的 Pod

建立 two-container-pod.yaml 如下:

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:
  restartPolicy: Never
  volumes:
  - name: shared-data
    emptyDir: {}
  containers:
  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html
  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]

建立一个 Pod

名称设定为 two-containers

设定 volumes 名称为 shared-data

设定 container nginx-container 的 image 为 nginx

设定 container nginx-container 挂载 volume shared-data 到 /usr/share/nginx/html

设定 container debian 的 image 为 debian

设定 container debian 挂载 volume shared-data 到 /pod-data

设定 container debian 执行指令如下

/bin/sh -c "echo Hello from the debian container" > /pod-data/index.html

建立布署指令如下:

kubectl apply -f two-container-pod.yaml

检查布署指令如下:

kubectl get pod two-containers --output=yaml

进入 nginx 的 container 验证可以从 shared-data 读出 debian 写入的档

进入 nginx-container 指令如下:

kubectl exec -it two-containers -c nginx-container -- /bin/bash

在 nginx-container terminal 执行指令如下:

apt-get update
apt-get install curl procps
ps aux

执行验证指令如下:

curl localhost

清除布署

kubectl delete -f two-container-pod.yaml

後记

这个范例任务中, 两个在同一个 Pod 的两个 container 透过 Pod 的 Volumes 来做沟通

然而, 假设 Pod 被删除并且重新建立, 任何建立在 Volume 内的资料都会消失

所以并非是个好方法, 沟通方式还是应该用透过 api 或是 message queue 的方式才比较即时


<<:  [Day 28 - 小试身手] Todolist with React (3)

>>:  Day-26 手把手的手写辨识模型 0x1:资料集整理

用 Line LIFF APP 实现信箱验证绑定功能(2) - 使用 Vite 快速打造输入页面

昨天提到,LIFF APP 有可能因为使用者没有绑定 email,或是不授权 email 使用导致无...

DAY 14- 《公钥密码》-RSA(2)

"我想不到要讲什麽。" --- RSA演算法 演算法的准备步骤有五个,更准确来说...

堆叠 - 四则运算 - DAY 8

标准四则运算(中缀运算式)转尾缀运算式 9-3/3+(4+5)*2 尾缀运算式算出答案 ...

#3-打字特效炫起来!(CSS Animation)

昨天的第三个按钮动态提案:文章传送门 使用了CSS动态的动态的主菜——Animation。 其实有很...

TypeScript 能手养成之旅 Day 6 物件型别-基础物件型别

前言 今天要来介绍物件型别里面的基础物件,或许会想说那除了基础物件型别以外,不是还有 TypeScr...