Docker - Kubernetesの動作
こんにちは、未来のテクノロジーMageさんたち!Kubernetesの興奮する世界への旅にあなた们的ガイドとして参加すること、とても嬉しいです。コンピュータサイエンスを多年間教えてきた者として、KubernetesはSF映画の不思議な生物のように聞こえるかもしれませんが、実際にはコンテナ化されたアプリケーションを管理する方法を革命起こしている強力なツールです。それでは、一緒に見ていきましょう!
Kubernetesとは?
Kubernetesは、しばしばK8s('K'と's'の間に8文字があるから)と略されるオープンソースのコンテナオーケストレーションプラットフォームです。これはちょっと難しい言葉ですが、簡単に説明しましょう。
あなたが巨大なピザ配送サービスを運営していると仮定しましょう。多くの注文(アプリケーション)が入ってくるので、効率的に配達ドライバー(コンテナ)を管理する必要があります。Kubernetesは、どのドライバーがどの注文を引き受けるかを決定し、常に十分なドライバーが路上にいることを確保し、ドライバーの車が故障した場合にバックアップを呼び出すような超スマートなマネージャーです。
主要な概念
詳細に進む前に、いくつかの主要なKubernetes概念を理解しましょう:
- Pods:Kubernetes中最も小さなデプロイ可能なユニット。
- Nodes:Kubernetesクラスター内のワーカーマシン。
- Cluster:コンテナ化されたアプリケーションを実行するノードの集合。
- Control Plane:クラスターを管理するKubernetesの「脳」。
Kubernetesの動作
基本的な要素が揃いましたので、Kubernetesがどのようにこれらを組み合わせて美味しいテクノロジー soufflé にするか見てみましょう!
1. Control Plane
Control Planeは、私たちのキッチンのヘッドシェフのようです。クラスタ全体に関するグローバルな決定を行い、クラスタイベントの検出と対応を行います。
apiVersion: v1
kind: Pod
metadata:
name: control-plane-pod
spec:
containers:
- name: kube-apiserver
image: k8s.gcr.io/kube-apiserver:v1.21.0
- name: kube-controller-manager
image: k8s.gcr.io/kube-controller-manager:v1.21.0
- name: kube-scheduler
image: k8s.gcr.io/kube-scheduler:v1.21.0
このYAMLファイルは、Control Planeの主要なコンポーネントを含むPodを定義しています。現実のシナリオでは、これらのコンポーネントは高可用性を確保するために別々のマシン上で動作するのが一般的です。
2. Nodes
Nodesは、私たちのKubernetesのハチの働く蜂です。実際にコンテナ化されたアプリケーションを実行するマシンです。
apiVersion: v1
kind: Node
metadata:
name: worker-node-1
spec:
podCIDR: 10.244.1.0/24
status:
capacity:
cpu: "2"
memory: 4Gi
このYAMLは、2コアのCPUと4GBのメモリを持ちます。現実では、Nodeを手動で作成することは通常行いません。クラウドプロバイダーやオンプレミスインフラストラクチャーによってプロビジョニングされます。
3. Pods
Podsは魔法が起こる場所です!Kubernetes中最も小さなデプロイ可能なユニットで、通常は1つ以上のコンテナを含みます。
apiVersion: v1
kind: Pod
metadata:
name: my-awesome-app
spec:
containers:
- name: my-app-container
image: my-app:1.0
ports:
- containerPort: 8080
このYAMLは、「my-awesome-app」という名前のPodを定義し、単一のコンテナを含んでいます。コンテナは「my-app:1.0」イメージに基づいており、ポート8080を公開しています。
Kubernetesの実行
今、材料が揃いましたので、Kubernetesがどのようにそれらをすべてオーケストレートするか見てみましょう!
- あなたはKubernetesにアプリケーション(通常はYAMLファイルの形式で)を提出します。
- Control PlaneのAPIサーバーがこのリクエストを受け取ります。
- スケジューラがどのNodeがアプリケーションを実行するための十分なリソースを持っているか決定します。
- 選択されたNodeのkubeletがPodを作成し、コンテナを開始します。
- Control PlaneはすべてのPodとNodeの状態を継続的に監視します。
Podが失敗した場合、Kubernetesは自動的に再起動できます。Nodeが失敗した場合、KubernetesはそのNode上で動作しているすべてのPodを他の健康なNodeに再スケジューリングします。レストランでの完璧なダイニング体験を確保するために非常に注意深いウェイターのチームがいるようなものです!
Kubernetesメソッド
以下は、Kubernetesの一般的なメソッドの表です:
メソッド | 説明 |
---|---|
kubectl create | ファイルまたは標準入力からリソースを作成 |
kubectl get | 1つまたは複数のリソースを表示 |
kubectl describe | リソースの詳細情報を表示 |
kubectl delete | リソースを削除 |
kubectl apply | リソースに設定を適用 |
kubectl logs | Pod内のコンテナのログを印刷 |
kubectl exec | コンテナ内でコマンドを実行 |
kubectl port-forward | 1つまたは複数のローカルポートをPodに転送 |
結論
そして、ここまでがfolks!Kubernetesの基本的なコンポーネントから、コンテナ化されたアプリケーションをスムーズに動作させる方法まで、 whirlwind tour を行いました。覚えておいてください、複雑な料理を料理するのと同様に、Kubernetesのマスターするには時間と練習が必要です。しかし、忍耐と好奇心を持っていれば、すぐにプロのようにコンテナをオーケストレートできるようになるでしょう!
この終わりに、ある生徒が私に言った言葉を思い出します。「Kubernetesは猫を飼うのと同じで、猫はコンテナで、Kubernetesは世界で一番の猫飼いです。」これ以上の言葉は必要ありません!
探索を続け、学び続け、最も重要なのは、テクノロジーを楽しむことを忘れないでください。次回まで、ハッピーなコンテナライズを!
Credits: Image by storyset