こんにちは。もう夏くらい暑くなってきましたね。ということで、色々外に出る機会が増えてきました。今年は色んなカンファレンスなどに参加してみたいので、今から調べることがたんまりあります。
ということで、今回もブログをかいていきましょう!
Kubernetes のリソースを作成していこう
今回は基礎のところになりますので、簡単なyaml ファイルからpod を作成していきます。
今回の使用想定ツールと環境は、
- WSL2
- minikube
- kubectl
の3つになります。これからの検証環境もminikube 上で実施していくことになります。
まずはminikube を起動しましょう
# 起動
minikube start
# status 確認
minikube status
それから適当にディレクトリを作って、pod.yml を作成していきます。
mkdir kube && cd kube
nano pod.yml
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
apiVersion: v1
kind: Pod
metadata:
name: tansanken
namespace: default
labels:
env: dev
spec:
containers:
- name: hello-world
image: hello-world
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
そして、このyaml の内容を実行するために、
# pod 作成
kubectl apply -f pod.yml
=>pod/tansanken created
metadata にかいたname のpod が表示されれば、問題なく作成されています。作成されているかどうかはkubectl のget コマンドで確認することができます。
kubectl get pods
NAME READY STATUS RESTARTS AGE
tansanken 0/1 CrashLoopBackOff 15 (4m43s ago) 56m
上記のような感じでname とstatus いつ作成されたかなどの情報や、restart がかかってどれくらいの時間が経過したかどうかが表示されます。ここまできたら、あとは削除対応をしていきます。
kubectl delete -f pod.yml
pod "tansanken" deleted
apply と同じように、delete でyaml ファイルを指定して削除していきます。deleted と表示されたら、pod も削除されていることになります。一連の、yml 作成・pod 作成・pod 削除の流れになります。案外docker みたいな感じで楽にできますね。pods がややこしくなったら、そうではないかもしれませんが。
ということで、yaml のファイルの中身を解説していきましょう!
yaml ファイルの中を解説
上の内容でテストとして記述します。それぞれを少し解説すると、このyaml ファイルには大きく4つの項目が存在します。apiVersion・kind・metadata・spec の4つになります。
apiVersion について
まず、apiVersion ですが、ここでは v1 というのを指定していますが、どうも他のバージョンもあるようです。特定の仕方はAPIGROUP に属しているかどうかによって、変わるようです。
# group に属する場合
apiVersion: apiextensions.k8s.io/v1
apiVersion: APIGROUP/APIVersion
# group に属さない場合
apiVersion: v1
この属しているかどうかの確認方法はコマンドで確認できるようです。api-resources に記載されているものがv1 に属していれば、apiVersion はv1 で書いてあげればよさそうです。
kubectl api-resources
次はkind ですね。
kind について
kind では、Kubernetes のオブジェクトの種類を指定するようです。オブジェクトの種類でどんなものがあるかと言いますと、
- Pod
- Service
- Deployment
- ReplicaSet
- StatefulSet
などなどがあります。まだまだ上げていないものもありますので、気になる方は調べてみてください。今回はPod を指定しています。Pod 自体の意味が、Kubernetes における最小のデプロイ可能な単位なので、恐らくObject も一緒の意味かと思います。なので、ここでどんなObject を定義するかによって、意味合いが少し変わっていくということですね。
metadata について
metadata:
name: tansanken
namespace: default
labels:
env: dev
この部分ですね。基本的には、ラベリングやenv を指定することができるようなセクションになっています。なので、ここでどんなname にするかをきめることができます。複数のpod をデプロイする場合は被らないように注意ですね。
spec について
最後にspec についてです。
spec:
containers:
- name: hello-world
image: hello-world
この部分です。ここはdocker をやっている方にはわかりやすいかもしれませんが、どんなimage を指定して、そのコンテナの名前をどうするのかをきめることができるセクションですね。今回はhello-world image にしていますが、nginx:latest とかも指定可能です。
まとめ
今回はKubernetes の基礎を書いてみました。最小単位での記述でしたので、今回は簡単だったかと思いますが、次回以降でもっと色んなオブジェクトに関してもかけたらいいなと思います!
コメント