DevOps ダイジェストへようこそ! コンテナ化と、コンテナ化されたアプリケーションの大規模なオーケストレーションに興味があるなら、ここはまさにうってつけの場所です。このブログでは、Kubernetes とは何か、なぜ重要なのか、どのように機能するのかなど、Kubernetes について包括的に紹介します。開発者、運用担当者、または最新のテクノロジーのトレンドに関心がある人であれば、このブログは Kubernetes の基本的な概念と、Kubernetes がなぜこれほど人気になったのかを理解するのに役立ちます。
Kubernetes とは何ですか?
Kubernetes は、クラスター化された環境内で数百、数千のコンテナの展開と管理をオーケストレーションするために使用されるコンテナ オーケストレーション テクノロジーです。
- コンテナを展開および管理するプロセス全体は、コンテナ オーケストレーションと呼ばれます。たとえば、ユーザー数が増えるとアプリケーションをスケールアップし、負荷が減るとスケールダウンします。
Kubernetes アーキテクチャ
-
ノード: Kubernetes がインストールされているマシン (物理または仮想) です。Kubernetes によってコンテナが起動されるワーカー マシンです。
-
集まる: これはグループ化されたノードのセットです。そのため、1 つのノードに障害が発生しても、他のノードからアプリケーションにアクセスできます。また、負荷の分散にも役立ちます。
-
マスター: これは、Kubernetes がインストールされ、マスターとして構成されている別のノードです。クラスター内のノードを監視し、ワーカー ノード上のコンテナーの実際のオーケストレーションを担当します。
-
クラスターを管理する
-
クラスターのメンバーに関する情報を保存します
-
ノードを監視する
- API サーバー
- etcd サービス
- kubelet サービス
- コンテナランタイム
- コントローラー
- スケジューラ
Kubernetes のコンポーネント
-
API サーバー: これは、Kubernetes のフロントエンドとして機能します。ユーザー、管理デバイス、およびコマンド ライン インターフェイスはすべて、API サーバーと通信して Kubernetes クラスターと対話します。
-
など: これは、クラスターの管理に使用されるすべてのデータを保存するために Kubernetes によって使用される、信頼性の高い分散型キー値ストアです。
-
マスター間で競合が発生しないように、クラスター内でロックを実装する責任があります。
-
クラスター内に複数のノードと複数のマスターがある場合、etcd はクラスター内のすべてのノードにそのすべての情報を分散形式で保存します。
-
スケジューラ: 複数のノードに作業やコンテナを分散する役割を担う。新しく作成されたコンテナを探し、ノードに割り当てます。
4. コントローラー: (オーケストレーションの頭脳)
-
ノード、コンテナ、エンドポイントがダウンしたときにそれを検知して対応する責任がある。
-
彼らは新しいコンテナを立ち上げる決断をする
5. コンテナランタイム: コンテナを実行するために使用される基盤ソフトウェアです。例:Docker
6. クベレット: クラスター内の各ノードで実行されるエージェントです。
- コンテナがノード上で期待通りに実行されていることを確認する役割を担う。
- また、マスターと対話してワーカーノードのヘルス情報を提供し、マスターがワーカーノードに要求したアクションを実行する役割も担っています。
Kubernetes はワーカーノードにコンテナを直接デプロイしません。
クベクトル
- これはコマンドラインユーティリティです
- Kubernetesクラスタ上で申請者をデプロイおよび管理するために使用されます
- クラスター情報、クラスター内の他のノードのステータスなどを取得します。
Kubernetes ポッド
ポッドはKubernetesで作成および管理できる、デプロイ可能な最小のコンピューティング単位です。
-
ポッドは通常、アプリケーションを実行するコンテナと1対1の関係を持ちます。
-
スケールアップするには新しいポッドを作成し、スケールダウンするには既存のポッドを削除します。
Q: ポッドにはコンテナを 1 つだけ含めることができますか?
いいえ、通常は同じ種類の複数のコンテナではないという点を除けば、1 つの Pod に複数のコンテナを含めることができます。
これらのコンテナは同じネットワーク空間を共有しているため、localhost として相互参照することで直接通信することもできます。また、同じストレージ空間も簡単に共有できます。
コマンド
- Kubectl の実行: クラスタにアプリケーションをデプロイするために使用されます
- kubectl クラスター情報: クラスターに関する情報を表示するために使用されます
- kubectl ノードを取得します: クラスタを構成するすべてのノードを一覧表示するために使用されます。
- kubectl ポッドを取得します: 利用可能なポッドのリストを確認するために使用します
- kubectl run (ポッド名) –image = (イメージ名): dockerhubで利用可能なdockerイメージを指定してポッドを作成するために使用されます
- kubectl describe pod (ポッド名): ポッドに関する詳細情報を取得するために使用します
- kubectl get pods -o wide: ポッドが実行中のノードやポッドのIPアドレスなどの追加情報を提供します。
- kubectl create Deployment (ポッド名) –image = (イメージ名): バージョン1.18以降、命令型コマンドを使用してデプロイメントを作成するには、「kubectl create」を使用する必要があります。
Kubernetes の YAML
(ポッド定義.yml)
Kubernetes 定義ファイルには常に 4 つの最上位フィールドが含まれます。
- APIバージョン
- 親切
- メタデータ
- スペック
- APIバージョン: これは、オブジェクトの作成に使用している Kubernetes API のバージョンです。
親切 |
バージョン |
---|---|
ポッド |
v1 |
サービス |
v1 |
レプリカセット |
アプリ/v1 |
展開 |
アプリ/v1 |
-
親切: これは、作成しようとしているオブジェクトのタイプを指します。例: POD、Service、ReplicaSet、Deployment。
-
メタデータ: これは、オブジェクトの名前やラベルなどのデータです。ご覧のとおり、メタデータは辞書の形式になっています。
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
- 仕様: 作成するオブジェクトに応じて、ここでそのオブジェクトに関する追加情報を Kubernetes に提供します。
spec:
containers:
- name: nginx-container
image: nginx
リソース
- テックウィズプレリット
- コーデクロード
結論
結論として、Kubernetes はコンテナ オーケストレーションの頼りになるソリューションとなり、組織はコンテナ化されたアプリケーションを簡単に導入、管理、拡張できるようになりました。Kubernetes は、その堅牢な機能セットと柔軟性により、さまざまな業界で広く採用され、最新のソフトウェアの開発、導入、管理の方法に革命をもたらしました。開発者、運用担当者、または最新のテクノロジーのトレンドに関心があるだけの人であっても、Kubernetes を理解することは、今日のテクノロジー環境では不可欠です。この入門書が、Kubernetes の世界とその可能性を探り始めるための強固な基盤を提供できたことを願っています。