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のソリューションを正しく識別できません

推薦する

MySQL サーバーの接続、切断、および cmd 操作

mysql コマンドを使用して MySQL サーバーに接続します。 MySQL サーバーが起動したら...

Vueはコードのハイライトを実現するためにモナコを使用しています

Vue 言語と要素コンポーネントを使用して、コード コンテンツの入力を必要とし、ハイライト表示が可能...

Vue+Spring Bootで検証コード機能を実現

この記事では、検証コード機能を実装するためのvue+spring bootの具体的なコードを例として...

Kali Linux システムのバージョンを確認する方法

1. Kali Linuxシステムのバージョンを確認するコマンド: cat /etc/issue 2...

Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明

1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...

vue3.0 sfcのセットアップの変更について簡単に説明します。

目次序文標準的なSFCの書き方スクリプト設定可変露出部品の取り付け小道具カスタムイベント要約する序文...

MySQL外部キーの3つの関係例の詳細な説明

この記事では、例を使用して、MySQL 外部キーの 3 つの関係について説明します。ご参考までに、詳...

Docker コマンドラインの完全ガイド (知っておくべき 18 のこと)

序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...

Vueはユーザーログイン切り替えを実装します

この記事では、ユーザーのログイン切り替えを実現するためのVueの具体的なコードを例として紹介します。...

Vue でコミュニケーションを実装する 8 つの方法

目次1. コンポーネント通信1. Props 親コンポーネント ---> 子コンポーネント通信...

Win10にnginxをインストールする方法

会社から、負荷を実装するためにnginxをベースにFordプロジェクトのWebServiceサーバー...

ウェブ画像形式としてPNG、JPG、GIFを選択して使用する方法

では、GIF、PNG、JPG のどの形式を候補形式として選択すればよいのでしょうか。また、どの画像形...

Vue で親子コンポーネントの値を双方向バインドするために v-model を使用するときに発生する問題と解決策

目次シナリオ解決してみる解決するシナリオ今日、コンポーネントの双方向データバインディングにv-mod...

Linux 上で Python3.6 をコンパイルしてインストールするための詳細なチュートリアル

1. まず、公式ウェブサイト https://www.python.org/downloads/so...

ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

目次1. 基本原則2. 特定のコード要約する1. 基本原則まず、生放送エリアを10の部分に分割し(個...