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 時間差関数 (TIMESTAMPDIFF、DATEDIFF)、日付変換計算関数 (date_add、day、date_format、str_to_date)

1. 時間差関数(TIMESTAMPDIFF、DATEDIFF) MySQLを使用して時間差を計算...

MySQL トリガー: 複数のトリガー操作の作成例の分析

この記事では、例を使用して、MySQL で複数のトリガー操作を作成する方法について説明します。ご参考...

MySQL 5.7 と Mac 上の MySql の詳細なインストール図をダウンロードする

1.ブラウザに次のアドレスを入力します参考: 2. 次のインターフェースに入ります。下の場所をクリッ...

SVNサービスバックアップ操作手順の共有

SVN サービスのバックアップ手順1. ソースサーバーとターゲットサーバーを準備するソースサーバー:...

MySQLデータベースイベントスケジュール実行タスクの詳細な説明

1. 背景プロジェクトの業務が進むにつれて、データベース テーブルの数がどんどん大きくなり、ハードデ...

適応幅(パーセンテージ)に応じて Div の高さを調整する純粋な CSS

今日のレスポンシブ レイアウトの要件では、サイズを自動的に調整できる多くの要素で高さと幅の適応を実現...

開発環境にUbuntu 16をインストール後の初期設定

オフィスでは、Linux 開発環境として Ubuntu システムが必要です。現在、Ubuntu 16...

複合主キーと複数列インデックスに遭遇した場合の MySQL 行ロックの詳細な説明

背景今日、他のプロジェクト チームと協力してシス​​テムのストレス テストを実施しているときに、プロ...

Web開発で使用される基本的な概念と技術の紹介

本日は、Web 開発で使われる基本的な概念と技術を初心者向けに紹介します。A から Z まで合計 2...

docker を使用して Windows 10 Home バージョンで Laravel 開発環境を構築する方法の詳細なチュートリアル

オペレーティング·システム: Win10 ホームエディションDockerをインストールします:公式サ...

インデックスを使用して数千万のデータを持つ MySQL のクエリ速度を最適化する

1. インデックスの役割一般的に言えば、インデックスは本の目次に相当します。条件に基づいてクエリを実...

HTMLエンコードによる文字化け問題について

今日、3年生から質問がありました。彼が書いた HTML コードを開くと、文字化けした文字が表示されま...

Windows 10 の仮想マシンに Mac システムをインストールするグラフィック チュートリアル

1. 仮想マシンバージョン15.5.1をダウンロードする公式サイトから直接最新バージョンをダウンロー...

スケジュールされた時間に古いジャンクファイルを自動的に削除する Linux 用の Autotrash ツール

Autotrash は、古い削除済みファイルを消去するプロセスを自動化するコマンド ライン プログラ...

Alibaba Cloud ECS サーバーでポート 8080 を開く方法

セキュリティ上の理由から、Alibaba Cloud Server ECS にはデフォルトで独自のセ...