k8s入門
k8s的学习を始めると、多くの概念に戸惑うことが多いでしょう。Master、Node、Pod、Service、Namespaceといった用語が次々に登場します。そして、yamlファイルの設定 भी複雑に感じるかもしれません。
k8sを操作する際には、最も頻繁に使用するツールがkubectlです主なコマンドは以下の通りです:
kubectl get pods
kubectl create -f manifest.yaml
kubectl get namespaces
これらの概念は、実際にはk8sが提供する抽象的なリソースオブジェクトとして捉えることができます。k8sを一種のオブジェクト管理システム、例えばデータベースシステムのように考えると、理解しやすいでしょう。実際、k8sはetcdを分散データベースとして使用しており、すべてのリソース変更履歴がここに記録されます。
また、各リソースオブジェクト間には明確な関係성이存在します。これはリレーショナルデータベースにおけるテーブル間の関連性に類似しています。
シンプルなPodの作成
k8sクラスターが構築され、すべてのノードの状態がreadyとなったら、Podを作成できます。Podを作成すると、指定されたコンテナが自動的に起動します。
以下にPodを定義するシンプルなyamlを示します:
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
namespace: default
labels:
app: sample
spec:
containers:
- name: nginx-container
image: nginx:1.21
このyamlファイルを適用するには、以下のコマンドを実行します:
kubectl apply -f sample.yaml
Podの状態を確認ってみると、completedではなくRunningにならない場合があります。このような場合、describeコマンドで詳細情報を確認します:
kubectl describe pod sample-pod
すると、以下のようなエラーが表示されることがあります:
FailedCreatedPodSandBox k8s.gcr.io/pause:3.1
この問題は、k8sがすべてのPodのベースとしているpauseコンテナイメージを正しく取得できないことが原因です。解決策としては、インターネットからイメージを直接ダウンロードするか、registryの設定を変更する方法があります。dockerコマンドに慣れている場合は、docker saveとdocker loadを使用してイメージを転送するのが効果的です。
参考までに、k8s.gcr.ioレジストリからのイメージ取得に問題がある場合はMirroring Solutions such as those available onlineを確認してください。
問題が解決되면、Podの状態はRunningとなり、正常に動作します。
参考資料: yamlフォーマットによるPod定義の詳細
PodとNodeの概念解説
Podのライフサイクル