Udemyの某k8s研修を受講していたのだけど、
そのなかで kubectl run --restart=Always でpodを作成すると
自動的にdeploymentも作成される
とあり、
そのとおりにminikube上で動かしたところ..deploymentが作成されなかった(ただpodは正常に作成できた)。
で、調べてみると、以下の記事を見つけた
Kubernetes 1.18 broke “kubectl run”, here’s what to do about it
https://alexellisuk.medium.com/kubernetes-1-18-broke-kubectl-run-heres-what-to-do-about-it-2a88e5fb389a
上記を読むと、1.18で仕様が変わっているらしい
で minikube versionを実行すると..
minikube version: v1.19.0
..どうもなくなったバージョンのminikube環境だったようだ..
対処法も一応上記の記事には書かれている。
1. REST APIとclient-go(OpenFaaS)などのクライアントの使用
2. YAMLファイルを手作りするか、より現実的には、StackOverflowまたは既知の例からコピーして貼り付ける
3. kubectl run -o yaml --dry-run=client ~を使って一旦YAMLファイル化する
..最初の方法は研修環境minikubeでは無理。
2と3は、Deployment 設定がかかれたYAMLファイルを作ってkubectl apply -f しろということ。で、3は既存のkubectl runしたときpodを作成せずに一旦標準出力にYAML形式で出力してくれるので、これをもとにDeployment設定を書きなさいよ、ということらしい..
上記記事にはDeployment設定の入ったYAMLサンプルがはいっている(以下)。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-1
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
kubectl run --dry-run=client した形式を2番めのspecタグ内に書き込んで、おおもとのkindはDeploymentにして、Deployment用のspecを1番めにちょこちょこなおしていくしかない..つまりはYAMLファイルの書き方をきっちり勉強しないとだめってことだ。
..なんか、易しくないな..
追記)
..もうすこし kubectl を調べてみると
kubectl create deployment --image <イメージ先> <deployment名>
を実行することで、Deploymentを作れることが判明した。
#しかも、Udemy講座の先のセクションで上記の説明もあった..
..とはいえホットデプロイを運用でやるなら
結局はコマンドではなくYAML定義ファイルを
使いこなしたほうがいいのだとおもう。