tanke25616429のアウトプット

IT技術の基本を勉強したことをアウトプットします。Linux、Kubernetes、クラウド中心です。百番煎じくらいだけど誰かの役に立てばそれはそれでうれしい。

シンプルなpod / deploymentをコマンドラインで作る手順

目的

シンプルなpod / deploymentをコマンドラインで作る手順を整理する。複雑なことをしたいときは-o yamlオプションでYAMLファイルに書き出して編集し、kubectl create -f 作成したYAMLファイル名*1したほうがやりやすいことが多い。

バージョン

Kubernetesの1.18で確認。

master $ kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:50:46Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}

kubectl runコマンド

普通にkubectl run ポッド名 --image=イメージ名でPodを作成できる。これも以前のバージョンではエラーが出たような気がする*2

master $ kubectl run mypod --image=nginx
pod/mypod created

master $ kubectl get po
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          50s

--generator=run-pod/v1をつけても同じことができる。ただし、将来的にdepricatedになる旨の警告が出る。

master $ kubectl run mypod-2 --generator=run-pod/v1 --image=nginx
Flag --generator has been deprecated, has no effect and will be removed in the future.
pod/mypod-2 created
master $ kubectl get po
NAME      READY   STATUS    RESTARTS   AGE
mypod     1/1     Running   0          3m39s
mypod-2   1/1     Running   0          88s

レプリカ数(deploymentに含まれるpodの数*3)をオプションで指定すれば自動でdeploymentにしてくれるかと思いきや、--replicasのオプション自体がないようである。

master $ kubectl run mydeploy --image=nginx --re(tabを押下)
--record            --recursive         --requests          --requests=         --request-timeout   --request-timeout=  --restart           --restart=

kubectl createコマンド

kubectl runではなくkubectl createを使う方法もある。これで作れるリソースは下記の通りである。podは作れない。

master $ kubectl create(tabを押下)
clusterrole          configmap            deployment           namespace            priorityclass        role                 secret               serviceaccount
clusterrolebinding   cronjob              job                  poddisruptionbudget  quota                rolebinding          service

いきなりレプリカ数が複数のdeploymentは作れないようである。

master $ kubectl create deployment mydeploy --image=nginx --replicas=2
Error: unknown flag: --replicas
See 'kubectl create deployment --help' for usage.

したがって、レプリカ数が1のdeploymentを作成し、しかるのちにレプリカ数をkubectl scaleコマンドで増やす等の二段階のやり方になる。

master $ kubectl create deployment mydeploy --image=nginx
deployment.apps/mydeploy created
master $ kubectl describe deployments.apps mydeploy
Name:                   mydeploy
Namespace:              default
CreationTimestamp:      Thu, 30 Jul 2020 03:32:06 +0000
Labels:                 app=mydeploy
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=mydeploy
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
(略)
master $ kubectl scale deployment mydeploy --replicas=2
deployment.apps/mydeploy scaled
master $ kubectl describe deployments.apps mydeploy
Name:                   mydeploy
Namespace:              default
CreationTimestamp:      Thu, 30 Jul 2020 03:32:06 +0000
Labels:                 app=mydeploy
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=mydeploy
Replicas:               2 desired | 2 updated | 2 total | 1 available | 1 unavailable

いきなりレプリカ数が複数のdeploymentを作る方法だが、kubectl Cheat Sheet | Kubernetes を見ても特になさそうである。

まとめ

  • podを作成する:kubectl run pod名 --image=イメージ名
  • deploymentを作成する:kubectl create deployment deployment名 --image=イメージ名

ほとんどのリソースはkubectl createで作れそうなので、podだけrunで作る、と覚えておけばよさそう。

*1:もしくはkubectl apply -f ファイル名

*2:Podを作成時は--generator=run-pod/v1をオプションでつけないといけない気がしたが、つけなくてもできるようである。逆につけないとDeploymentが作成された気もする。残念ながら前のバージョンのクラスタが手元にないので確認はしてない。

*3:普段意識することはないが、正確にはdeploymentの中にreplicasetがあり、そこに含まれるpodの数である。