40

Kubernetes(1.2)内の複製コントローラと展開の違いを知りたかったのです。始めのドキュメント(http://kubernetes.io/docs/hellonode/)を見て、私はデプロイメントを作成しましたが、Web UIには表示されません。複製コントローラ対Kubernetesの展開

ウェブUIからアプリケーションを作成すると、それらはレプリケーションコントローラとして作成されます。機能的には、彼らは非常によく似ているようです(彼らはポッドを管理し、サービスを持っています)。

だから違いはありますが、それぞれの場合はどうすればいいですか?

答えて

37

デプロイメントは、レプリケーションコントローラよりも新しい、上位レベルの概念です。レプリカセットの展開を管理します(より新しいコンセプトですが、レプリケーションコントローラとほぼ同等です)。レプリカセットの簡単な更新と、以前の展開にロールバックする機能があります。

これまではkubectl rolling-updateでこれを行う必要がありましたが、これは宣言ではなく、ロールバック機能を提供しませんでした。

Kubernetes Dashboardは、Deploymentsをサポートするようにまだ更新されておらず、現在はレプリケーションコントローラ( Deployments not visible in Kubernetes Dashboard参照)のみをサポートしています。

編集:ダッシュボードでデプロイメントがサポートされるようになりました。

+0

新しいアプリケーションにはデプロイメントを使用する必要がありますか?また、kubectl cliを使用して、展開/そのポッド(CPU、memの使用)に関する統計情報を取得する方法はありますか? – byteSlayer

+0

個人的には、ダッシュボードのサポートがないため、これまでの配置を使用していました。私はそのようなコマンドが存在するかどうかわかりません - あなたは何とか[Heapster](https://github.com/kubernetes/heapster)に直接問い合わせる必要があると思います。 –

+0

'kubectl get deployments'、' kubectl describe deployments'、 'kubectl get pods -l <​​デプロイメントポッドspecに入れたラベルを使って、デプロイメントに関する統計を得ることができます。 foo = bar> ' – janetkuo

7

Deploymentsはまだベータ版であり(APIはextensions/v1beta1です)、おそらくUIに表示されません。それらは、ポッドを生きているだけでなく、状態遷移を自動化します。リンク先のページから:

Aの展開は、ポッドのための宣言型の更新を提供し、レプリカは (次世代レプリケーションコントローラー)を設定します。 は、Deploymentオブジェクト内の目的の状態を記述するだけで、デプロイメント コントローラは実際の状態を のレートで希望の状態に変更します。デプロイメントを定義して新しい リソースを作成するか、既存のリソースを新しいものに置き換えることができます。

また、公開履歴やその他の便利な機能も備えています。

$ kubectl rollout history deployment/nginx-deployment 
deployments "nginx-deployment": 
REVISION CHANGE-CAUSE 
1   kubectl create -f docs/user-guide/nginx-deployment.yaml --record 
2   kubectl apply -f docs/user-guide/new-nginx-deployment.yaml 
3   kubectl apply -f docs/user-guide/bad-nginx-deployment.yaml 

変更内容も記録されます。

$ kubectl rollout history deployment/nginx-deployment --revision=2 
deployments "nginx-deployment" revision 2 
Labels:  app=nginx,pod-template-hash=1564180365 
Annotations: kubernetes.io/change-cause=kubectl apply -f docs/user-guide/new-nginx-deployment.yaml 
Image(s): nginx:1.9.1 
No volumes. 
2

ダッシュボード(ウェブUI)が巨大に多くのリソース(のようなDeploymentsDaemonSets、など)を管理サポートするために再設計されており、現在のダッシュボードはDeploymentsについて多くを許可していません。

ダッシュボードでの配置の管理は、kubernetes 1.3ですぐにサポートされます(Feature request: handle Deploymentsを参照)。

6

release 1.1とすると、Dashboardはデプロイメントをサポートします。 k8の1.3リリースを待つことなく、ダッシュボードを導入または更新できます。たとえば、official YAMLを使用することができます。これは、今日、デプロイメントを使用するように変更しました。

一般的には、ロールオーバーのアップデート、バージョン管理/監査、canaray/green-blueのデプロイメント、ロールバック(ロールバック、ロールバック、ロールバックなど)のように、RCを介したデプロイメントを使用することをお勧めします(GoogleやKubernetesの貢献者も同じです)。 、など)。

+1

btw、私は最近、Deploymentsとその理由についてブログ記事を書いています:https://blog.giantswarm.io/understanding-basic-kubernetes-concepts-using-deployments-manage-services-declaratively/ – puja

+0

Rancherはこのコメントとして展開を表示します。 –

2

私の経験から、必要な機能のすべてが提供されているわけではありません。または、多分、私は間違った方法でそれらを使用しています。

ノードサーバーを再起動する必要がある場合 - 展開によって開始されたそのサーバーで実行されているすべてのポッドは失敗します。そして私はこれを避ける方法を見つけることができません。

ただし、

Thinkソリューションはレプリケーションコントローラです。少なくとも説明の中では、そのような場合を処理すると書かれています。

主な展開の利点は、私が見るように、あなたのアプリケーションのバージョンを絶えず変更する必要がある場合です。

両方の方法が良いですが、さまざまな理由があります。

+0

このケースでは、レプリケーションコントローラとデプロイメントの間に違いはありません(すべてのデプロイメントはレプリカセットの周りのラッパーにすぎません)。あなたがしたいのは、[drain](http://kubernetes.io/docs/user-guide/kubectl/kubectl_drain/)ノードを再起動する前です。それが再び動作すると、[uncordon](http://kubernetes.io/docs/user-guide/kubectl/kubectl_uncordon/)でポッドを再び受け入れることができます。 –

+0

ノードが予期せず失敗した場合の対処方法私は意味する - 私はそれを排水する機会がない場合は? –

関連する問題