Kubernetes を基礎から学んでいこう

docker

こんにちは。もう夏くらい暑くなってきましたね。ということで、色々外に出る機会が増えてきました。今年は色んなカンファレンスなどに参加してみたいので、今から調べることがたんまりあります。

ということで、今回もブログをかいていきましょう!

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 の基礎を書いてみました。最小単位での記述でしたので、今回は簡単だったかと思いますが、次回以降でもっと色んなオブジェクトに関してもかけたらいいなと思います!

コメント

タイトルとURLをコピーしました