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 とクラウド ネイティブは期待が膨らんでいる時期にあります。それらは企業変革よりも重要ですか?

推薦する

張有為のインターネットマーケティングに関する見解:正しいと思うことは間違っている

現在、多くの企業がオンラインマーケティングを行っていますが、オンラインマーケティングとは何かを明確に...

記事をきっかけにSEO研修について考える

今日、A5 の記事を読みました。SEO トレーニング市場の闇について書かれていました。怖いと思いまし...

2017 年のクラウド コンピューティングとデータ センター業界のレビューと概要

2016 年を振り返ると、多くの大企業がデータセンターのワークロードをクラウドに移行する計画を立てて...

モバイルインターネット2017年春レポート: 10億人以上のユーザーがいるアプリの世界について語る

本日の焦点は、2017年春のレポートです。 2016年末のレポートで、QM氏はモバイルインターネット...

中国サイバースペース管理局は、国民の個人情報保護のため、3種類の情報の整理に注力している。

北京の新華社が26日伝えたところによると、記者が国家インターネット情報局から得た情報によると、4月下...

ウェブマスターが優れたウェブサイト説明タグを書くための3つの方法の簡単な分析

現在、ウェブサイトの最適化に関して、ほとんどのウェブマスターは、ウェブサイトの説明タグは最適化にほと...

20% オフ: tmzvps - $8/8 コア/2g メモリ/100g ハード ドライブ/無制限トラフィック/1000M ポート

中級から上級の VPS 販売業者である tmzvps.com は、ロサンゼルスを拠点とする webn...

Jingan「高速クラウドサーバー」レビュー、高性能/BGPネットワーク/クラウド

先月、私はJingan Kuaiyun VPSに注目し、Kuaiyun VPSのレビューを書きました...

探索は喜びと不安をもたらす

Google の「ロボット」がインターネットの隅々までクロールして以来、検索エンジンは人々にとって欠...

virtury: パキスタン VPS、月額 10 ドルから、帯域幅 100Mbps、メモリ 1G/コア 1 個/SSD 25g/トラフィック 1T

パキスタンのホスティングプロバイダーであるVirturyは、主に仮想ホスティング、VPS/クラウドサ...

Baidu Tieba はビジネスチャンスを活かすために再び刷新されました。ユーザーエクスペリエンスはどこに位置づけられるべきでしょうか?

これまで、百度鉄馬は大小合わせて10回以上の改訂を経ており、その中でも3回の大改訂が最も大きな改訂で...

シマラヤの上場は同社を救った

過去2年間、オンラインオーディオ業界の競争はますます激しくなっています。一方では、インターネット大手...

検索エンジンの3つの柱がSEOの機会を生み出す

SosoとSogouが合併してから1週間が経ちました。ニュースが発表されるとすぐに、多くの友人が関連...

一歩先へ:百度諾米O2Oチェスゲームでリンクされた馬

2014年、BATが地元の生活の場に参入すると、ほとんど忘れ去られていた共同購入業界が突如として熱を...