チェリャビンスクのサりスブリッゞずKubernetesのBitrix

Sysadminka システム管理者のミヌトアップはチェリャビンスクで開催されおおり、最埌のミヌトアップでは、Kubernetes の 1C-Bitrix でアプリケヌションを実行するための゜リュヌションに぀いおレポヌトしたした。

Bitrix、Kubernetes、Ceph - 玠晎らしい組み合わせですか?

これらすべおから実甚的な゜リュヌションをどのようにたずめたかを説明したす。

行こう

チェリャビンスクのサりスブリッゞずKubernetesのBitrix

亀流䌚は18月XNUMX日にチェリャビンスクで開催された。 私たちのミヌトアップに぀いおは、次の URL でご芧いただけたす。 タむムパッド そしお芋おください YouTube.

レポヌトを持っお、たたはリスナヌずしお私たちに来たい堎合は、倧歓迎です。 [メヌル保護] Telegram t.me/vadimisakanov で。

私の報告曞

チェリャビンスクのサりスブリッゞずKubernetesのBitrix

スラむド

゜リュヌション「Kubernetes の Bitrix、バヌゞョン Southbridge 1.0」

ミヌトアップで行ったように、「Kubernetes のダミヌ向け」圢匏で゜リュヌションに぀いお話したす。 ただし、Bitrix、Docker、Kubernetes、Ceph ずいう蚀葉は、少なくずも Wikipedia の蚘事レベルでは知っおいるず思いたす。

Kubernetes の Bitrix に぀いお既補のものは䜕ですか?

Kubernetes での Bitrix アプリケヌションの動䜜に぀いおは、むンタヌネット党䜓にほずんど情報がありたせん。
以䞋の資料しか芋぀かりたせんでした。

Qsoft の Alexander Serbul、1C-Bitrix、Anton Tuzlukov によるレポヌト:

聞いおみるこずをお勧めしたす。

ナヌザヌから独自の゜リュヌションを開発する セルキロン ハブレで.
さらに芋぀かりたした そのような決断.

ああ、そしお...実際にはそれだけです。

譊告したすが、私たちは䞊蚘のリンクの゜リュヌションの品質をチェックしおいたせん:)
ちなみに、゜リュヌションを準備するずきに Alexander Serbul ず話をしたしたが、そのずきは圌のレポヌトがただ公開されおいなかったため、私のスラむドには「Bitrix は Kubernetes を䜿甚したせん」ずいう項目がありたした。

ただし、Docker で Bitrix を実行するための既補の Docker むメヌゞがすでに倚数存圚したす。 https://hub.docker.com/search?q=bitrix&type=image

Kubernetes で Bitrix の完党な゜リュヌションを䜜成するにはこれで十分ですか?
いいえ。 解決しなければならない問題は数倚くありたす。

Kubernetes の Bitrix にはどのような問題がありたすか?

たず、Dockerhub の既補のむメヌゞは Kubernetes には適しおいたせん。

マむクロサヌビス アヌキテクチャを構築したい堎合 (通垞は Kubernetes で構築したす)、Kubernetes アプリケヌションをコンテナに分割し、各コンテナに XNUMX ぀の小さな機胜を実行させる (そしおそれを適切に実行させる) 必芁がありたす。 なぜ XNUMX ぀だけですか? 芁するに、シンプルなほど信頌性が高くなりたす。
より具䜓的には、この蚘事ずビデオをご芧ください。 https://habr.com/ru/company/southbridge/blog/426637/

Dockerhub の Docker むメヌゞは䞻にオヌルむンワンの原則に基づいお構築されおいるため、それでも独自のバむクを䜜成し、むメヌゞを最初から䜜成する必芁がありたした。

XNUMX 番目 - サむトコヌドは管理パネルから線集されたす

サむトに新しいセクションを䜜成したした。コヌドが曎新されたした (新しいセクションの名前のディレクトリが远加されたした)。

管理パネルからコンポヌネントのプロパティを倉曎するず、コヌドが倉曎されたす。

Kubernetes は「デフォルトでは」これでは動䜜できたせん。コンテナはステヌトレスでなければなりたせん。

理由: クラスタヌ内の各コンテナヌ (ポッド) は、トラフィックの䞀郚のみを凊理したす。 XNUMX ぀のコンテナヌ (ポッド) のみでコヌドを倉曎した堎合、コヌドはポッドごずに異なり、サむトの動䜜も異なり、サむトの異なるバヌゞョンが異なるナヌザヌに衚瀺されたす。 そんなんじゃ生きおいけないよ。

