Kubernetes (k8s) 入門

Kubernetes (k8s) 入門

Kubernetes は面白そうだったので(ギリシャ人なら名前に問題があると思うでしょうが)、ずっと学びたいと思っていましたが、クラスターで何も実行していなかったため、その機会がありませんでした。最近、仕事でKubernetes関連のことに携わるようになったので、機会を見て調べてみたのですが、現状の情報(公式チュートリアルも含め)が長すぎて無理があり、最初は少しイライラしました。

数日間の調査を経て、Kubernetes のコアコンセプトを徐々に理解し、本番環境にデプロイしました。私の履歴書には「Kubernetes エキスパート」と記載されていたので、すぐにあるアイデアが浮かびました。システムに関する私の幅広い理解と、何時間もの調査から得た知識を、もっと多くの人に公開したらどうだろう、と。もう一度、まとまりのない記事を書かないように自分を納得させることができませんでしたが、すぐに次のことに気付きました。
これがその記事です。

既存の記事に関して私が抱えていた主な問題は、詳細に入る前に、これらのコンポーネントが何であるか、それらがどのように組み合わされているかについての概要をまとめたものが見つからなかったことです。 この高度なプレゼンテーション方法は私にとって学習に最適な方法です。私はこのように書きましたが、あなたにも効果があることを願っています。 Kubernetes の仕組みをわかりやすく説明した専門家による記事やチュートリアルをご存知でしたら、私に教えないでください。必要なときにあなたがいてくれて、私が記事を書いたときにあなたがもっと早く公開してくれなかったからです。

また、私が Kubernetes を学習し始めてまだ 1 週間ほどなので、あまり詳細な内容にはならず、不正確な部分もあるかもしれませんが、間違いがないように願っています。また、ここでの情報は、シンプルなクラスターを実行できる程度には十分なはずです。

そうは言っても、結局のところ、Kubernetes の概念は非常に単純であることがわかりましたが、まだ知らないことがたくさんあることは確かです。しかし、私が知っていたことは、クラスターをセットアップしてその上でアプリを実行するには十分であり、ほとんどの人にとって開始方法を知るのに十分であると確信しています。

基本概念

まず最初に、Kubernetes のさまざまな部分を詳しく見ていく必要があります。

  • コントロール プレーン: 名前が示すように、これは他のすべてを制御する部分です。また、私たちは Amazon に料金を支払ってこれを処理させているだけなので、この部分については何も知りません。私の理解では、これが最善の決定であり、Google でない限り、代わりに管理してくれる会社に料金を支払う必要があります。
  • ノード: ノードは本質的にはサーバーであり、料金を支払って利用する物理的なワーカーのようなものです。 これはすべてのコードがデプロイされる場所であり、ベアサーバーをノードに変換する方法は、Docker、kubelet、kube-proxy、およびその他のいくつかのものをインストールすることです。この記事では、クラスター内にすでにいくつかのワーカーが存在していることを前提としています。
  • Pod: Pod はコンテナのコレクションです。 ここにはコードが格納され、通常はコンテナごとに 1 つの Pod がありますが、密接に関連するサービスを同じ Pod に配置することもできます。 Pod は単一のノード上で実行されます (ただし、ノードは複数の Pod を実行できます)。つまり、Pod 内のすべてのコンテナは同じ IP アドレスを持ち、localhost 上の互いのポートに接続することで相互に通信できます。ポッドはデプロイ後に更新することはできず、削除または置換することしかできません。
  • デプロイメント: デプロイメントは、ポッドをクラスターに実際にデプロイする方法です。 デプロイメントなしでもポッドを実行することはできますが、デプロイメントがないと、必要なレプリカの数を簡単に指定したり、障害発生時にポッドを自動的に再デプロイしたり、以前の状態にロールバックしたりすることはできません。デプロイメントによりコードのライフサイクル管理が容易になり、Kubernetes 上で Docker イメージを実行できるようになります。
  • サービス: サービスを使用すると、1 つのポッドから他のポッドへのポートを開き、ポッドの DNS 名を指定して、クラスター内の他のポッドを見つけて接続できるようになります。
  • Ingress: Ingress は、Ingress コントローラー (通常は Traefik などの Web サーバー) に、外部に何を公開するか、どのパスまたはホスト名で公開するかを指示する方法です。 Ingress は、リクエストに実際に応答する Pod にマッピングされます。このチュートリアルでは、すでにイングレスが構成されていることを前提としていますが、Traefik を設定してこれを行うのはそれほど難しくありません (チュートリアルに従う場合は、デプロイメント アプローチを使用してください)。

これらはすべて、コマンドラインから kubectl を使用して作成できますが、より安全には、デプロイする内容の定義と詳細が含まれる YAML ファイル ( kubectl apply -f <yaml ファイル> を実行) を介して作成することもできます。

大まかに言うと、コンテナをポッドに配置します。ポッドはデプロイメントによって作成およびデプロイされ、そのネットワークはサービスによって処理され、外部からサーバーにアクセスできるようにイングレスを追加します。

これらの各セクションを 1 つずつ確認して、YAML 構成がどのようになっているかを確認してみましょう。

ポッド

コンテナ内で Redis イメージを実行するポッドの YAML 構成を見てみましょう。 Pod は永続的ではないため、直接使用することはほとんどないことを覚えておいてください。 代わりに、デプロイメントを使用して間接的にポッドをデプロイします。これについては次に説明します。

以下の設定例は変更専用です。 ただ眺めて、その美しさに驚嘆しながら読み続けるだけです。

