すべての問題の解決策としてのKubernetes! 「あるべきかどうか」-それが問題です!
免責事項
この記事の宣伝にもかかわらず、おそらく私はゴム製のアヒルとの会話として、これを主に自分自身のために書いています。 「ヒップスター」テクノロジーを使用して2年以上航海した後、私は一歩離れて、それが次のプロジェクトにどれだけ妥当で適切であるかを適切に評価する必要があります。
それでも、この出版物が読者を見つけ、多くの人がKubernetesの選択または拒否に取り組む準備をすることを本当に願っています。
私たちは、会社の一部である`LazadaエクスプレスLogistics`、で得られたすべての経験を説明してみてください` Lazada Group`の一部-は、順番にアリババGroup`を` 。 東南アジアの最大6か国で、配送とフルフィルメントの運用サイクル全体を最大限に自動化するシステムを開発およびサポートしています。
使用の前提条件
世界中のクラウドソリューションを販売している会社の代表が私に尋ねました。「そして、あなたにとって「クラウド」とは何ですか?」 (「...うーん...私たちの対話は、水蒸気の凝縮はっきり程度大気中に中断されていない」と、思った)数秒を躊躇し、私はそれを言った、と彼らは言う、それは無限の資源を有する超信頼性の高いコンピュータのようなものだとほとんどのオーバーヘッドがありませんデータストリーム(ネットワーク、ディスク、メモリなど)の送信コスト。 これは私のラップトップが全世界で働いており、そのような負荷を保持できるようであり、私だけでそれを管理できます。
実際、なぜこの雲の奇跡が必要なのでしょうか? 一般的にすべてが非常に簡単です! 開発者、システム管理者、開発者、技術管理者の生活を楽にするよう努めています。 そして、 正しく調理された雲のようなものが繰り返し皆のための生活が容易になります。 そして、他のすべてに加えて、ビジネスのために動作する単相システムは常に安価であり、リスクも少なくなります。
上記のチームのすべてのアプリケーションおよびすべてのタイプの役割のための、シンプルで便利で信頼性の高いプライベートクラウドプラットフォームを見つけることを目指しました。 小規模な調査を実施しました:Docker、Puppet、Swarm、Mesos、Openshift + Kubernetes、Kubernetes-Openshift ...後者-アドオンなしのKubernetesで解決しました。
機能は、上で説明の非常に最初のページのすべての事業のために優れたフィット感とフィット感。 ドキュメントの詳細な研究、同僚とのおしゃべり、簡単なテストの経験。 これはすべて、製品の作者が嘘をつかないという自信を与え、素晴らしいクラウドを手に入れることができます!
袖をまくり上げた。 そして離れて行く...
問題と解決策
3層アーキテクチャ
すべては基本から来ています。 Kubernetesクラスターで適切に動作するシステムを作成するには、アーキテクチャと開発プロセスを熟考し、配信メカニズムと手段の束を構成し、Dockerの世界と孤立したプロセスの制限/概念に耐えることを学ぶ必要があります。
その結果、マイクロサービスおよびサービス指向アーキテクチャのイデオロギーは、タスクに不適切に適しているという結論に達しました。 このトピックに関するMartin Fowlerの記事 ( 翻訳 )を読んだ場合、最初のサービスが実現する前にどのような巨人の仕事をしなければならないかをおおよそ表す必要があります。
私のチェックリストでは、インフラストラクチャを3つの層に分割し、そのようなシステムを作成するときに各レベルで覚えておく必要があるものを大まかに説明しています。 問題の3つの層:
- ハードウェア -サーバー、物理ネットワーク
- クラスター -私たちの場合、Kubernetesとそれをサポートするシステムサービス(フランネル、etcd、confd、docker)
- サービス -直接Dockerにパッケージ化されたプロセス-ドメイン内のマイクロ/マクロサービス
一般に、3層アーキテクチャの概念とそれに関連するタスクは、別の記事のトピックです。 しかし、このチェックリストが完全に一杯になるまでリリースされません。 それは決して起こらないかもしれない:)
資格のあるスペシャリスト
プライベートクラウドのトピックがますます中規模および大規模ビジネスに関連し興味深いものである限り、資格を持つアーキテクト、開発者、開発者、それと連携できるデータベース管理者の問題も同様に関連しています。
この理由は、市場に参入するために必要な量のドキュメント、トレーニング記事、および「スタックオーバーフロー」に対する回答を取得する時間がない新しいテクノロジーです。 しかし、これにもかかわらず、私たちの場合、Kubernetesなどのテクノロジーは非常に人気が出てきており、人員が不足しています。
ソリューションは簡単です-社内で専門家を養成する必要があります! 幸いなことに、私たちの場合、Dockerとは何か、それを調理する方法はすでにわかっていました。残りの部分に追いつく必要がありました。
継続的デリバリー/統合
「スマートクラウドクラスター」の技術の魅力にもかかわらず、Kubernetes内のオブジェクトの通信とインストールの手段が必要でした。 自己記述のbashスクリプトと数百のロジックブランチからの道を通り抜けた後、Ansibleの非常に理解しやすい読みやすいレシピになりました。 Dockerファイルをライブオブジェクトに完全に変換するには、次のものが必要です。
- 標準ソリューションのセット:
- ビルダー-画像 -再帰的にドッカーがリポジトリ内のファイルを検索し、集中型のレジストリを組み立てた後、そのベースに画像を送信するスクリプト
- KubernetesモジュールAnsibleは -オブジェクトに応じて、異なる戦略と設置場所のためのモジュール、(作成またはスキップ/作成または更新/作成または置換します)
とりわけ、 Kubernetes Helmの問題を研究しました。 しかし、それにもかかわらず、AnsibleテンプレートをHelmチャートで置き換えることを拒否または置換することを余儀なくされるようなキラー機能は見つかりませんでした。 このソリューションの他の有用な機能は見つかりませんでした。
たとえば、オブジェクトの1つが正常にインストールされ、他のオブジェクトのロールアウトを続行できることをどのように確認しますか? または、すでに動作しているコンテナの設定をより細かく設定する方法と、コンテナ内でいくつかのコマンドを実行するだけでよいですか?
これらおよび他の多くの質問は、Helmを単純なテンプレートエンジンとして扱うことを義務付けています。 しかし、これはなぜですか?.. Ansibleの一部であるJinja2が非コアソリューションにオッズを与える場合。
ステートフルサービス
, statefull( ), Kubernetes . AWS, — EBS.
, k8s EBS, . , - , , , , 20 . EBS-k8s , , .
, , , , , . , :
, Kubernetes, Docker , , , , , , .
.
Docker . `STDOUT`. `` : , .. Monolog Handler `php`, , Docker/k8s
API Gateway
- - , , , . , .
—
Kubernetes :
- — LUA
- /
- HTTP `` — , Nginx
- Kubernetes-AWS AWS Load Balancer
- HTTP —
- , A/B ( pod- Kubernetes)
Kubernetes Kubernetes Ingress Resource, . ! ``, , API Gateway Ingress. , Nginx, .
, , , , , , , .
— :
- 2-3
- 10-50 — CI/CD mode
- Ansible
- `life` — minikube
- AWS-based EC2 + EBS, CentOS, Flannel
- 500~1000 pod-
- Docker/K8s: Go, PHP, JAVA/Spring FW/Apache Camel, Postgres/Pgpool/Repmgr, RabbitMQ, Redis, Elastic Search/Kibana, FluentD, Prometheus, etc
- , `Hardware`
- Elastic Search Kubernetes
- Prometheus
, Kubernetes Docker . Kubernetes, Medium.
, , :
- — , zipkin
- Anomaly detection — , / ,
- pod-
- — stateful ,
- — , pod-, ( )
- Federation mode —
a ?
, , , , , . . .
! : «!.. »