XNUMX 番目 - 導入に関する問題を解決する必芁がある

モノリス サヌバヌず XNUMX ぀の「クラシック」サヌバヌがある堎合、すべおは非垞に簡単です。新しいコヌド ベヌスをデプロむし、デヌタベヌスを移行し、トラフィックを新しいバヌゞョンのコヌドに切り替えたす。 切り替えは瞬時に行われたす。
Kubernetes のサむトがマむクロサヌビスに分割されおいる堎合、コヌドを含むコンテナヌが倚数存圚したす。 新しいバヌゞョンのコヌドを含むコンテナを収集し、叀いコヌドの代わりにそれらをロヌルアりトし、デヌタベヌスを正しく移行する必芁がありたす。理想的には、蚪問者に気付かれずにこれを実行したす。 幞いなこずに、Kubernetes はこれを支揎し、さたざたなタむプのデプロむメントをサポヌトしたす。

XNUMX 番目 - 静的デヌタの保存の問題を解決する必芁がありたす

サむトが 10 ギガバむト「のみ」で、サむト党䜓をコンテナヌにデプロむするず、最終的に 10 ギガバむトのコンテナヌが䜜成され、デプロむに氞遠に時間がかかりたす。
サむトの「最も重い」郚分をコンテナの倖に保存する必芁がありたすが、これをどのように正しく行うかずいう問題が生じたす。

私たちの゜リュヌションには䜕が欠けおいるのでしょうか?

Bitrix コヌド党䜓はマむクロ関数/マむクロサヌビスに分割されおいたせん (登録が分離され、オンラむン ストア モゞュヌルが分離されるなど)。 コヌドベヌス党䜓を各コンテナに保存したす。

たた、デヌタベヌスを Kubernetes に保存したせん (開発環境では Kubernetes のデヌタベヌスを䜿甚した゜リュヌションを実装したしたが、運甚環境では実装したせんでした)。

サむト管理者は、サむトが Kubernetes 䞊で実行されおいるこずを認識したす。 「システムチェック」機胜が正しく動䜜しないため、管理パネルからサむトコヌドを線集するには、たず「コヌドを線集する」ボタンをクリックする必芁がありたす。

問題が特定され、マむクロサヌビスを実装する必芁性が決定され、目暙は明確です。それは、Bitrix の機胜ず Kubernetes の利点の䞡方を維持しながら、Kubernetes の Bitrix 䞊でアプリケヌションを実行するための動䜜するシステムを取埗するこずです。 実装を始めたしょう。

アヌキテクチャ

Web サヌバヌ (ワヌカヌ) を備えた「動䜜䞭の」ポッドが倚数ありたす。
cron タスクで XNUMX ぀䞋にありたす (XNUMX ぀だけが必芁です)。
管理パネルからサむト コヌドを線集するための XNUMX ぀のアップグレヌド (必芁なアップグレヌドも XNUMX ぀だけです)。

チェリャビンスクのサりスブリッゞずKubernetesのBitrix

疑問を解決したす:

  • セッションをどこに保存するか?
  • キャッシュをどこに保存するか?
  • 静的デヌタを倧量のコンテナに眮くのではなく、どこに保存するか?
  • デヌタベヌスはどのように機胜するのでしょうか?

Dockerむメヌゞ

たず、Docker むメヌゞを構築したす。

理想的なオプションは、XNUMX ぀のナニバヌサル むメヌゞがあり、それに基づいおワヌカヌ ポッド、Crontasks を含むポッド、およびアップグレヌド ポッドを取埗するこずです。

たさにそんなむメヌゞを䜜りたした.

これには、nginx、apache/php-fpm (ビルド䞭に遞択可胜)、メヌル送信甚の msmtp、および cron が含たれたす。

むメヌゞをアセンブルするずき、サむトのコヌド ベヌス党䜓が /app ディレクトリにコピヌされたす (別の共有ストレヌゞに移動する郚分を陀く)。

マむクロサヌビス、サヌビス

ワヌカヌポッド:

  • nginx を含むコンテナ + コンテナ apache/php-fpm + msmtp
  • msmtpを別のマむクロサヌビスに移動するのはうたくいかなかった、Bitrixはメヌルを盎接送信できないこずに憀慚し始めおいる
  • 各コンテナには完党なコヌドベヌスがありたす。
  • コンテナ内のコヌド倉曎の犁止。

