Kubernetes を使い始めるのに最適な方法: 基本的な操作から実用的な例まで

Kubernetes を使い始めるのに最適な方法: 基本的な操作から実用的な例まで

通常、アプリケーションを実行するにはサーバーが必要です。初期の頃は、サーバー上で実行されるアプリケーションの境界を定義および強制し、リソースの使用における公平性を確保する方法がありませんでした。したがって、サーバーでは通常、単一のアプリケーションのみの実行に制限されており、明らかにリソースの使用率が低下します。

その後、仮想化技術が導入され、1 台の物理コンピューター上に複数の仮想インスタンスを作成できるようになりました。

仮想マシン (VM) は、ハイパーバイザーと呼ばれるソフトウェアによって管理される仮想化されたコンピュータ システムのインスタンスです。各仮想マシンは、独自の仮想リソースを持つ自己完結型の分離されたエンティティとして実行されます。複数の仮想マシンを同じ物理サーバー上に共存させることができます。仮想化によりリソースの使用率が向上します。各仮想マシンが完全に分離され、独自のオペレーティング システムを持つことが重要です。このアプローチには、物理​​システムを共有できる仮想マシンの数を制限するなど、いくつかの制限があります。

仮想マシンとコンテナ

仮想マシン比較すると、ホスト物理システム上で実行される複数のコンテナがオペレーティング システムを共有するため、コンテナは軽量な仮想化ソリューションを提供します。仮想マシンと同様に、各コンテナには CPU 共有を含む独自のリソース セットがありますが、オペレーティング システムは他のコンテナと共有されます。 Docker は、コンテナを管理するために広く使用されているコンテナ ランタイムです。

コンテナは仮想マシンに比べて多くの利点があり、アプリケーションをパッケージ化するために広く使用されています。ただし、実稼働環境でコンテナを管理し、フォールト トレランスや負荷分散などのサービスを提供することは困難な作業です。

解決策は、2014 年に Google によってオープンソース化された、オープンソースで拡張可能なコンテナ オーケストレーション プラットフォームである Kubernetes です。Kubernetes は、コンテナ化されたアプリケーションの展開、スケーリング、管理を自動化します。 Kubernetes を使用すると、複数のホストにわたるコンテナ クラスターの管理と調整が可能になり、フォールト トレランスやスケーラビリティなどのサービスが提供されます。

注: Kubernetes は、「K」と「s」の間に 8 つの文字があるため、K8s と呼ばれることがよくあります。

アーキテクチャとコンポーネント

Kubernetes デプロイメントは Kubernetes クラスターと呼ばれ、コントロール プレーンとノードの 2 種類のリソースで構成されます。各クラスターには、1 つ以上のコンテナで構成されるポッド内でコンテナ化されたアプリケーションを実行するワーカー ノードのセットがあります。これらのノードは、次の図に示すようにコントロール パネルによって管理されます。実稼働環境では、クラスターには複数のワーカー ノードが含まれ、コントロール プレーンは複数のマシンで実行されるため、高可用性とフォールト トレランスが確保されます。

コントロールパネルのコンポーネント

コントロール パネルの主なコンポーネントは次のとおりです。

  • etcd: Kubernetes クラスター データ、サービス検出の詳細、API オブジェクトを保存するためのキー値ストア。
  • kube-scheduler: ワーカーノード上で新しく作成されたポッドをスケジュールするために使用されます。
  • kube-controller-manager: ノード障害を処理するために、ノード コントローラーやジョブ コントローラーなどのコントローラー プロセスを実行します。クラウド統合用の個別のコントローラー コンポーネントもあります。
  • kube-apiserver: Kubernetes API サーバーはクラスターの主な管理エンティティであり、すべての REST リクエストを受信します。

ノードコンポーネント

上の図に示すように、Kubernetes クラスター内の各ワーカー ノードもいくつかのコンポーネントを実行します。コンテナランタイムとして Docker を指定しました。ただし、Kubernetes は他の多くのランタイムもサポートしています。全体像は以下のとおりです。

  • Kubelet: Pod 内のコンテナを管理し、コンテナが適切に実行され、正常な状態を維持することを保証します。
  • Kube-proxy: インターネットまたはクラスター内からの Pod のネットワーク通信を許可します。

コアコンセプト

まず、Kubernetes に関連するいくつかの基本的な概念を理解しましょう。

  • ポッド: Kubernetes の基本的な構成要素。 Pod は Kubernetes でデプロイ可能な最小の単位であり、1 つ以上のコンテナが含まれます。
  • ReplicaSets: 指定された数の Pod コピーが実行されていることを確認します。通常、レプリカセットを直接管理するのではなく、より高レベルの概念であるデプロイメントを使用します。
  • デプロイメント: ReplicaSet を管理するための高レベルの抽象化。デプロイメントを使用すると、アプリケーションの望ましい状態を宣言的に定義および更新できます。
  • サービス: ホスト上のポッドは相互に通信できます。ただし、Pod 上で実行されているアプリケーションを外部 (またはクラスター内) に公開する場合は、Service API を使用できます。サービスを使用すると、基盤となる Pod IP を抽象化し、負荷分散などのサービスを提供できます。
  • 名前空間: クラスター リソースを論理的に分割する方法を提供するため、リソース名は名前空間内で一意である必要があります。

