Manjusaka

Manjusaka

Kubernetesとコンテナ化に関するいくつかの考えについて

この間、Kubernetes とコンテナ化に関する議論がいくつかのグループで行われましたので、それをまとめて考察としてまとめます。この記事は個人の立場を代表するものであり、商業的な視点を代表するものではありません。

コンテナ化#

現在、非常に主流な考え方は、できるだけ多くの場所でコンテナを使用することです。正直言って、この考え方は一定の合理性があると言えます。この考え方をレビューするために、コンテナというものが私たちにもたらす変化を見てみる必要があります。

コンテナは、まず間違いなく多くの利点をもたらします:

  1. 開発と本番環境を実質的に一致させることは非常に便利なことです。つまり、開発者が「このサービスはローカルで問題ない」と言った言葉は有用なものになります。
  2. サービスのデプロイがより簡単になります。配布やデプロイに関しても、容易になります。
  3. 一定程度のリソースの分離と割り当てが可能です。

では、私たちは無条件にコンテナを使えばいいのでしょうか?いいえ、そうではありません。再度レビューする必要があります。コンテナ化後に直面するいくつかの欠点は次のとおりです:

  1. コンテナのセキュリティの問題です。現在最も主流なコンテナ実装(ここでは Docker を指します)は、本質的には CGroups + NS を使用してリソースとプロセスの分離を行っています。そのため、セキュリティは非常に重要な問題です。Docker には権限の乱用やエスケープの脆弱性が年々存在します。これは、コンテナの使用を規制するためのシステムのメカニズムが必要であることを意味します。また、イメージのセキュリティの問題もあります。私たちはみな、Google や Stackoverflow などのプログラミングリソースに頼っていますので、問題が発生した場合、検索して Dockerfile をコピーすることがあります。この場合、大きなリスクが存在します。なぜなら、ベースイメージに何が含まれているかわからないからです。
  2. コンテナのネットワークの問題です。複数のイメージを起動した場合、コンテナ間のネットワーク通信はどのように処理されるのでしょうか?また、生産環境では、1 台のマシンだけでなく、複数のマシンが存在するため、異なるマシン間でのコンテナ間通信をどのように確保し、ネットワークの安定性を保つのでしょうか?
  3. コンテナのスケジューリングと運用の問題です。マシンの負荷が高い場合、そのマシン上の一部のコンテナを他のマシンにスケジュールする方法はどのようになりますか?また、コンテナの生存状態をどのように検出しますか?コンテナがクラッシュした場合、どのように再起動しますか?
  4. コンテナの具体的な詳細な問題です。例えば、イメージの構築やパッケージングの方法は?アップロードの方法は?さらに、いくつかの特殊なケースの問題をどのようにトラブルシューティングしますか?

ビジネスの意思決定を行う際、私たちは先進的で快適な技術だけでなく、そのビジネスの意思決定の ROI を考慮し、利益と欠点の間でトレードオフを行う必要があります。コンテナ化に関しては、いくつかの一般的な誤解を考えてみましょう:

  1. コンテナを使用してリソースの分離を行いたいと思っています!では、systemd + cgroup という簡単な方法とコンテナの間には何の違いがあるのでしょうか?コンテナの方がコストが低いということですか?
  2. DevOps を実践したいので、コンテナ化を導入したいと思っています!実際には、DevOps とコンテナ化の関連性はそれほど大きくありません。DevOps はむしろ一種の方法論であり、チーム間の内部協力のための方法論です。正確に言えば、自動化、プロセスの改善、SOP の導入などを通じて、サービスのディストリビューションと運用をより簡単にすることです。つまり、DevOps を実践する際には、技術的な問題ではなく、制度の問題です(冗談ですが、DevOps の開発者はスクリプトを書く必要はありません)。その中で、私たちの伝統的な Ansible などの運用手法や、いくつかの自動化テストの方法やフレームワークは、DevOps の一部となることができます。では、なぜコンテナを使用する必要があるのでしょうか?それは、伝統的なツールを使用して DevOps を実践するコストが、コンテナ化を使用するコストよりもはるかに高いからです。