ご覧のとおり、非常に簡単です。Kubernetes 固有のものをいくつか追加し、それぞれをコピーして貼り付けるだけです。次に、この構成が Pod 用であることを宣言し、名前を付け、その中で実行されるコンテナーとそれらがリッスンするポートを指定して、ファイル全体を削除すれば、準備完了です。

Pod の詳細については、Kubernetes の公式ドキュメントを参照してください。

展開

ここでは、Deployment を使用して上記の Pod を実際に実行する方法を説明します。 上記の Pod 構成にはまったく注意を払う必要はありません。デプロイメントで再定義します。

これは主に上記の Pod 構成ですが、レプリカなどの追加の構成がいくつか含まれていることに気付くでしょう。これらは、デプロイメントの名前と、デプロイするレプリカの数を定義します。 レプリカの数を変更すると、テンプレート セクションで指定されたポッドがさらにデプロイされます。

デプロイメントの詳細については、Kubernetes の公式ドキュメントを参照してください。

サービス

Pod がデプロイされたので、そのポートをクラスターの残りの部分に公開する必要があります。 Deployment の containerPort ディレクティブは Docker ポートを公開しますが、実際にはホスト上のポートを転送しないため、複数の Pod (同じ Pod 内のコンテナではない) が競合することなく同じポートを使用できます。

上記のポートをクラスター上で実行されている他のポッドに実際に公開するには、そのためのサービスを作成する必要があります。 これにより、ポートを転送するために必要なルールが作成され、このポッドの IP を解決するために使用できる DNS エントリが提供されます。

これにより、Redis ポートがクラスター内の他の Pod に公開され、my-service:6379 経由で接続できるようになります。

アプリケーションのさらに多くの部分をデプロイするには、別のデプロイメントと関連するサービスをクラスターに追加するだけです。 上記の Redis とまったく同じ方法でメイン アプリケーション サービスをデプロイできます。

イングレス

最後に、Ingress を使用してサービスをインターネットに公開できます。 以下は Traefik を使用した例です。Redis を外部に公開したくないかもしれませんが、同じアプローチが独自のアプリケーションにも適用されます。

この構成セクションでは、Traefik に対して、redis.yourdomain.com という名前のホスト上のすべてのトラフィックをサービス ポート 6379 に転送するように指示します。私の知る限り、これは Traefik のみの設定です。 設定を適用すると、Pod は redis.yourdomain.com 上の Traefik 経由でインターネットに公開されます。

この記事が初心者にとって役立つことを願っています。 Kubernetes の基礎は短いため、この投稿も短いものとなりましたが、最小限の手間でサービスを実行する方法については説明できました。

これで、Kubernetes が何であるかが理解できたはずです。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Kubernetes 環境に単一ノードの Redis データベースをデプロイする方法
  • Docker+K8S クラスタ環境構築と分散アプリケーション展開
  • k8sを使用してDjangoプロジェクトをデプロイする手順
  • Javaプロジェクトのk8sデプロイメントの実装
  • Docker 学習ノート k8s デプロイ方法
  • 実稼働レベルの K8S 基本環境の展開と構成プロセス

<<:  Windows で MySQL 5.7.17 をインストールし、エンコードを utf8 に設定する方法

>>:  WebStormはVue3統合APIのソリューションを正しく識別できません

推薦する

IDEA が Docker を統合してリモート展開を実現するための手順

1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...

新しいユーザーを作成し、MySQLに権限を付与する最も簡単な方法

ユーザーを作成します: 'oukele' によって識別されるユーザー 'ou...

純粋な CSS3 を使用して、円の動的な光る特殊効果アニメーションを実装するためのサンプル コード

この記事では、主に、円形のダイナミックな光る特殊効果アニメーションを実現するための純粋な CSS3 ...

MySQL ファジークエリステートメントコレクション

SQL ファジークエリステートメント一般的なファジーステートメントの構文は次のとおりです。 SELE...

MySQL データをエクスポートする際の secure-file-priv 問題の解決方法

エラー 1290 (HY000) : MySQL サーバーは –secure-file-priv オ...

MYSQL クエリの効率を向上させる 10 の SQL ステートメント最適化テクニック

MySQL データベースの実行効率はプログラムの実行速度に大きな影響を与えます。データベースの効率的...

Vueでルーティング権限を動的に設定する主なアイデア

以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとは...

Windows10のマウスを模倣して境界線を光らせる効果を実現するCSSの詳細解説

最新の Windows 10 アップデートをインストールした後、システム UI の詳細な効果が顕著に...

MySQL Innodb ストレージ構造と Null 値の保存の詳細な説明

背景:テーブルスペース: すべての INNODB データはテーブルスペース (共有テーブルスペース)...

Linux での rpm、yum、ソースコードの 3 つのインストール方法の詳細な紹介

第1章 ソースコードのインストールRPM パッケージは特定のシステムとプラットフォームに応じて指定さ...

vue+element カスタムクエリコンポーネント

この記事では主に Vue プロジェクトを紹介します。要素の導入を前提として、コンポーネントを 2 回...

Docker ベースの Selenium 分散環境の構築

1.画像をダウンロードするdocker pull selenium/hub docker pull ...

mysql5.7.33 で誤って ibdata ファイルを削除した後にデータを回復する方法

目次1. シナリオの説明: 2. 事例のデモンストレーション: 2.1. MySQLの障害発生前にデ...

nginxプロセスロックの実装の詳細な説明

目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...

Idea で Docker を使用して SpringBoot プロジェクトをデプロイする詳細な手順

序文プロジェクト要件: Dockeridea に Docker プラグインをインストールし、Dock...