Kubernetes学習メモ(1)

Kubernetesを勉強したときのコマンドのメモです。流石に逃げられなくなった。随時追加します。
Pod、YAMLの記述、ReplicaSetまで。
目次
教材
- Udemy : Kubernetes for the Absolute Beginners – Hands-on
- 英語音声だが日本語字幕あり。セールで買うと安い
- KodeKloud : Crash Course: Kubernetes For Absolute Beginners
- 別途KodeKloudの登録が必要(無料)
環境構築
EC2でARM系、Ubuntuでやってみた。Kubernetes(k8s)の前提でCPUコアが2以上必要。
- Dockerのインストール
- Minikubeのインストール:k8sの動作本体
- kubectlのインストール
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の中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内
技術書コーナー
北海道の駅巡りコーナー
