IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第86回 OpenShiftの機能紹介 ―― コンテナの自動デプロイメント (中井悦司) 2016年3月

はじめに

 第84回第85回では、OpenShiftにおけるDockerイメージのバージョン管理と自動ビルドの機能を説明しました。今回は、作成したDockerイメージからコンテナを起動して、アプリケーションを実行するための「デプロイ設定」を解説します。これで、OpenShiftの代表的な機能である「イメージストリーム(ImageStream)」「ビルド設定(BuildConfig)」「デプロイ設定(DeployConfig)」が理解できたことになります。

 さらにOpenShiftでは、これらの設定を一つにまとめた「テンプレート(Template)」を作成することができます。テンプレート管理者が、関連する設定を事前にテンプレートにまとめておくことにより、アプリケーション開発者やテスト/リリース担当者は、複雑な設定を意識することなく、従来型のPaaS環境として簡単に利用することが可能になります。

Podによるコンテナのデプロイ

 デプロイ設定を解説する前に、OpenShiftに特有の仕組みである「Pod」について補足しておきます。これは、仮想NICを共有する形で複数のコンテナをまとめてデプロイする機能です。図1のように、同じPodに属するコンテナは、同一のIPアドレスを持っており、お互いに「localhost」経由での通信が可能になります。たとえば、PostgreSQLのデータベースを実行するコンテナと、GUI管理ツールのpgAdminを実行するコンテナを同一のPodにまとめて起動します。通常、pgAdminでは、管理対象のPostgreSQLが稼働するサーバーを指定する必要がありますが、この場合は「localhost」指定で接続することができます。

 また、OpenShiftでは外部のNFSサーバーやGlusterFSのファイルシステム領域を「永続ストレージ」として、コンテナに接続することができます。同じPodのコンテナは、同一の永続ストレージ領域を参照することができるので、コンテナ間でファイルを共有することも可能になります。

fig01

図1 複数のコンテナをPodにまとめて起動

デプロイ設定の内容

 それでは、Dockerイメージからコンテナを起動するために必要となる「デプロイ設定」を解説します。デプロイ設定では、主に次の項目を指定します。

  • Podテンプレート:Podに含めるコンテナなど、Podの内部構成を指定します。
  • レプリカ数:起動するPodの数を指定します。
  • ノードセレクター:Podを起動するノードを選択する条件を指定します。
  • トリガー:Dockerイメージが更新された場合など、Podを自動的に再デプロイする条件を指定します。

 Podテンプレートでは、Podに含めるコンテナごとに、使用するDockerイメージ(イメージストリームとタグ名)や接続を受け付けるポート番号などを指定します。レプリカ数は、同一構成のPodを複数起動して、アプリケーションの負荷分散を行う際に指定します。また、ノードセレクターを使用すると、開発環境、テスト環境、本番環境などで、Podを起動する物理サーバーを分けることができます。プロジェクト単位で事前にノードグループを指定しておき、さらに、デプロイ設定のノードセレクターでグループ内の特定ノードを指定するなども可能です。

 そして、トリガーを利用すると、Podのデプロイを自動で再実行することができます。Podテンプレートでは、使用するDockerイメージをイメージストリームとタグ名で指定しますので、新しいイメージにタグ名が付け替えられたタイミングで、Podを再デプロイするなどの使い方ができます。複数のPodで負荷分散を行っている場合は、新しいイメージのPodを追加で起動しながら、既存のPodを段階的に停止するという処理が可能です。これにより、外部のクライアントから見て、アプリケーションが完全に停止する期間をなくすことができます。レプリカ数については、Podをデプロイした後から変更することも可能です。

ネットワーク接続に関する設定

 Podテンプレートでは、接続を受け付けるポート番号を指定しますが、外部から直接にこのポート番号で接続するわけではありません。外部からの接続については、同一プロジェクトの他のPodから接続するための「サービス」と、外部のクライアントから接続するための「ルーティング」の2種類の設定があります。

 まず、接続先のPodテンプレートの名前と接続用のポート番号を指定して「サービス」を定義すると、このPodテンプレートから起動した複数のPodに対する、接続用IPアドレス(代表IPアドレス)が用意されます。他のPod内のアプリケーションからは、「接続用IPアドレス/ポート番号」に接続すると、自動的に負荷分散が行われるようになります。

 次に、「ルーティング」では、事前に定義したサービスに対して、さらに外部接続用のURLを指定します。これにより、外部のクライアントからは、URL指定でのアプリケーションアクセスが可能になります。Webサーバー、Webアプリケーションサーバー、DBサーバーからなる、3層構造のアプリケーションであれば、それぞれに相互接続用のサービスを定義した上で、外部からのアクセスが必要なWebサーバーには、ルーティングを追加設定する形になります(*1)。

 なお、サービスの接続用IPアドレスは、サービスを定義したタイミングで自動的に割り当てられて、その後に起動したPodからは、環境変数を用いて該当のIPアドレスが参照できるようになります。したがって、実際の運用では、Podを起動する前に、事前にサービスだけを定義しておきます。この後でPodを起動すると、それ自身が所属するサービスにおける負荷分散の振り分け先に追加されると共に、他のサービスに対しては、所定の環境変数でのアクセスが可能になります。Pod内で稼働するアプリケーションでは、他のPodへのアクセスは、すべて環境変数で指定するように構成しておきます。

次回予告

 これまで数回に渡って、OpenShiftの機能を解説してきました。第83回で紹介した「OpenShiftの全体像」について、より実感を持って理解していただけたものと思います。

 次回は、新しい話題として、「Jupyter」を紹介します。元々は、Webブラウザの画面上で、Pythonによるデータ分析を対話的に実施するツールでしたが、最近では、これをシステム運用・管理に活用しようという動きがあります。Jupyterを利用して「実行可能な手順書」を作成するという、興味深い取り組みを紹介したいと思います。

参考資料

*1 OpenShift v3 Technical Introduction

「OpenShiftの内部構造」のセクションにネットワーク接続の詳細が記載されています。

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes