LoginSignup
12

More than 5 years have passed since last update.

Kubernetesで複数コンテナを1Podとして動かす

Last updated at Posted at 2016-09-28

概要

1Pod内で複数のコンテナを動かしてみます。
Kubernetesの構築(記事はこちら)とDNSサーバーの構築(記事はこちら)が完了していることが前提となります。
また、前回の記事で作成したサンプルを一部使いまわしています。

環境

DNSサーバーの構築完了時と同じ環境です。
前回の記事で追加したnfsサーバーは今回は不要です。

masterサーバー nodeサーバー
ホスト名 master node1
IPアドレス 192.168.137.20 192.168.137.21
動作しているサービス kube-apiserver
kube-controller-manager
kube-scheduler
kube-dns
kubelet
kube-proxy

構成

今回は以下2つのコンテナを1Podとして配置します。

  • test-db
    前回の記事で作成したサンプルを流用
    DBサーバ(実際はjsonファイルを読みだすだけ)
    DockerHub上にmmitti/test-dbとしてイメージを公開しています
    8000番ポートで稼働しています
  • test-db-viewer
    前回の記事で作成したtest-db-clientを変更したもの
    test-dbが読み込んでいるjsonファイルと同じものを読み込みHTMLを生成します
    データの追加は自ホスト8000番ポート(test-db)宛にデータをポストします
    5000番ポートで稼働しています

図面1.png

また、2つのコンテナはemptyDirをマウントしてjsonファイルを共有しています。

サンプルコード

サンプルのyamlファイル及びtest-db-viewerコンテナのコードはGithub上で公開しています。必要であれば御覧ください。
https://github.com/mmitti/kube-multi-container-sample

test-db-viewer.yaml

kind: ReplicationController
apiVersion: v1
metadata:
  name: test-db-viewer
  labels:
    app: test-db-viewer
spec:
  replicas: 2
  selector:
    app: test-db-viewer
  template:
    metadata:
      name: test-db-viewer
      labels:
        app: test-db-viewer
    spec:
      containers:
      - name: test-db-viewer
        image: mmitti/test-db-viewer
        ports:
        - containerPort: 5000
        volumeMounts:
        - name: data
          mountPath: /db
          readOnly: true
      - name: test-db
        image: mmitti/test-db
        ports:
        - containerPort: 8000
        volumeMounts:
        - name: data
          mountPath: /db
      volumes:
      - name: data
        emptyDir: {}
---
kind: Service
apiVersion: v1
metadata:
  name: test-db-viewer
  labels:
    app: test-db-viewer
spec:
  ports:
  - name: viewer
    protocol: TCP
    port: 5000
  - name: db
    protocol: TCP
    port: 8000
  selector:
    app: test-db-viewer

普通のReplicationControllerとほぼ同様でcontainersに複数のコンテナを書くだけです。
今回はストレージとしてemptyDirを用いたのでその定義も含んでいます。

注意

containersのportsにhostPortを含めるとノードのポートとバインドされ1ノードに1Podしか動かなくなるので注意

動作確認

ReplicationControllerとサービス作成後以下のコマンドで動作を確認します。

kubectl get po  -l app=test-db-viewer
NAME                   READY     STATUS    RESTARTS   AGE
test-db-viewer-0ckpz   2/2       Running   0          9m
test-db-viewer-zov19   2/2       Running   0          9m

pod起動後
http://192.168.137.20:8080/api/v1/proxy/namespaces/default/services/test-db-viewer:5000/
にアクセスして見ます。

テキストボックスに適当な文字列を書き込みADDボタンを押してみてください。
INIT_HOST, DB_HOST, WRITE_HOSTが同じであれば成功です。

※2pod起動しているのでアクセスするたび、ポストするたびに接続先のホストが変わる可能性があります。わかりにくい場合はreplicasを1にしてテストしてみてください。

参考

test-dbコンテナの詳細は前回提示したGithubで公開しています。必要であれば御覧ください。
https://github.com/mmitti/kube-petset-sample

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
12