Kubernetes Advent Calendar 2016の三日目の記事です。
OpenShiftというのはRed Hatが主導で開発しているコンテナプラットフォームで、最近の一行説明は"Enterprise Kubernetes for Developers"ということになっています。
OpenShiftはKubernetesの強化版であり、Kubernetesを内包しています。Red HatはKubernetesの公開直後から開発に参加しており、コントリビュータのグラフを見たときにコミット数第二位のsmarterclaytonさんがRed HatでOpenShiftの開発をリードしている人です。第一位の人はGoogleからMicrosoftに転職してKubernetesへのcommit数が低下しているので、このままのペースであれば第一位になります。
Red Hatは商用版のOpenShift Container Platformを2015/06(Kubernetesの発表はちょうどその一年前の2014/06)から展開しており、既に政府系、銀行や保険などの金融系、通信サービス業、旅行サービス業、IoT関連分野などで多く利用されています。日本のKubernetesのコミュニティの事例ではクラウドプロバイダと先進的なユーザ企業が多く、OpenShiftのようなエンタープライズ寄りな分野の利用事例はあまり聞かないのですが、サポートが無いからという側面が大きいのかもしれません。サポートと実績のあるKubernetesとしてOpenShiftが採用されているのだと思います。
KubernetesとOpenShiftの違い
KubernetesとOpenShiftの大きな違いですが、OpenShiftは「開発のスコープまでカバーできるKubernetes」になっています。Kubernetes単体ではほとんどのケースではインフラエンジニアが利用するインフラツールという位置付けになると思いますが、OpenShiftはデプロイだけではなくビルドを含めた開発のスコープまでをカバーすることで、様々なユースケースに利用できるようになっています。逆に、利用できる機能やユースケースが広すぎるために、最初はなんだか大きくてよくわからない、というような印象を受けるかもしれません。
一番基本的な機能は以下のようにソースコードを指定すると依存ライブラリの取得などの各言語の特有のビルド、コンテナイメージのビルドを行い、コンテナイメージをレジストリに登録してデプロイして実行、URLでのアクセスを可能にしてくれます。このあたりの基本機能はHerokuやCloud Foundryと言った他のPaaSとそれほど変わりません。
$ oc new-app http://github.com/nekop/hello-sinatra $ oc expose svc hello-sinatra $ open "http://hello-sinatra-myproject.apps.example.com"
コンテナエンジンには現状Dockerを利用していますが、利用者は手元のマシンにDockerをインストールしたりする必要はまったくありません。ワークロードは全部クラスタリソースに投げることができます。
OpenShiftがフィットする状況は以下のようなものがあります。
- アプリケーションのコンテナ化を進めたいけど生Docker遅くてつらい
- 隔離されていない共有開発環境しかないので開発がやりづらい、開発者ごとにさくっと開発環境を払い出したい
- 開発者に個々に環境セットアップをさせたくないのでPaaSを利用させたい
- 多言語利用マイクロサービス化したアプリケーションの開発運用ができるプラットフォームが欲しい
- ビルド、テスト、デプロイなどを自動化してビルドパイプライン実現したい
- 開発メンバーには軽量ラップトップを配布して開発サーバでVMを払い出せるようにしているけど、VMのセットアップのコストがどうにも高い
OpenShiftを使うと何ができるの?
典型的な例で、以下の図のようなものができます。大手のユーザ企業の事例では、開発テストアプリの運用を全てOpenShift上で行っており、近年のトレンドであれるマイクロサービス化にも伴って数千という数のアプリケーションがOpenShift上で開発され、動作しています。
OpenShiftの機能って何があるの?
代表的なものをいくつかピックアップします。ドキュメントはdocs.openshift.orgにあります。
- Kubernetesの機能ほぼ全部
- リッチなWebコンソール
- コンテナイメージのビルド機能
- 手元で遅いdocker buildを実行する必要がなくなる
- ソースツリーを指定すればビルドしてコンテナイメージとしてデプロイしてくれる機能
- フロントエンドルータ
- デフォルトはHAProxy、F5 BIG-IPもプラグイン可能
- コンテナレジストリ
- イメージの情報の詳細を参照可能
- セキュリティ
- 基本的にコンテナ内でuid 0 rootは利用不可
- SELinuxによる各コンテナ間およびホストの隔離
- 各ネームスペース間は基本的に隔離されており不可侵
- RBAC (ロールベースアクセス制御)
- ネットワーキング
- OpenShift SDNによるプロジェクト毎のネットワーク隔離
- マルチテナント
- 上記セキュリティとネットワーク, Linux cgroupsでのリソース制限の組み合わせ
- イベントトリガー
- GitHubにコミットpushされたらビルドを実行してデプロイ
- イメージアップデートトリガーを利用してベースのコンテナイメージのセキュリティ修正などのアップデートを検知、関連するイメージを全てリビルドしてローリングアップデート
- 柔軟なデプロイ制御
- 例えばデプロイの進捗に合わせてスクリプト実行
- Blue-Green, A/B deploymentsなどの適用
- Jenkins Pipeline Pluginによるビルドパイプラインのサポート
- 複数のビルドの連結、デプロイの制御やイメージのタグ付け、リリースなど
- テンプレート
- 事前に定義したテンプレートからビルドやデプロイの生成、WikiやGitサーバを立ち上げたり、データベースをアプリケーションにインスタントに追加など
- 標準インストーラ
- Ansible
OpenShiftのWeb Consoleってどんな感じ?
こんな感じです。
どうやって試すのがいいの?
fedoraのVM立ち上げてoc cluster upをするスクリプトを流せばすぐ使えます。
日本語で質問とかできる場所はどこ?
PaaS JPのSlackのopenshiftチャネルがあります。
今日はこのへんで。