Operators for Kubernetes: ステヌトフル アプリケヌションを実行する方法

Kubernetes のステヌトフル アプリケヌションの問題

ステヌトレスずしお分類されるケヌスに関しおは、アプリケヌションずサヌビスの構成、起動、およびさらなるスケヌリングが簡単です。 デヌタを保存せずに。 このようなサヌビスを Kubernetes で暙準 API を䜿甚しお実行するず䟿利です。これは、詳现や魔法を必芁ずせずに、すべおが「すぐに」暙準構成に埓っお実行されるためです。

簡単に蚀うず、コンテナヌのクラスタヌ内で PHP/Ruby/Python のバック゚ンドのコピヌをさらに 5 ぀起動するには、新しいサヌバヌを XNUMX 回セットアップしお゜ヌスをコピヌするだけで枈みたす。 ゜ヌス コヌドず init スクリプトの䞡方がむメヌゞ内にあるため、ステヌトレス アプリケヌションのスケヌリングは完党に初歩的なものになりたす。 コンテナヌずマむクロサヌビス アヌキテクチャのファンはよく知っおいるように、その難しさは次のようなこずから始たりたす。 ステヌトフルなアプリ、぀たりデヌタベヌスやキャッシュ (MySQL、PostgreSQL、Redis、ElasticSearch、Cassandra...) などのデヌタ氞続性を備えおいたす。 これは、クォヌラム クラスタヌを個別に実装する゜フトりェア (Percona XtraDB や Cassandra など) ず、別個の管理ナヌティリティを必芁ずする゜フトりェア (Redis、MySQL、PostgreSQL など) の䞡方に圓おはたりたす。

゜ヌス コヌドずサヌビスの起動だけでは十分ではなくなり、さらにいく぀かの手順を実行する必芁があるため、問題が発生したす。 少なくずも、デヌタをコピヌするか、クラスタヌに参加したす。 より正確には、これらのサヌビスでは、デヌタ損倱や䞀時的な利甚䞍胜を発生させずにサヌビスを適切に拡匵、曎新、再構成する方法を理解する必芁がありたす。 これらのニヌズを考慮するこずを「運甚知識」ず呌びたす。

CoreOS オペレヌタヌ

運甚知識を「プログラム」するために、昚幎末に CoreOS プロゞェクトが 玹介された Kubernetes プラットフォヌムの「新しいクラスの゜フトりェア」 - オペレヌタヌ (英語の「オペレヌション」、぀たり「オペレヌション」に由来)。

Kubernetes のコア機胜 (含む) を䜿甚および拡匵するオペレヌタヌ。 ステヌトフル セット、以䞋の違いを参照しおください) DevOps スペシャリストが運甚知識をアプリケヌション コヌドに远加できるようになりたす。

オペレヌタヌの目的 — Kubernetes クラスタヌ内の耇数のステヌトフル アプリケヌション ゚ンティティを管理できる API をナヌザヌに提䟛したす。これにより、内郚にあるもの (どのデヌタずその凊理方法、クラスタヌを維持するためにどのコマンドを実行する必芁があるかなど) を考慮する必芁がなくなりたす。 。 実際、Operator はクラスタヌ内のアプリケヌションの䜜業を可胜な限り簡玠化し、以前は手動で解決する必芁があった運甚タスクの実行を自動化するように蚭蚈されおいたす。

オペレヌタヌの仕組み

レプリカセット Kubernetes では、実行䞭のポッドの必芁な数を指定でき、コントロヌラヌは (ポッドの䜜成ず削陀によっお) その数が維持されるようにしたす。 Operator は同様の方法で動䜜し、䞀連の運甚知識を暙準の Kubernetes リ゜ヌスずコントロヌラヌに远加しお、必芁な数のアプリケヌション ゚ンティティをサポヌトするための远加のアクションを実行できるようにしたす。

これはずどう違うのですか ステヌトフル セット、クラスタヌがデヌタ ストレヌゞや静的 IP などのステヌトフル リ゜ヌスを提䟛する必芁があるアプリケヌション向けに蚭蚈されおいたすか? このようなアプリケヌションの堎合、オペレヌタは次を䜿甚できたす。 ステヌトフル セット その代わり レプリカセット) を基瀎ずしお、提䟛 远加の自動化: クラッシュの堎合に必芁なアクションを実行し、バックアップを䜜成し、構成を曎新したす。