サンプルアプリケーションをデプロイする

このセクションでは、ローカル Kubernetes クラスターである minikube にサンプル アプリケーションをデプロイします。ローカル システムに minikube をインストールするには、minikube Web サイトに記載されている手順に従う必要があります。次に、次のコマンドを使用してクラスターを起動します。

 minikube start

Kubernetes クラスターと対話するには、kubectl コマンドラインを使用して、Kubernetes API を通じてクラスターに対してさまざまな操作を実行します。 Kubernetes Web サイトに記載されている手順に従って、kubectl CLI をインストールします。あるいは、minikube には kubectl も付属しており、 minikube kubectl -- [commands] を使用してアクセスできます。

kubectl コマンドの一般的な構造は、<resource> に対して操作を実行するための <action> を提供することです。ノードのリストを取得するには、次のコマンドを使用できます。以下に例をいくつか示します。コマンドの最後に --help を追加すると、その使用方法に関する詳細情報が表示されることに注意してください。

 kubectl get nodes kubectl get nodes --help kubectl get pods kubectl describe pods nginx-pod

ポッドを作成する

最初のポッドを作成しましょう。実際には、Pod を直接作成するわけではありません。これらは、デプロイメントなどのワークロード リソースを使用して作成されます。以下は、YAML テンプレートを使用して Pod を作成する例です。

 apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx image: nginx:1.25.1 ports: - containerPort: 80

Pod の名前は nginx-pod で、1 つのコンテナ nginx が含まれています。繰り返しになりますが、Pod は Kubernetes の基本的な構成要素です。 Pod は Kubernetes でデプロイ可能な最小単位であり、最も一般的な使用例は、各 Pod が 1 つのコンテナを実行する、Pod ごとのコンテナ モデルです。

kubectl は、命令型と宣言型の 2 つの方法で使用できます。宣言的に使用する場合は、上記の YAML ファイルなど、目的の状態を記述したマニフェストを提供し、それをクラスターに送信して、それを実現する方法を kubectl が決定します。一方、命令型で使用する場合は、kubectl に実行するアクションを指示するために、クラスター固有のコマンドを提供する必要があります。

上記のファイルに示されている Pod を作成するには、まず nginx-pod というファイルに内容を保存し、次のコマンドを実行します。

 kubectl apply -f nginx-pod.yaml kubectl get pods

Pod のステータスが ContainerCreating から Running に変わるまでには数秒かかる場合があります。

2 番目のコマンドは Pod のリストを取得し、すべてがうまくいけばそこにリストされている Pod を見つけることができます。

これで最初のポッドが作成されました。

ただし、 Pod はクラスター内で実行されており、デフォルトでは直接アクセスできないため、 http://127.0.0.1: 80 にアクセスすることはできません

通常、Pod に直接アクセスすることはありませんが、デモンストレーションの目的で、kubectl のポート転送機能を使用できます。この機能は、ホストと Pod の間にトンネルを確立し、ホストからのトラフィックを Pod の指定されたポートに渡します。

 kubectl port-forward nginx-pod 8080:80

上記のコマンドを実行した後、ブラウザで http://127.0.0.1:8080 にアクセスすると、nginx サーバーのウェルカム ページが表示されます。ポート転送セッションを終了するには、「Ctrl + C」を押します。これでポッドを削除できるようになりました。次に、デプロイメントを作成してポッドを管理します。

 kubectl delete pod nginx-pod kubectl get pods

デプロイメントを作成する

次のマニフェストを使用してデプロイメントを作成します。

 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:1.25.1 ports: - containerPort: 80

このリストには 3 つの重要な部分があります。

  1. デプロイメント名は nginx-deployment です。
  2. レプリカの数を 2 に指定して ReplicaSet を作成します。ReplicaSet は、指定された数の Pod レプリカが常に実行されるようにすることをすでに学習しました。デプロイメントの名前は、後でレプリカの名前に影響します。
  3. 最後に、12 行目から 21 行目では、Pod のテンプレートが指定されます。

マニフェストを nginx-deployment.yaml ファイルに保存し、次のコマンドを使用してデプロイメントを作成します。

 kubectl apply -f nginx-deployment.yaml kubectl get deployments

すべてがうまくいけば、リストにデプロイメントが表示されるはずです。 READY 列の 2/2 は、ReplicaSet で指定された番号と一致します。

