OpenShift DeploymentConfigとKubernetes Deploymentの違い

OpenShift

はじめに

背景

Red Hatが提供するKubernetesディストリビューションであるOpenShiftでは、KubernetesにはないOpenShift特有のリソースがあります。Kubernetesと比較したOpenShiftの特徴という記事でも紹介しました。

これまでのあらすじ

この記事はKubernetesしか触ったことがなかった私が、OpenShift特有のリソースについて紹介するシリーズ(?)の続きです。

  • Project
  • DeploymentConfig ← いまここ
  • BuildConfig
  • Route
  • ImageStream
  • ImageStreamTag

今回は、DeploymentConfigを紹介します。さらに、KubernetesにおけるDeploymentとの違いを軽くまとめていきます。



OpenShift DeploymentConfigとは

何もわからないので、ドキュメントの記載を覗いてみましょう。

DeploymentConfig は新規の ReplicationController を作成し、これに Pod を起動させます。

これを読んだKubernetesを知っている人なら、「KubernetesのDeploymentReplicaSetPodの関係と同じやんけ」と思う人が多いのではないでしょうか。かくいう私もそう思います。

ドキュメントでは、DeploymentConfigには、主に以下を定義すると書いてあります。

  1. ReplicationController 定義の要素。
  2. 新規デプロイメントの自動作成のトリガー。
  3. デプロイメント間の移行ストラテジー。
  4. ライフサイクルフック。

2. 新規デプロイメントの自動作成のトリガーについては、Deploymentを使っていると目にしません。DeploymentConfigでは、デプロイメントを新規で作成する際のトリガー(デプロイメントトリガー)を定義することができます。コマンドはoc set triggersらしい。

どのようなデプロイメントトリガーが設定できるかは、こちらのドキュメントに書いています。まとめると、次のようになります。

  • ConfigChange: DeploymentConfig の Pod テンプレートで設定の変更を検知。デフォルト。
  • ImageChange: イメージストリームタグ1の更新を検知。

Kubernetes Deploymentとの違いは?

トリガーが設定できるのがDeploymentConfigの特長らしいですね。でもこのトリガーとやらを使う予定がない場合は、Kubernetesで見慣れているDeploymentを使えばいいのでしょうか。そもそもなぜDeploymentConfig、Deploymentという似たものが同居しているのでしょうか。

その答えを探りに、我々はStackOverflowへ向かいました。What is the different between openshift deploymentconfig and kubernetes deploymentというドンピシャなタイトルの質問をしている人を見つけました。質問内容も今の段階にぴったりです。

After far as I know:

deploymentconfig → replicationcontroller → pod
vs.

deployment → replicaset → pod
Otherwise, do these two resources have additional differences?

The more detail the better.

この質問に対して、元Red Hatの方が以下のように回答されています。

A DeploymentConfig (DC) in OpenShift is more or less equivalent to a Kubernetes Deployment, nowadays. Main difference (besides that one is using ReplicationController and the other using ReplicaSet as you rightly pointed out) is that

there are a few things you can do with a DeploymentConfig (around triggers) that you can’t do with a Deployment.

DeploymentConfig’s are first-class citizens in the Web console.

The reason DeploymentConfig’s exist is because we (Red Hat) are innovating. In other words: DeploymentConfig’s predate Deployment’s and while we’re always trying to propose these innovations upstream, they are not always accepted by the community as is. For example, in the case of RBAC, the stuff we had in OpenShift was accepted upstream and that’s why you have the same RBAC resources etc. now in OpenShift and Kubernetes. With DeploymentConfig’s that was not the case. Over time one would expect that DeploymentConfig’s are phased out in favor of Deployment’s but I can’t give you a timeline. If portability is your primary concern, I’d say, use Deployment’s.

