Manjusaka

Manjusaka

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

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

コンテナ化#

現在、非常に主流な意見は、できるだけ多くのコンテナを使用するというものです。正直言って、この考えは一定の合理性があると言えます。この考えを見直すために、コンテナとは何をもたらすのかを見てみる必要があります。

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

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

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

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

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

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

これらの例から、コンテナ化を行う際に考慮すべき問題は、コンテナ化が私たちにとってどのような問題を解決するのか、それとも単に先進的でかっこいいだけなのか、ということです。

Kubernetes#

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

まず、自前の Kubernetes クラスターのシナリオは無視します。なぜなら、一般の人が扱えるものではないからです。では、パブリッククラウドを利用した場合の状況を見てみましょう。例えば、Alibaba Cloud を見てみましょう。ページを開いて、以下のような画像を見ることができます。

images

images

では、質問です:

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

一つ一つクリックして簡単に設定できると思っていたのとは大きく異なりませんか?あなたはおそらく、「私たちの小さな会社はこれらのことを気にしないし、デフォルトのままで大丈夫です」と言うかもしれませんが、それなら Kubernetes を導入する必要はありません。では、導入した後、計算を続けましょう。

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

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

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

まとめ#

この記事を書いたのは、文句を言ったり人を非難するためではなく、私の意見を表明するためです。私が好きな一文を借りて言えば、「中台,我信了你的邪 | 深氪」(中台、私はあなたの邪悪を信じました)という記事からです。

昨年末、アリババの会長兼 CEO である張勇氏は湖畔大学での共有の際に、「もし企業が中台を目指して中台を作るなら、それは死だ」とも言っていました。

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

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

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