半農半エンジニアの記録

関西在住エンジニア。個人で勉強・開発したこと、その他趣味のことを書いてます。農業してます。

kubernetesの公式で紹介されているPodを作成しようとして400 BadRequestが返された話

phpのk8sクライアントライブラリを使ったときの話です。

使用したライブラリ

こちら、k8s公式でも紹介されているので信頼性が高いと思い採用しました。

GitHub - maclof/kubernetes-client: A simple yet elegant client for accessing and controlling a Kubernetes cluster (https://github.com/kubernetes/kubernetes)

400 BadRequest

k8s公式で紹介されているPodの定義です。

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

で、これを読み込んでcreateする。

$client = new Client([
    'master' => 'http://master.mycluster.com',
]);
$conf = yaml_parse_file('pod.yml')
$client->pods()->create($conf);

すると400 BadRequestが返ってきます。もちろんPodは作成されません。

CLIではエラーが出ない

でもこれ、コマンドで実行するとエラーが発生しないんです!(いやそれが当たり前なんだよ公式だぞ

kubectl apply -f pod.yml

エラーを解消する

で、メッセージ見るとなんか言うてる。意訳すると

( があるべきとこに { があるよ?何してんの?

(あれ、逆だったかな。後ほど確認します。)

いやいやお前が何言ってんねん、と思いYAMLを確認すると、

emptyDir: {}

めっちゃ怪しいヤツいるやんー。

こうしてやりました。

emptyDir:

でPHP実行。上手くいきました!

ちなみに修正後のファイルでもCLIはちゃんと実行できます。

課題(解決)

とりあえず上記の通りPHPのAPIクライアントで実行した時にエラーになったので、こいつの問題である可能性が高い。

でもちゃんと調べてないのでそれを調べる。

追記

無事解決しました。やはりAPIクライアントの問題だったので、修正してプルリクエスト送りました。

https://www.m24te28.com/entry/20190308/1552038961www.m24te28.com