Translate

2021年4月21日水曜日

kubectl run --restart=Always を実行してもDeploymentが作成されない

 

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定義ファイルを
使いこなしたほうがいいのだとおもう。

0 件のコメント:

ClaudeをOpenAI O1のように思考させるDifyサンプルを試す

 Difyの「探索」タブにはさまざまなサンプルが載っており、その1つに「Thinking Claude (OpenAI O1 Alternative)」というものがある。   このサンプルがどういうものか、未だに自分でも解けない以下の問題をためしに聞いてみることにした。 『人類の...