#概要
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番ポートで稼働しています
また、2つのコンテナはemptyDirをマウントしてjsonファイルを共有しています。
#サンプルコード
サンプルのyamlファイル及びtest-db-viewerコンテナのコードはGithub上で公開しています。必要であれば御覧ください。
https://github.com/mmitti/kube-multi-container-sample
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