ここで、ポッドを削除し、新しいポッドが自動的に起動される様子を観察することで、デプロイメントの可用性をテストできます。コマンドは次のとおりです。

 kubectl get pods kubectl delete pod nginx-deployment-7d6955794c-s8c2h kubectl get pods

1 つの Pod が削除されるとすぐに、別の名前の別の Pod がすぐに作成されることがわかります。

サービスを作成する

サービス API を使用して、Pod 上で実行されているアプリケーションを外部に公開します。サービスを使用すると、基盤となる Pod の IP を抽象化し、負荷分散などのサービスを提供できます。通常、複数の種類のサービスを作成できます。サービスを作成するには、次のコマンドを使用します。

 kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service --port=80

kubectl expose コマンドを使用すると、Kubernetes オブジェクト (ここでは Deployment) を新しい Kubernetes サービスとして公開できます。コマンドを実行すると、新しく作成されたサービスがサービス リストに表示され、describe コマンドを使用して、以下に示すように、サービスに関する詳細情報を取得できます。

 kubectl get services kubectl describe service nginx-service

サービスにアクセスするために使用できるランダム ポートを指定する NodePort フィールドの値に注意する必要があります。 minikube を使用しているため、次のコマンドを使用してサービスにアクセスできます。

 minikube service nginx-service

すべてがうまくいけば、nginx のウェルカム ページが開きます。

要約する

Kubernetes は、オープンソースで拡張可能なコンテナ オーケストレーション プラットフォームです。 Kubernetes を使用すると、複数のホストにわたるコンテナのクラスターの管理と調整が可能になり、フォールト トレランスやスケーラビリティなどのサービスが提供されます。

<<:  移植性と相互運用性: マルチクラウド成功の秘訣​

>>:  生成 AI とクラウド ネイティブは期待が膨らんでいる時期にあります。それらは企業変革よりも重要ですか?

推薦する

Docker プライベート イメージ リポジトリとは何ですか?

この記事はWeChatの公開アカウント「Invincible Coder」から転載したもので、著者は...

gcorelabs: ポーランドの KVM 仮想 VPS、200Mbps、無制限のトラフィック、Alipay/PayPal 対応

gcorelabs は最近、ポーランド (ワルシャワ) のデータ センターを VPS 事業に追加しま...

マイクロブログマーケティングの急速な進歩により、新たな「マイクロ」産業チェーンが誕生した。

微博マーケティングのケーキは、鋭い嗅覚を持つ人々にビジネスチャンスを嗅ぎつけさせ、微博マーケティング...

ジケ・パング合併の余波:不明確な組織構造と従業員流出

編集者注:高級で上品なインターネット業界でも、「合併と買収」は非常に注目を集める話題であり、海外では...

プライベートクラウド戦略を成功させるための4つのステップ

企業がクラウド コンピューティングのメリットを享受するには、プライベート クラウド コンピューティン...

2013年のSEO: コンテンツマーケティングとの組み合わせが必須

マヤの予言の終焉とともに、私たちが迎えているのは世界の終わりではなく、新たな世界の終わりの始まりです...

資格のある医療計画コピーライターになる方法

コピーライティングについて言えば、優れた企画コピーライターには非常に深い基礎が必要であることは誰もが...

大手企業はすでに、クラウドコンピューティングをさらに強力にするためにブロックチェーンを導入している。

いわゆるクラウドは、主に企業や個人がコンピューター上のデータをクラウドにアップロードして保存および計...

クラウド コンピューティング アーキテクチャにおける Cloud TiDB の技術的秘密 (パート 1)

最近、中国を代表する中立型クラウドコンピューティングサービスプロバイダーであるUCloudと、国内の...

サーバー: reprisehosting-dual-channel L5640/32g メモリ/1T ハードディスク/シアトル/45 USD

reprisehosting.com の特別サーバープロモーションはここです。米国西海岸のシアトルデ...

アリママ公式解釈:タオバオ不正行為の手数料を凍結する理由

A5 Webmaster Network(admin5.com)は11月22日、多くのTaobaoア...

JD.comは「网银」という二重綴りのドメイン名を取得し、オンラインバンキングに使用する予定

4月12日、JD.comはダブルピンインドメイン名wangyin.comをひっそりと購入し、オンライ...

gigsgigscloud - 米国高防御VPS/CN2 GIAネットワーク/500g防御/Alipay

gigsgigscloud は新製品「US 高防御 VPS」をリリースしました。現在先行販売中で、6...

YYを「密かに」店頭から撤去し、匿名ソーシャルアプリ「プライベートサークル」を立ち上げた

[要約] 秘密権使用者の特徴は、若く、教養が高く、活力があり、新しいものを好むことです。彼らは家にこ...

タオバオアライアンスの新ルールのもと、店舗間の許可なしに12大節を祝うにはどうすればいいでしょうか? (1つ)

人生はいつも順風満帆というわけではありません。タオバオ連盟はユーザーの店舗間決済権限を大規模に削除し...