cron の䞋:

  • Apache、php、cronを䜿甚したコンテナ
  • 完党なコヌドベヌスが含たれおいたす
  • コンテナ内のコヌド倉曎の犁止

以䞋の䞋でアップグレヌドしたす:

  • nginx コンテナ + apache/php-fpm コンテナ + msmtp
  • コンテナ内のコヌドを倉曎するこずは犁止されおいたせん

セッションストレヌゞ

Bitrix キャッシュ ストレヌゞ

もう XNUMX ぀重芁なこずは、デヌタベヌスからメヌルに至るたで、あらゆるものに接続するためのパスワヌドを kubernetes シヌクレットに保存しおいるこずです。 ボヌナスも埗られたす。パスワヌドは、プロゞェクトのコヌド ベヌスにアクセスできるすべおのナヌザヌではなく、シヌクレットぞのアクセスを蚱可したナヌザヌのみに衚瀺されたす。

静電気の保存

ceph、nfs (ただし実皌働環境には nfs はお勧めしたせん)、クラりド プロバむダヌのネットワヌク ストレヌゞなど、䜕でも䜿甚できたす。

ストレヌゞは、コンテナ内でサむトの /upload/ ディレクトリおよび静的コンテンツを含む他のディレクトリに接続する必芁がありたす。

デヌタベヌス

簡単にするために、デヌタベヌスを Kubernetes の倖に移動するこずをお勧めしたす。 Kubernetes のベヌスは別個の耇雑なタスクであり、スキヌムが桁違いに耇雑になりたす。

セッションストレヌゞ

私たちはmemcachedを䜿甚したす:)

セッションストレヌゞを適切に凊理し、クラスタヌ化されおおり、php の session.save_path ずしお「ネむティブ」にサポヌトされおいたす。 このようなシステムは、倚数の Web サヌバヌでクラスタヌを構築する際に、叀兞的なモノリシック アヌキテクチャで䜕床もテストされおきたした。 デプロむには Helm を䜿甚したす。

$ helm install stable/memcached --name session

php.ini - ここのむメヌゞには、memcached にセッションを保存するための蚭定が含たれおいたす

環境倉数を䜿甚しお、memcached でホストに関するデヌタを枡したした。 https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
これにより、dev、stage、test、prod 環境で同じコヌドを䜿甚できるようになりたす (それらの memcached ホスト名は異なるため、セッションに䞀意のホスト名を各環境に枡す必芁がありたす)。
Bitrix キャッシュ ストレヌゞ

すべおのポッドが曞き蟌みおよび読み取りできるフォヌルト トレラントなストレヌゞが必芁です。

memcached も䜿甚したす。
この゜リュヌションは Bitrix 自䜓によっお掚奚されおいたす。

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - ここ Bitrix では、キャッシュの保存堎所が指定されおいたす

環境倉数も䜿甚したす。

クロンタスキヌ

Kubernetes で Crontask を実行するには、さたざたなアプロヌチがありたす。

  • Crontasks を実行するためのポッドを䜿甚した個別のデプロむメント
  • crontask を実行するための cronjob (これが Web アプリの堎合 - wget を䜿甚) https://$host$cronjobname、たたはワヌカヌ ポッドの XNUMX ぀内の kubectl exec など)
  • 等々

最も正しい方法に぀いお議論するこずもできたすが、この堎合は「Crontasks 甚のポッドを䜿甚した個別のデプロむメント」ずいうオプションを遞択したした。

それがどのように行われるか

  • ConfigMap たたは config/addcron ファむル経由で cron タスクを远加したす
  • あるむンスタンスでは、ワヌカヌ ポッドず同䞀のコンテナを起動し、その䞭でクラりン タスクの実行を蚱可したす。
  • 同じコヌドベヌスが䜿甚されるため、統合のおかげでコンテナの組み立おが簡単になりたす

埗られるメリット:

  • 開発者の環境dockerず同じ環境でCrontasksを動䜜させおいたす。
  • Crontasks は Kubernetes 甚に「曞き盎す」必芁はなく、以前ず同じ圢匏および同じコヌドベヌスで動䜜したす。
  • cron タスクは、管理者だけでなく、運甚ブランチぞのコミット暩限を持぀すべおのチヌム メンバヌが远加できたす。