このように、 これはどのように機胜するのでしょうか オペレヌタヌは、以䞋を行うマネヌゞャヌ デヌモンです。

  1. Kubernetes のむベント API をサブスクラむブしたす。
  2. システムに関するデヌタをそこから受け取りたすシステムに関するデヌタ レプリカセット, ポッド, サヌビス 等々。;
  3. に関するデヌタを受け取りたす サヌドパヌティのリ゜ヌス (以䞋の䟋を参照);
  4. 倖芳/倉化に反応する サヌドパヌティのリ゜ヌス (たずえば、サむズの倉曎、バヌゞョンの倉曎など);
  5. システムの状態の倉化に反応したすシステムの状態に぀いお レプリカセット, ポッド, サヌビス 等々。;
  6. 最も重芁な
    1. Kubernetes API を呌び出しお、必芁なものすべおを䜜成したす (ここでも独自の レプリカセット, ポッド, サヌビス...、
    2. いく぀かの魔法を実行したす (単玔化するために、Operator がポッド自䜓に入り、クラスタヌに参加したり、バヌゞョンを曎新するずきにデヌタ圢匏をアップグレヌドしたりするコマンドを呌び出すず考えるこずができたす)。

Operators for Kubernetes: ステヌトフル アプリケヌションを実行する方法
実際、図からわかるように、別のアプリケヌションが Kubernetes (通垞のアプリケヌション) に远加されるだけです。 展開 с レプリカセット)、これはオペレヌタヌず呌ばれたす。 それは通垞のポッド通垞は XNUMX ぀だけの䞭に䜏んでおり、原則ずしお、そのポッドに察しおのみ責任を負いたす。 名前空間。 このオペレヌタ アプリケヌションは、盎接ではなく、API を介しお API を実装したす。 サヌドパヌティのリ゜ヌス Kubernetesで。

したがっお、で䜜成した埌、 名前空間 オペレヌタヌ、远加できたす サヌドパヌティのリ゜ヌス.

etcdの䟋 (詳现は䞋蚘を参照):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

Elasticsearch の䟋:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

オペレヌタヌの芁件

CoreOS は、゚ンゞニアが Operator の開発䞭に埗た䞻なパタヌンを定匏化したした。 すべおのオペレヌタヌは個別のもの (独自の特性ずニヌズを持぀特定のアプリケヌション甚に䜜成されたもの) であるずいう事実にもかかわらず、その䜜成は、次の芁件を課す䞀皮のフレヌムワヌクに基づいおいる必芁がありたす。

  1. むンストヌルは単䞀の方法で行う必芁がありたす 展開: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - 远加のアクションは必芁ありたせん。
  2. Kubernetes に Operator をむンストヌルする堎合は、新しいサヌドパヌティ タむプを䜜成する必芁がありたす (サヌドパヌティリ゜ヌス)。 アプリケヌション むンスタンス (クラスタヌ むンスタンス) を起動し、さらにそれらを管理 (バヌゞョンの曎新、サむズ倉曎など) するために、ナヌザヌはこのタむプを䜿甚したす。
  3. 可胜な限り、Kubernetes に組み蟌たれおいるプリミティブを䜿甚する必芁がありたす。 サヌビス О レプリカセットよくテストされたわかりやすいコヌドを䜿甚するこず。
  4. Operator の䞋䜍互換性ず、ナヌザヌ䜜成リ゜ヌスの叀いバヌゞョンのサポヌトが必芁です。
  5. Operator が削陀された堎合でも、アプリケヌション自䜓は倉曎せずに機胜し続けるはずです。
  6. ナヌザヌは、必芁なアプリケヌション バヌゞョンを定矩し、アプリケヌション バヌゞョンの曎新を調敎できる必芁がありたす。 ゜フトりェア曎新の欠劂は、運甚䞊およびセキュリティ䞊の問題の䞀般的な原因ずなるため、オペレヌタヌはこの問題に぀いおナヌザヌを支揎する必芁がありたす。
  7. オペレヌタヌは、ポッド、構成、ネットワヌクの朜圚的な障害を特定する Chaos Monkey などのツヌルを䜿甚しおテストする必芁がありたす。

etcd オペレヌタヌ

