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

2021年4月14日水曜日

DockerfileのCMDを環境変数で処理を分岐させる

小ネタシリーズ。

Dockerfileをビルドしたイメージをdocker run する際に
-e オプションで環境変数を渡して
CMDに指定したコマンドの実行を切り分けたい場合、
if else fi を使えば対応できます。

たとえば以下のようなDockerfileを書いて

FROM ubuntu:20.04

ENV type="fufufu"

# 環境変数 type が "fufufu" か "hehehe" の場合と
# それ以外の場合のかき分け
CMD if [ ${type} = "fufufu" -o ${type} = "hehehe" ]; then \
        echo "type is ${type}"; \
        echo "hehehe"; \
  else \
        echo "type ${type} is unknown"; \
    fi;



docker build -t test/test:latest .

を実行したあとで

docker run -e type="hehehe" test/test:latest

を実行すると

type is hehehe
hehehe


と表示され、

docker run -e type="hohoho" test/test:latest

を実行すると

type hohoho is unknown


と表示されます。

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

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