10日で覚えるKubernetesDay 2: クラスタの構築とkubectl
books.chapter 210日で覚えるKubernetes

Day 2: クラスタの構築とkubectl

今日学ぶこと

  • ローカルでKubernetesクラスタを構築する方法
  • kubectlの基本操作
  • クラスタの状態確認とノード情報の取得
  • YAMLマニフェストの基本構造

Kubernetes環境の選択肢

Kubernetesを学習するには、まずクラスタが必要です。ローカル環境で使える主な選択肢を紹介します。

ツール 特徴 おすすめ用途
Docker Desktop Docker Desktopに内蔵。ワンクリックで有効化 Docker経験者に最適
Minikube 軽量なローカルクラスタ。アドオンが豊富 学習・開発
kind Docker上にクラスタを構築。マルチノード対応 CI/CD、テスト

Docker Desktopを使う場合(推奨)

Dockerを既にインストールしているなら、最も簡単な方法です。

  1. Docker Desktopを開く
  2. SettingsKubernetes を選択
  3. Enable Kubernetes にチェックを入れる
  4. 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 宣言的にリソースを作成・更新するコマンド

重要ポイント

  1. Docker Desktopを使えばワンクリックでKubernetesを有効化できる
  2. kubectlは全ての操作の入り口。基本コマンドを覚えよう
  3. 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について深く掘り下げます。