DevOps 開発モデルの普及により、Kubernetes はテクノロジーの世界を急速に席巻しています。オープンソースのコンテナ オーケストレーション システムとして、コンテナ アプリケーションの展開、拡張、管理を自動化できます。 Kubernetes は、分散コンテナ クラスター向けの経済的で強力かつ信頼性の高い管理ツールであるため、ある程度の複雑さを伴います。開発者が注意を払わなかったり、不適切に構成したりすると、本番環境でさまざまな障害が発生する可能性があります。 潜在的な落とし穴や間違いを避けるために、この記事では、Kubernetes のデプロイメントでよくある間違いとその根拠、そしてそれを修正するための簡単なヒントをいくつか紹介します。 Kubernetesの基礎画像ソース: Kubernetes.io Kubernetes は、一連の API とコマンドライン ツールを使用して、クラスター内のコンテナを管理します。そのアーキテクチャは、マスター ノードと複数のサブノード、つまり作業ノードで構成されます。マスターノードは、クラスターのステータスとサブノードのアクティビティを担当し、サブノードのワークロードを管理し、コンテナをスケジュールし、コンテナに適切なリソースを割り当てます。サブノードは物理マシンや仮想マシンに限定されませんが、Kubernetes クラスターを操作するには、すべてのサブノードが Docker エンジンと kubelet サービスにアクセスする必要があります。さらに、ノードは相互間のデータ転送を実現するために他のノードと接続する必要があります。 Kubernetes は宣言型構成モデルを使用して、予想される変更と予期しない変更の両方に対応できるスケーラブルなシステムを簡単に設計します。この宣言的な構成により、Kubernetes はさまざまなコンテナやクラスター操作の根本的な複雑さをより簡単に処理できるようになり、高可用性、スケーラビリティ、セキュリティを備えたクラスターを簡単に構築できるようになります。 もちろん、Kubernetes アプリケーションは本質的に複雑な展開であるため、次のようなエラーが発生することがよくあります。 1. ヘルスチェックを無視する画像出典: Kaizenberglabs 上の図に示すように、Kubernetes にサービスをデプロイする場合、サービスが期待どおりに実行されるようにするには、ポッドの状態と Kubernetes クラスターの全体的な健全性を理解することが非常に重要です。これを行うには、スタートアップ プローブ、ライブネス プローブ、および準備プローブを使用できます。その中で、スタートアップ プローブは、Pod の正常な起動と作成を保証できます。アクティビティ プローブを使用すると、アプリケーションがアクティブかどうかをテストするのに便利です。準備状況プローブは、アプリケーションがトラフィックを受信する準備ができているかどうかを判断するために使用されます。 2. コンテナにホストファイルシステムをマウントするコンテナにホスト ファイル システムをマウントすることは、データが永続的なシナリオでよく使用される一般的なアンチパターンです。最も簡単な方法は、ホストのローカル ディレクトリをコンテナー ファイル システム内のディレクトリとしてマウントすることです。したがって、このディレクトリに書き込まれたものはすべてホスト上に保存されます。ただし、この動きにより、次のような潜在的な結果が生じる可能性があります。
したがって、上記の問題を回避するには、データの永続化を目的とする場合を除き、ホストのファイルシステムをコンテナーにマウントしないでください。 3. 「最新」タグを使用する本番環境で Latest タグを使用する場合、バージョンの説明が明確でないと混乱を招く可能性があるため、本番環境ではこのようなタグの使用はお勧めしません。たとえば、サービスが中断し、できるだけ早く復旧する必要がある場合、「最新」タグが新しくプッシュされたイメージ バージョンを指していないことがわかります。つまり、実行されていたアプリケーションの特定のバージョンを知ることができません。したがって、意味のある Docker タグを引き続き使用する必要があります。 4. 間違ったKubernetesノードにサービスをデプロイする前述のように、ワーカーノードはマスターノードによって割り当てられたタスクのみを実行できます。その後、間違ったノードにサービスをデプロイすると、サービスが正しく動作しなくなる可能性があります。さらに、新しいコンテナを起動すると、利用可能なスケジューラがタスクを割り当てるまで待機する必要があり、予想よりも時間がかかることがよくあります。 この状況を回避するには、サービスをデプロイする前に、サービスをマスター ノードで実行する必要があるのか、ワーカー ノードで実行する必要があるのかを把握する必要があります。コンテナを起動する前に、ポッドが通信する必要があるクラスター内の他のポッドに到達できることも確認する必要があります。 5. 既成のデプロイメントパターンを使用しないKubernetes を使用すると、開発者は多数のデプロイメント テクノロジーを使用してアプリケーションを簡単にデプロイできます。下の図に示すように、Kubernetes では、新しいソフトウェアのデプロイメントによってユーザーがダウンタイムやサービスの中断に遭遇しないように、Blue-Green、Canary、Rolling などのデプロイメント戦略を使用することを推奨しています。
6. 繰り返し展開同じ状態のコピーを複数作成し、それらを異なるクラスターに並行してデプロイすると、重複したデプロイが発生する可能性があります。たとえば、クラスターに障害が発生した場合、別のクラスターがデプロイメント要求の処理を継続します。ただし、回復するか、新しいクラスターが参加すると、実行中の 2 つのレプリカがリクエストを 2 倍にし、基盤となるホストの CPU とメモリのリソースをオーバーサブスクライブします。このため、ヘッドレス サービスやデーモン セットなどのサービス タイプを使用して、一度に 1 つのデプロイメント バージョンのみが実行されるようにすることをお勧めします。 7. 本番環境ではコンテナを 1 つだけ使用する (つまりステートレス)多くの人は、すべてのコンテナは同じであると誤解しています。実際、それらの間には大きな違いがあります。その中でも、ステートフル コンテナーを使用すると、ディスクなどの永続的なストレージ メディアにデータを保存して、データの損失を防ぐことができます。一方、ステートレス コンテナーは、実行中のみデータを保持し、終了するとデータを破棄します (追加でバックアップしない限り)。したがって、ステートフル コンテナーとステートレス コンテナーの両方を使用する必要があります。 8. 監視とログ記録の要件を考慮せずにアプリケーションを展開する監視とログ記録の必要性を考慮しないと、開発者はコードやアプリケーションが本番環境でどのように実行されているかを把握できなくなることがよくあります。このような欠陥を回避するには、アプリケーションを展開する前に監視システムとログ集約サーバーを確立し、アプリケーションのパフォーマンスを把握して、変更や最適化が必要な場所を見つける必要があります。 ただし、サードパーティのソリューションではなく、Kubernetes 自体が提供するサービスとツールのみを使用すると、ベンダー ロックインの問題が発生する可能性があります。たとえば、CRI コンテナ ランタイム インターフェイスを使用してコンテナをデプロイする場合、Docker コンテナや RKT コンテナは使用できません。さらに、多くの開発者は、クラスター容量の不足や不適切なタイミングでのアプリケーションのデプロイによって生じる非効率性と混乱に遭遇します。 9. セキュリティ設定なしでアプリケーションをデプロイする開発者は、クラスターの外部からアクセス可能なエンドポイントを使用する際に、キーの保護や特権コンテナを安全に実行する方法などの問題を見落としがちです。したがって、Kubernetes の次のセキュリティ面に注意する必要があります。
さらに、ロールベースのアクセス制御 (RBAC) ポリシーを構成することで、Kubernetes クラスターを保護できます。つまり、ユーザーに「管理者」や「オペレーター」などのロールを割り当て、ロールのリソースへのアクセスを制限することで、Kubernetes クラスターを保護します。管理者ロールには完全なアクセス権がありますが、オペレーター ロールにはクラスター内の限られたリソースへのアクセス権のみがあります。 10. リソース使用制限を設定していないリソースの使用率と請求額の両方が急上昇していることに気付いた場合は、サービスのリソース使用状況を再検討する時期です。アプリケーションに対してストレス テストを実行することで、コンテナーの CPU とメモリの制限を設定できます。このため、Kubernetes では、リソース使用率のカテゴリに「リクエスト」と「制限」を定義しています。 「要求」はアプリケーションの実行に必要な最小リソースを表し、「制限」は最大リソースを定義します。デプロイメント YAML でリソース制限を指定できます。 上の図からわかるように、Harness Cloud Cost Management (CCM) は、さまざまなワークフロー負荷の CPU とメモリの使用状況を計算して分析し、さまざまなリソースの最適化の可能性をヒストグラムの形式で表示し、Kubernetes クラスターにさまざまな提案を提供することで、毎月の費用を削減します。 まとめ上記では、Kubernetes のデプロイメント プロセスでよくある 10 個のエラーとその解決策を紹介しました。これらが、より完全なアプリケーションとサービスを効果的に提供するために役立つことを願っています。 翻訳者について51CTO コミュニティの編集者である Julian Chen 氏は、IT プロジェクトの実装において 10 年以上の経験を持っています。社内外のリソースとリスクの管理に長けており、ネットワークと情報セキュリティの知識と経験の普及に注力しています。彼は、ブログ投稿、特別トピック、翻訳の形で最先端のテクノロジーと新しい知識を共有し続けています。彼はオンラインとオフラインで情報セキュリティのトレーニングや講義を頻繁に行っています。 原題: Kubernetes で絶対にやってはいけない 10 の間違い、著者: Pavan Belagatti |
>>: クラウド コンピューティングへの急速な移行は、企業の適応能力を上回っているのでしょうか?
今日の急速な経済発展により、あらゆる分野で競争が激化しています。企業にとってのあらゆるビジネスチャン...
人の成功は他人が真似できない古典である。これは不変の真理のようだ。私が知る限り、他人を真似して成功し...
[[331081]] 2020 年 1 月 9 日から 31 日まで、O'Reilly はク...
VLAN (Virtual Local Area Network) の中国語名は「仮想ローカルエリア...
百度の6月22日の事件とその後のさまざまなアルゴリズムのアップデートの後、百度の許容度がどんどん低く...
Hostvenom は、10 年間運営されており、プロモーション用に 4 台のマシンを特別に提供して...
Baidu の入札品質は非常に重要な概念です。この記事では、広告サークルの入札について詳細に分析しま...
私は数年間、民間病院のキーワードランキングとウェブサイトの最適化に携わってきました。近年、百度のアル...
2月3日、アマゾンとグーグルの親会社アルファベットはそれぞれ2022年の年次業績報告書を発表した。マ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス1. なぜWeiboを使...
いつものことですが、特に安全性に関しては、人々は自分の失敗から学ぶよりも他人から学ぶことを好みます。...
あなたは何年もこの質問を探し続けており、夢の中でこの質問を聞くこともよくあります。そして、あなたはイ...
百度はこれまでずっと「ネットユーザーを最もよく理解する」インターネット企業であり、高品質なサービスを...
インターネットの発展は多くの変化をもたらしました。多くの人がオンラインで求人に応募することを選択し、...
ここで説明する BOM は狭義の BOM であり、ERP で生産に使用される BOM とは大きく異な...