知りたかったところは後半部分、”The reason DeploymentConfig’s exist is…”以下に書いていそうです。書いてあることを雑に訳してみます。

  • DeploymentConfigの方がDeploymentよりも先行して開発されている
    • Deployment + trigger e.t.c
  • UpstreamのKubernetesに取り込むよう提案したが、実現しなかった
    • 例えばRBACなどは、Red Hatが開発した機能がUpstreamに受け入れられたため、OpenShiftにもKubernetesにも同じリソースが存在する。
    • DeploymentConfigはこのようにはならなかったので、OpenShiftにだけある
  • 今後DeploymentConfigは、Deploymentに取って代わられていくだろうが、時期はわからない
  • 移植性が最重要ならば、Deploymentを使うのをすすめる

実は冒頭で紹介したドキュメントにはDeployment および DeploymentConfig の比較という説があり、そこにも似たようなことが書いてありますね。

Kubernetes Deployment および OpenShift Container Platform でプロビジョニングされる DeploymentConfig の両方が OpenShift Container Platform でサポートされていますが、DeploymentConfig で提供される特定の機能または動作が必要でない場合、Deployment を使用することが推奨されます。

公式ドキュメントにすら、DeploymentConfig で提供される特定の機能または動作が必要でない場合、Deployment を使用することが推奨と書いてあります。DeploymentConfigの特長(主にトリガー周り)を十分確認して、この機能が不要な場合には、Deploymentを使うのが良さそうです。



デモ

手軽に試したい方は、CRCの利用がおすすめです。利用方法は以下を参照ください。

Red Hat CodeReady Containersで、OpenShift 4をローカルでお手軽に試す
NishipyOpenShift 4 の簡易版であるCodeReady Containersを、自宅ラップトップに導入したときのメモです。はじめにOpenShiftRed Hat社が提供するコンテナオーケストレーションプ...(続く)

またコンテナイメージは、以前用意したmkdocsのものを使います。Docker Hubにあげています。

MkDocsをDockerで気軽に動かす
はじめに近ごろ仕事で、コンテナをデプロイするデモを実施することが多くなってきました。それなりにグラフィカルな方がわかりやすいけど、構築が簡単な方が嬉しいなあと思っていました。そうして小一時間考えてみたのですが、MkDocsしか思い浮かば...(続く)

Project作成

なにはともあれ、まずはプロジェクトを作成します。

DeploymentConfigの作成

今回使うyamlファイルはこちらです。単純にmkdocsのコンテナを、レプリカ数2でデプロイするものです。spec.triggersには一応ConfigChangeと書いておきます。

apply後、DeploymentConfigが作成されます。TRIGGERED BYのところがconfigになっていますね。そのうちReplicationContorollerもできて、Podも上がってきます。



DeploymentConfigの変更

念の為、ConfigChangeトリガーが有効になっているか確かめておきましょう。oc edit dc mkdocsとして、spec.templateの項目を適当に変更してみましょう。私はラベルを追加しました。

DeploymentConfigREVISIONが2になりました。それに伴い、ReplicationControllerPodも新たに作成されているのがわかります。

さいごに

今回の話をまとめると、以下の通りです。

  • DeploymentConfigは、ReplicationControllerPodを管理するリソース
  • デプロイメントトリガーなどDeploymentConfigにしかない機能もあるが、ほとんどDeploymentと同じ
  • 移植性を重視するならDeploymentが推奨

このシリーズ

Kubernetesと比較したOpenShiftの特徴
はじめに転職を機にOpenShiftばかり触っています。最近はだんだんと慣れてきたので、この辺でKubernetesとOpenShiftの違いについて、わかりやすそうにまとめてみます。わかりやすくするために、「違い」と言ってもあまり細か...(続く)
OpenShift ProjectとKubernetes Namespaceの違い
はじめに前回、KubernetesとOpenshiftをふんわり比較した記事を書きました。思ったより多くの方に読んでいただいたようです。ありがとうございます。この記事のリソースの違いという節で、OpenShift独自のリソースに...(続く)
OpenShift DeploymentConfigとKubernetes Deploymentの違い
はじめに背景Red Hatが提供するKubernetesディストリビューションであるOpenShiftでは、KubernetesにはないOpenShift特有のリソースがあります。Kubernetesと比較したOpenShiftの特...(続く)

以上.


  1. イメージストリーム、イメージストリームタグについては、こちら参照。 

コメント