これらの 2 つの例から、コンテナ化を行う際に考慮する必要がある問題は、コンテナ化が私たちにとってどのような痛点を解決するのか、それとも単に先進的でかっこいいから使っているのか、ということです。

Kubernetes#

前述のコンテナ化のいくつかの問題が、Kubernetes を代表とするコンテナオーケストレーションシステムの誕生を促しました。皆さんは、これが問題を解決したので、この問題についてもう少し話しましょう。

まず、自前の Kubernetes クラスターのシナリオは無視します。それは一般の人が扱えるものではありません。では、パブリッククラウドを利用する場合を見てみましょう。例えば、Alibaba Cloud を見てみましょう。ページを開いて、次のような画像が表示されます。

images

images

では、質問です:

  1. VPC とは何ですか?
  2. Kubernetes 1.16.9 と 1.14.8 の違いは何ですか?
  3. Docker 19.03.5 と Alibaba Cloud Sandbox 1.1.0 は何ですか?違いは何ですか?
  4. 専用ネットワークとは何ですか?
  5. 仮想スイッチとは何ですか?
  6. ネットワークプラグインとは何ですか?Flannel と Terway は何ですか?違いは何ですか?ドキュメントを見てみると、Terway は Alibaba Cloud が Calico を改造した CNI プラグインであると書かれています。では、CNI プラグインとは何ですか?Calico とは何ですか?
  7. Pod CIDR とは何ですか?どのように設定しますか?
  8. Service CIDR とは何ですか?どのように設定しますか?
  9. SNAT とは何ですか?どのように設定しますか?
  10. セキュリティグループの設定方法は?
  11. Kube-Proxy とは何ですか?iptables と IPVS の違いは何ですか?どちらを選ぶべきですか?

想像していた「ワンクリックで簡単」とはかなり違いますね。あなたはおそらく「私たちの小さな会社はこれらのことに関係なく、デフォルトの設定で行くだけです」と言うかもしれませんが、それなら Kubernetes を使う意味はありませんね。さて、あなたが Kubernetes を使った後、さらに計算を続けましょう。

  1. イメージリポジトリが必要ですよね。高くないですが、中国リージョンの基本プランは月額 780 です。
  2. クラスタ内のサービスを公開する必要がありますよね?いいですね、最低スペックの SLB を購入しましょう。シンプルタイプで、月額 200 です。
  3. では、毎月ログにお金を使う必要がありますよね?1 ヶ月に 20G のログを想定しましょう。それほど多くないですよね?いいですね、39.1 です。
  4. クラスタの監視は必要ですか?いいですね、購入しましょう。1 日に 50 万件のログを報告しますか?いいですね、安くて 975 です。

計算してみましょう。1 つのクラスタについて、(780+200+39.1+975)*12=23292.2 ENI や ECS などのクラスタの基本料金は含まれていませんが、うれしいですね。

さらに、多くの他の問題が発生する可能性があります。具体的な内容については、Kubernetes の Issue エリアを見てみてください。

まとめ#

この記事を書いたのは、文句を言ったり人を非難するためではなく、次の視点を示すためです。私が好きな一篇の記事中台,我信了你的邪 | 深氪から引用した一文を借りましょう。

去年末、阿里巴巴の会長兼 CEO である張勇は湖畔大学での共有時にも言った。「もし企業が中台を目指して中台を作るなら、それは死だ。」

逍遥子がこの言葉を言ったかどうかはわかりませんが、私は同意します。同時に、企業が技術の先進性だけで技術を追求すると、それは死につながる と考えています。なぜなら、技術はビジネスにサービスを提供するために必要であり、技術の進歩は大いにビジネスの蓄積と要求に依存しているからです。

さて、これは私が書いた中で最も水っぽい記事です。以上です。引き続き仕事を頑張ります。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。