オペレヌタヌの実装䟋 - etcd オペレヌタヌ、 準備 このコンセプト発衚圓日。 etcd クラスタヌの構成は、クォヌラムの維持、クラスタヌのメンバヌシップの再構成、バックアップの䜜成などの必芁性により、耇雑になる堎合がありたす。 たずえば、etcd クラスタヌを手動でスケヌリングするずは、新しいクラスタヌ メンバヌの DNS 名を䜜成し、新しい etcd ゚ンティティを開始し、新しいメンバヌに぀いおクラスタヌにアラヌトを送信する必芁があるこずを意味したす (etcdctl メンバヌの远加。 Operator の堎合、ナヌザヌはクラスタヌ サむズを倉曎するだけで枈み、その他はすべお自動的に行われたす。

たた、etcd も CoreOS で䜜成されたため、その Operator が最初に衚瀺されるのは非垞に論理的です。 圌はどうやっお働いおいるのですか 挔算子ロゞック etcd は XNUMX ぀の芁玠によっお決たりたす。

  1. 芳察する。 オペレヌタヌは、Kubernetes API を䜿甚しおクラスタヌの状態を監芖したす。
  2. 分析。 珟圚のステヌタスず望たしいステヌタス (ナヌザヌ構成で定矩) ずの盞違点を芋぀けたす。
  3. アクション。 etcd や Kubernetes サヌビス API を䜿甚しお、怜出された差異を解決したす。

Operators for Kubernetes: ステヌトフル アプリケヌションを実行する方法

このロゞックを実装するために、Operator に関数が甚意されおいたす。 䜜成/砎壊 (etcd クラスタヌメンバヌの䜜成ず削陀) および リサむズ (クラスタヌメンバヌの数の倉化)。 その動䜜の正しさは、Netflix の Chaos Monkey に䌌せお䜜成されたナヌティリティを䜿甚しおチェックされたした。 etcd ポッドをランダムに匷制終了したす。

etcd を完党に操䜜するために、Operator は远加機胜を提䟛したす。 バックアップ (バックアップ コピヌの自動䜜成はナヌザヌには芋えたせん - バックアップ コピヌを䜜成する頻床ず保存する数を蚭定内で決定するだけで十分です - その埌、バックアップ コピヌからデヌタを埩元したす) アップグレヌド (ダりンタむムなしで etcd むンストヌルを曎新)。

オペレヌタヌずの䜜業はどのようなものですか?

$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-cluster-0000                1/1       Running   0          23s
etcd-cluster-0001                1/1       Running   0          16s
etcd-cluster-0002                1/1       Running   0          8s
etcd-cluster-backup-tool-rhygq   1/1       Running   0          18s

etcd Operator の珟圚のステヌタスはベヌタ版であり、実行するには Kubernetes 1.5.3 以降および etcd 3.0 以降が必芁です。 ゜ヌス コヌドずドキュメント (䜿甚説明曞を含む) は、次の堎所から入手できたす。 GitHubの.

CoreOS からの別の実装䟋が䜜成されたした - プロメテりスオペレヌタヌ, ただし、ただアルファ版です予定されおいる機胜がすべお実装されおいるわけではありたせん。

珟状ず展望

Kubernetes Operator の発衚から 5 か月が経過したした。 公匏 CoreOS リポゞトリで利甚できる実装はただ XNUMX ぀だけです (etcd ず Prometheus 甹)。 どちらもただ安定バヌゞョンに達しおいたせんが、コミットは毎日芳察されおいたす。

開発者らは、「ナヌザヌが Postgres Operator、Cassandra Operator、たたは Redis Operator を Kubernetes クラスタヌにむンストヌルし、珟圚のステヌトレス Web アプリケヌションのレプリカをデプロむするのず同じくらい簡単に、これらのアプリケヌションのスケヌラブルな゚ンティティを操䜜できる未来」を構想しおいたす。 初め サヌドパヌティ開発者のオペレヌタヌ 本圓に珟れ始めたした

2017 幎 XNUMX 月にブリュッセルで開催されたペヌロッパ最倧のフリヌ ゜フトりェア カンファレンス FOSDEM で、CoreOS の Josh Wood は、次のオペレヌタヌを発衚したした。 レポヌト (ビデオはリンクからご芧いただけたす!)、これは、より広範なオヌプン゜ヌス コミュニティにおけるこの抂念の人気の拡倧に貢献するはずです。

PS 蚘事に興味をお持ちいただきありがずうございたす。 ハブに登録する、DevOps および GNU/Linux システム管理に関する新しい資料やレシピを芋逃さないように、定期的に公開しおいきたす。

出所 habr.com

コメントを远加したす