LoginSignup
2
2

More than 5 years have passed since last update.

Pod内 コンテナ間で SysV IPC 共有メモリを試してみた

Last updated at Posted at 2018-08-05

次の図の様に、ポッドのコンテナ間で、共有メモリの読み書きができることを確認した。結果は、ポッド内で、異なるコンテナ間で、System-V 共有メモリを利用して、データの受け渡しができることが確認できた。

スクリーンショット 2018-08-05 21.42.43.png

サイドカーポッドのYAML

System-V 共有メモリへ書き込む writerコンテナと、読み取り readerコンテナを作成して、次のYAMLで、一つのポッドとして起動する。

apiVersion: v1
kind: Pod
metadata:
  name: sidecar
spec:
  containers:
  - name: writer
    image: maho/sidecar-ipc:w.4
    volumeMounts:
    - mountPath: /mnt
      name: shared-vol
  - name: reader
    image: maho/sidecar-ipc:r.4
    volumeMounts:
    - mountPath: /mnt
      name: shared-vol
  volumes:
  - name: shared-vol
    emptyDir: {}

結果

コンテナは、異なっていても、二つのコンテナ間で共有メモリを利用して、データの受け渡しができることが確認できた。

(1) 共有メモリに書き込む前に、読み取り、結果な空の応答
imac:sidecar-ipc maho$ kubectl exec -it sidecar -c reader /reader.py

(2) 共有メモリに書き込み
imac:sidecar-ipc maho$ kubectl exec -it sidecar -c writer /writer.py

(3) 共有メモリから読み取り、書き込んだ内容が表示された
imac:sidecar-ipc maho$ kubectl exec -it sidecar -c reader /reader.py
takara aho maho !


コンテナのファイル

この検証で利用したコンテナをビルドするためのファイルです。

Writerコンテナ

FROM python:2
RUN pip install posix_ipc
COPY ./writer.py /writer.py
CMD [ "tail", "-f", "/dev/null" ]
writer.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from time import sleep    
import mmap
import posix_ipc as ipc

s = ipc.SharedMemory('/shm', flags=ipc.O_CREAT, size=20, read_only=False)
mm = mmap.mmap(s.fd, s.size)
mm.seek(0)
mm.write(b'takara')
mm.write(b' aho maho')
mm.write(b' !\n')
s.close_fd()

Readerコンテナ

FROM python:2
RUN pip install posix_ipc
COPY ./reader.py /reader.py
CMD [ "tail", "-f", "/dev/null" ]
reader.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import mmap
from time import sleep    
import posix_ipc as ipc

s = ipc.SharedMemory('/shm', flags=ipc.O_CREAT, size=20, read_only=False)
mm = mmap.mmap(s.fd, s.size)
mm.seek(0)
print mm.read(20)
print "\n"

参考資料

[1] http://note.crohaco.net/2017/python-posix-ipc-systemv-ipc/
[2] https://www.mirantis.co.jp/blog/multi-container-pods-and-container-communication-in-kubernetes/
[3] https://github.com/kubernetes/kubernetes/issues/28272

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2