こしあん
2025-12-10

Kubernetes学習メモ(1)


1{icon} {views}


Kubernetesを勉強したときのコマンドのメモです。流石に逃げられなくなった。随時追加します。

Pod、YAMLの記述、ReplicaSetまで。

教材

環境構築

EC2でARM系、Ubuntuでやってみた。Kubernetes(k8s)の前提でCPUコアが2以上必要

Podの操作

Podの作成。kubectl runはデバッグ・テスト用のコマンドで、本番のデプロイをならkubectl create deploymentを推奨。

nginxのPodを作成

kubectl run nginx --image=nginx

Podの一覧を取得

kubectl get pods

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          9s

Podの状態を取得(IPを含めてみたいときは-o wideオプションをつける)

kubectl describe pod nginx

Name:             nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             minikube/192.168.49.2
(略)
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  3m44s  default-scheduler  Successfully assigned default/nginx to minikube
  Normal  Pulling    3m43s  kubelet            Pulling image "nginx"
  Normal  Pulled     3m37s  kubelet            Successfully pulled image "nginx" in 5.741s (5.741s including waiting). Image size: 172250416 bytes.
  Normal  Created    3m37s  kubelet            Created container: nginx
  Normal  Started    3m37s  kubelet            Started container nginx

Podの削除

kubectl delete pod nginx

deploymentでPodを作成

kubectl create deployment nginx --image=nginx

# 比較用
kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-66686b6766-tmlt5   1/1     Running   0          9s

deploymentでPodを削除

kubectl delete deployment nginx

ノードの状態を取得:(OSを含めてみたいときは-o wide

kubectl get nodes

YAMLでのPodの作成

s01_pods.yamlに以下のファイルを作成。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
    tier: frontend
spec:
  containers:
    - name: nginx
      image: nginx

Podのデプロイ

kubectl apply -f ./s01_pods.yaml

Podの削除

kubectl delete -f ./s01_pods.yaml

(Terraformっぽくてシンプルで良い)

環境変数を使う:コンテナ設定にenvを追加

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
    tier: frontend
spec:
  containers:
    - name: nginx
      image: nginx
      env:
        - name: MY_ENV_VALUE
          value: helloworld1234

Podの環境変数を読む

kubectl describe pod nginx

(略)
    Ready:          True
    Restart Count:  0
    Environment:
      MY_ENV_VALUE:  helloworld1234

ReplicaSet

このファイルをs03_replicaset.yamlとして保存

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: busybox-replicaset
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 3
  template:
    metadata:
      name: busybox
      labels:
        app: myapp
    spec:
      containers:
        - name: busybox
          image: busybox
          command: ["sh", "-c", "sleep 3600"]  # CrashLoopBackOff対策のため1時間スリープして生きておく

ReplicaSetの作成

kubectl apply -f ./s03_replicaset.yaml

ReplicaSetの一覧を取得

kubectl get replicaset

NAME                 DESIRED   CURRENT   READY   AGE
busybox-replicaset   3         3         3       2m

※Podの状態取得をすると3つ展開表示される(例:Auto Scaling Group vs EC2のような関係)

kubectl get pods

NAME                       READY   STATUS    RESTARTS   AGE
busybox-replicaset-49fzh   1/1     Running   0          3m28s
busybox-replicaset-rcdws   1/1     Running   0          3m28s
busybox-replicaset-zzpbn   1/1     Running   0          3m28s

ReplicaSetの状態(詳細)を取得

kubectl describe replicaset busybox-replicaset

現在デプロイされているReplicaSetを編集する

システムが自動生成したファイルを編集し、保存すると反映されるが(例:レプリカ数の変更)本当にデバッグ用。

kubectl edit replicaset busybox-replicaset

レプリカ数を一時的に変更

YAMLを編集せずに、一時変更ならこちらのほうがお行儀は良さそう。

# レプリカ数を2にスケールダウン
kubectl scale replicaset busybox-replicaset --replicas=2


Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内

技術書コーナー

北海道の駅巡りコーナー


Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です