Day 2: クラスタの構築とkubectl
今日学ぶこと
- ローカルでKubernetesクラスタを構築する方法
- kubectlの基本操作
- クラスタの状態確認とノード情報の取得
- YAMLマニフェストの基本構造
Kubernetes環境の選択肢
Kubernetesを学習するには、まずクラスタが必要です。ローカル環境で使える主な選択肢を紹介します。
| ツール | 特徴 | おすすめ用途 |
|---|---|---|
| Docker Desktop | Docker Desktopに内蔵。ワンクリックで有効化 | Docker経験者に最適 |
| Minikube | 軽量なローカルクラスタ。アドオンが豊富 | 学習・開発 |
| kind | Docker上にクラスタを構築。マルチノード対応 | CI/CD、テスト |
Docker Desktopを使う場合(推奨)
Dockerを既にインストールしているなら、最も簡単な方法です。
- Docker Desktopを開く
- Settings → Kubernetes を選択
- Enable Kubernetes にチェックを入れる
- Apply & Restart をクリック
flowchart LR
A["Docker Desktop\n設定を開く"] --> B["Kubernetes\nタブを選択"]
B --> C["Enable Kubernetes\nにチェック"]
C --> D["Apply & Restart"]
D --> E["クラスタ起動完了"]
style A fill:#3b82f6,color:#fff
style E fill:#22c55e,color:#fff
Minikubeを使う場合
# Minikubeのインストール(macOS)
brew install minikube
# Minikubeのインストール(Linux)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# クラスタの起動
minikube start
# クラスタの停止
minikube stop
# クラスタの削除
minikube delete
kindを使う場合
# kindのインストール(macOS)
brew install kind
# kindのインストール(Linux)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# クラスタの作成
kind create cluster
# クラスタの削除
kind delete cluster
kubectlの基本
kubectlはKubernetesクラスタを操作するためのCLIツールです。Dockerのdockerコマンドに相当します。
インストール確認
# バージョン確認
kubectl version --output=yaml
# クライアントとサーバーのバージョンが表示される
kubeconfigについて
kubectlは~/.kube/configファイル(kubeconfig)を使って、どのクラスタに接続するかを管理します。
# ~/.kube/config の構造(簡略化)
apiVersion: v1
kind: Config
clusters:
- cluster:
server: https://127.0.0.1:6443
name: docker-desktop
contexts:
- context:
cluster: docker-desktop
user: docker-desktop
name: docker-desktop
current-context: docker-desktop
users:
- name: docker-desktop
user:
client-certificate-data: ...
| 要素 | 説明 |
|---|---|
| clusters | 接続先クラスタの情報 |
| users | 認証情報 |
| contexts | cluster + user の組み合わせ |
| current-context | 現在使用しているコンテキスト |
コンテキストの操作
# 現在のコンテキスト確認
kubectl config current-context
# 利用可能なコンテキスト一覧
kubectl config get-contexts
# コンテキストの切り替え
kubectl config use-context docker-desktop
クラスタの状態確認
ノード情報の取得
# ノード一覧
kubectl get nodes
# 出力例:
# NAME STATUS ROLES AGE VERSION
# docker-desktop Ready control-plane 10d v1.31.4
# ノードの詳細情報
kubectl describe node docker-desktop
クラスタ情報
# クラスタ情報
kubectl cluster-info
# 出力例:
# Kubernetes control plane is running at https://127.0.0.1:6443
# CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
# コンポーネントのステータス
kubectl get componentstatuses
Namespace(名前空間)
KubernetesはリソースをNamespaceで論理的に分離します。
# Namespace一覧
kubectl get namespaces
# 出力例:
# NAME STATUS AGE
# default Active 10d
# kube-system Active 10d
# kube-public Active 10d
# kube-node-lease Active 10d
| Namespace | 用途 |
|---|---|
| default | 明示的に指定しない場合のデフォルト |
| kube-system | Kubernetesシステムコンポーネント |
| kube-public | 全ユーザーがアクセス可能な公開リソース |
| kube-node-lease | ノードの状態管理用 |
kubectlの基本コマンド
kubectlのコマンドは基本的に以下の形式です。
kubectl [動詞] [リソースタイプ] [名前] [オプション]
よく使う動詞
| コマンド | 説明 | Docker対応コマンド |
|---|---|---|
get |
リソース一覧の表示 | docker ps |
describe |
リソースの詳細表示 | docker inspect |
create |
リソースの作成 | docker run |
apply |
マニフェストの適用(宣言的) | - |
delete |
リソースの削除 | docker rm |
logs |
ログの表示 | docker logs |
exec |
コンテナ内でコマンド実行 | docker exec |
出力フォーマット
# デフォルト(テーブル形式)
kubectl get nodes
# 詳細出力
kubectl get nodes -o wide
# YAML形式
kubectl get nodes -o yaml
# JSON形式
kubectl get nodes -o json
# カスタムカラム
kubectl get nodes -o custom-columns=NAME:.metadata.name,STATUS:.status.conditions[-1].type
YAMLマニフェストの基本
Kubernetesでは、リソースをYAMLマニフェストで定義します。全てのマニフェストに共通する4つの必須フィールドがあります。
apiVersion: v1 # APIバージョン
kind: Pod # リソースの種類
metadata: # メタデータ
name: my-pod
labels:
app: my-app
spec: # リソースの仕様(望ましい状態)
containers:
- name: my-container
image: nginx:1.27
| フィールド | 説明 |
|---|---|
| apiVersion | 使用するKubernetes APIのバージョン |
| kind | リソースの種類(Pod、Service、Deployment等) |
| metadata | 名前、ラベル、アノテーション等のメタ情報 |
| spec | リソースの望ましい状態の定義 |
リソースとAPIバージョン
| リソース | apiVersion |
|---|---|
| Pod | v1 |
| Service | v1 |
| ConfigMap | v1 |
| Deployment | apps/v1 |
| ReplicaSet | apps/v1 |
| Ingress | networking.k8s.io/v1 |
最初のPodを作成する
YAMLファイルを使って、最初のPodを作成してみましょう。
# my-first-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
Podの作成と確認
# Podの作成
kubectl apply -f my-first-pod.yaml
# Podの状態確認
kubectl get pods
# 出力例:
# NAME READY STATUS RESTARTS AGE
# my-nginx 1/1 Running 0 30s
# Podの詳細
kubectl describe pod my-nginx
# Podのログ
kubectl logs my-nginx
# Pod内でコマンド実行
kubectl exec -it my-nginx -- /bin/bash
# ポートフォワーディング(ローカルからアクセス)
kubectl port-forward my-nginx 8080:80
# ブラウザで http://localhost:8080 にアクセス
# Podの削除
kubectl delete pod my-nginx
# または
kubectl delete -f my-first-pod.yaml
flowchart LR
A["YAML作成"] --> B["kubectl apply"]
B --> C["Pod作成"]
C --> D["kubectl get pods\nで確認"]
D --> E["kubectl port-forward\nでアクセス"]
style A fill:#8b5cf6,color:#fff
style C fill:#3b82f6,color:#fff
style E fill:#22c55e,color:#fff
便利なkubectlテクニック
エイリアスの設定
# ~/.bashrc または ~/.zshrc に追加
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgs='kubectl get services'
alias kgn='kubectl get nodes'
コマンド補完の有効化
# Bash
echo 'source <(kubectl completion bash)' >> ~/.bashrc
# Zsh
echo 'source <(kubectl completion zsh)' >> ~/.zshrc
ドライラン
# 実際には作成せず、マニフェストを確認
kubectl apply -f my-first-pod.yaml --dry-run=client
# YAML出力で確認
kubectl run test-pod --image=nginx --dry-run=client -o yaml
まとめ
| 概念 | 説明 |
|---|---|
| Docker Desktop | 最も簡単なローカルKubernetes環境 |
| kubectl | Kubernetesクラスタを操作するCLIツール |
| kubeconfig | 接続先クラスタと認証情報を管理するファイル |
| Namespace | リソースを論理的に分離する仕組み |
| YAMLマニフェスト | リソースの望ましい状態を定義するファイル |
| kubectl apply | 宣言的にリソースを作成・更新するコマンド |
重要ポイント
- Docker Desktopを使えばワンクリックでKubernetesを有効化できる
- kubectlは全ての操作の入り口。基本コマンドを覚えよう
- YAMLマニフェストは4つの必須フィールド(apiVersion、kind、metadata、spec)を持つ
練習問題
問題1: 基本
kubectlを使って、クラスタのノード一覧を表示し、各ノードの詳細情報を確認してください。
問題2: Pod作成
以下の条件でPodを作成するYAMLマニフェストを書いてください。
- 名前:
hello-app - イメージ:
httpd:2.4 - ラベル:
app: hello - ポート: 80
チャレンジ問題
kubectl runコマンドの--dry-run=client -o yamlオプションを使って、YAMLマニフェストを自動生成してみましょう。生成されたYAMLと手書きのYAMLを比較してください。
参考リンク
次回予告: Day 3では「Podを理解する」について学びます。Kubernetesの最小実行単位であるPodの詳細と、マルチコンテナPodについて深く掘り下げます。