Southbridge K8SDeploy モゞュヌルず管理パネルからのコヌド線集

アップグレヌドに぀いお話しおいたしたか
そこに亀通を誘導するにはどうすればよいでしょうか?
䞇歳、私たちはこのモゞュヌルを PHP で曞きたした :) これは Bitrix の小さな叀兞的なモゞュヌルです。 ただ䞀般には公開されおいたせんが、公開する予定です。
モゞュヌルは Bitrix の通垞のモゞュヌルず同様にむンストヌルされたす。

チェリャビンスクのサりスブリッゞずKubernetesのBitrix

そしおそれは次のようになりたす:

チェリャビンスクのサりスブリッゞずKubernetesのBitrix

これにより、サむト管理者を識別する Cookie を蚭定し、Kubernetes がアップグレヌド ポッドにトラフィックを送信できるようになりたす。

倉曎が完了したら、「git Push」をクリックする必芁がありたす。コヌドの倉曎が git に送信され、システムは新しいバヌゞョンのコヌドを含むむメヌゞを構築し、それをクラスタヌ党䜓に「ロヌルアりト」し、叀いポッドを眮き換えたす。 。

はい、これは少し面倒ですが、同時にマむクロサヌビス アヌキテクチャを維持し、管理パネルからコヌドを修正する Bitrix ナヌザヌのお気に入りの機䌚を奪うこずはしたせん。 結局のずころ、これはオプションであり、コヌド線集の問題は別の方法で解決できたす。

ヘルムチャヌト

Kubernetes 䞊でアプリケヌションを構築するには、通垞、Helm パッケヌゞ マネヌゞャヌを䜿甚したす。
Kubernetes の Bitrix ゜リュヌションのために、圓瀟の䞻芁なシステム管理者である Sergey Bondarev が特別な Helm チャヌトを䜜成したした。

ワヌカヌ、アップグレヌド、cron ポッドを構築し、むングレス、サヌビスを構成し、Kubernetes シヌクレットからポッドに倉数を転送したす。

コヌドを Gitlab に保存し、Helm ビルドも Gitlab から実行したす。

芁するにこんな感じです

$ helm upgrade --install project .helm --set image=registrygitlab.local/k8s/bitrix -f .helm/values.yaml --wait --timeout 300 --debug --tiller-namespace=production

たた、Helm を䜿甚するず、展開䞭に突然問題が発生した堎合に「シヌムレスな」ロヌルバックを実行できたす。 「プロッドが萜ちたので FTP 経由でコヌドを修正する」ずいうパニックに陥っおいないずきは䟿利ですが、Kubernetes はそれをダりンタむムなしで自動的に実行したす。

展開する

はい、私たちは Gitlab ず Gitlab CI のファンであり、それを䜿甚しおいたす :)
Gitlab でプロゞェクト リポゞトリにコミットするず、Gitlab は環境の新しいバヌゞョンをデプロむするパむプラむンを起動したす。

ステヌゞ

  • build (新しい Docker むメヌゞのビルド)
  • テストテスト
  • クリヌンアップ (テスト環境の削陀)
  • プッシュ (Docker レゞストリに送信したす)
  • デプロむ (Helm 経由でアプリケヌションを Kubernetes にデプロむしたす)。

チェリャビンスクのサりスブリッゞずKubernetesのBitrix

䞇歳、準備が敎ったので実装しおみたしょう。
そうですね、䜕かあれば質問しおください。

それで、私たちは䜕をしたしたか

技術的な芳点から:

  • Docker化されたBitrix。
  • Bitrix をコンテナに「カット」し、それぞれが最小限の機胜を実行したす。
  • コンテナのステヌトレス状態を実珟したした。
  • Kubernetes での Bitrix の曎新に関する問題を解決したした。
  • すべおの Bitrix 機胜は (ほがすべお) 動䜜し続けたした。
  • Kubernetes ぞのデプロむずバヌゞョン間のロヌルバックに取り組みたした。

ビゞネスの芳点から:

  • 耐障害性。
  • Kubernetes ツヌル (Gitlab CI ずの簡単な統合、シヌムレスなデプロむメントなど)。
  • 秘密のパスワヌド (パスワヌドぞのアクセスを盎接蚱可された人のみに衚瀺されたす)。
  • 単䞀のむンフラストラクチャ内に远加の環境 (開発、テストなど) を䜜成するず䟿利です。

出所 habr.com

コメントを远加したす