レプリケーション コントローラーとレプリカ セットを使用してポッドを管理する
これまでに学習した基本的な使用方法の一部はPod
直接操作されますPod
。オンライン サービスがある場合Pod
、遭遇する可能性のあるいくつかのシナリオについて考えてみましょう。
- ある運営活動が大成功し、Webサイトのアクセス数が一気に増加
- 現在実行中の
Pod
ノードに障害が発生したため、Pod
サービスを正常に提供できません
前者の場合は、一般的なイベントの前に訪問者数を大まかに計算し、事前にいくつかの訪問者を開始し、イベント終了後に超過分を殺すことを考えPod
ますPod
。ちょっと面倒ですが、それでも対処できるはずです。
2 番目のケースでは、ある夜にサービスがダウンしているという大量のアラームを受信し、その後起きてコンピュータの電源を入れ、別のノードで新しいコンピュータを再起動すると、問題は非常にうまく解決されますPod
。
これらの問題をすべて手動で解決したら、焼き畑の時代に戻ったように見えますよね? 管理に役立つツールがあれば、そうでない場合は自動的に追加されPod
ます上記の問題を手動で解決する必要がないように、Pod
適切Pod
なノードで再起動してください。Pod
幸いなことに、Kubernetes
このようなリソース オブジェクトが提供されています。
- レプリケーション コントローラー: デプロイとアップグレードに使用されます
Pod
- レプリカ セット: 次世代
Replication Controller
- 導入: より便利な管理
Pod
とReplica Set
レプリケーションコントローラー(RC)
Replication Controller
この略語はシステムの中核となる概念の 1 つでRC
あり、簡単に言うと、いつでも実行できることが保証されるコピー数を意味しRC
ます。実際の数が指定した数より大きい場合は、冗長なものを終了します。実際の数が指定した数より小さい場合は、新しいものを開始します。失敗した場合、削除された場合、またはハングアップした場合は、自動的に新しいものを作成して、コピー数を確保するため、たとえ 1 つしかなくても、それを管理するために使用する必要があります。Kubernetes
RC
Pod
Pod
Pod
Pod
Pod
RC
Pod
Pod
RC
Pod
考えてみましょう。今上記の問題が発生した場合、完全に自動化できない最初の問題を除いて、残りについては心配する必要はありません。実行中のノードがハングアップして検出に失敗した場合Pod
はRC
、Pod
1 つのノードを再起動するPod
だけ、新しいノードを手動で作成する必要はありませんPod
。最初のケースであれば、Pod
イベント開始前に 10 部を割り当て、イベント終了後に部数を 2 に変更します。これは、手動で開始して手動で閉じるよりもはるかに優れています。後でやらせてくださいリソースの使用状況に応じて自動的に拡大および縮小できる別のリソース オブジェクトを導入することHPA
で、将来そのような状況でも実際にスリープ状態に入ることができるようになります。
RC
先ほど使用したNginx
ものを管理するために使用してみましょうPod
。YAML
ファイルは次のとおりです。
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-demo
labels:
name: rc
spec:
replicas: 3
selector:
name: rc
template:
metadata:
labels:
name: rc
spec:
containers:
- name: nginx-demo
image: nginx
ports:
- containerPort: 80
上記のYAML
ファイルは、以前のPod
形式に関連しています。
- 親切:
ReplicationController
- spec.replicas:
Pod
レプリカの数を指定します。デフォルトは 1 です。 - spec.selector:
RC
この属性を使用して、制御対象をフィルタリングします。Pod
- spec.template: これは以前に定義したモジュールですが、追加する必要
Pod
はありませんapiVersion
kind
- spec.template.metadata.labels:現在のものを制御できるように、ここに
Pod
あるものは同じでlabels
ある必要があることに注意してください。spec.selector
RC
Pod
このYAML
ファイルの意味は、リソース オブジェクトを定義することですRC
。その名前は ですrc-demo
。常に 3 つが実行されることが保証されておりPod
、Pod
ミラーのミラーはnginx
ミラーです。
spec.selector
これら 2 つのフィールドは同じである必要があることに注意してください。そうでない場合、作成は失敗します。もちろん、デフォルトでテンプレート内のフィールドと同じになるように、フィールドをspec.template.metadata.labels
省略することもできます。したがって、不要な間違いを避けるためには、書かない方がよいでしょう。spec.selector
Pod
metadata.labels
次に、上記のオブジェクトを作成しましょうRC
(rc-demo.yaml として保存)。
$ kubectl create -f rc-demo.yaml
表示RC
:
$ kubectl get rc
特定の情報を表示します。
$ kubectl describe rc rc-demo
次に、次のようにしてコピー数を 2 にRC
変更します。Pod
$ kubectl apply -f rc-demo.yaml
また
$ kubectl edit rc rc-demo
また、ローリング アップグレードRC
にも使用。たとえば、ミラー アドレスを次のように変更しますnginx:1.7.9
。
$ kubectl rolling-update rc-demo --image=nginx:1.7.9
ただし、複数のコンテナがある場合は、ファイルを変更Pod
して変更する必要があります。YAML
$ kubectl rolling-update rc-demo -f rc-demo.yaml
アップグレードの完了後に新しい問題が発生し、ワンクリックで以前のバージョンにロールバックしたい場合は、RC
同じ方法を使用してミラー アドレスを以前のアドレスに置き換えてから、アップグレードを再度ロールすることしかできません。
レプリケーションセット(RS)
Replication Set
の略語はRS
、の急速な発展に伴い、公式は代わりにと をKubernetes
使用することを推奨しています。実際、との機能は基本的に同じです。唯一の違いは、等価ベース(env=dev またはenvironment!=qa)のみをサポートすることです。 ) ですが、コレクション ベース(バージョン (v1.0、v2.0)) もサポートされており、複雑な運用および保守管理に非常に便利です。RS
Deployment
RC
RS
RC
RC
selector
RS
selector
kubectl
コマンドライン ツールで説明されているコマンドのほとんどは、リソース オブジェクトRC
にも適用されますRS
。ただし、これを単独で使用することはほとんどありませんRS
。Deployment
ユーザーがアップグレード機能をカスタマイズする必要がある場合や、まったくアップグレードする必要がない場合を除き、主にこの上位レベルのリソース オブジェクトによって使用されます。一般に、直接使用するのではなく、Pod
これを使用することをお勧めしDeployment
ますReplica Set
。
RC
最後に、 /の特徴と機能をいくつかまとめてみましょうRS
。
- ほとんどの場合、
RC
実装を定義することでPod
コピーの作成と数を制御できます。 RC
完全なPod
定義モジュールを含めます (apiversion
とを除くkind
)RC
コピーの制御をlabel selector
実現する機構Pod
RC
内部のPod
部数を変更することでPod
拡大・縮小機能を実現できますRC
内のPod
テンプレートでイメージのバージョンを変更することでPod
、ローリングアップグレード機能を実現できます(ただし、ワンクリックロールバックはサポートされておらず、同様にイメージアドレスの変更が必要です)
ここでの最初の紹介を管理するには、RC
または を使用します。RS
Pod