kubectl-aiでKubernetesのマニフェストを自然言語で作成しよう!
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
KubernetesをOpenAIのChatGPTなどの大規模言語モデルと組み合わせて、人手で実施していたことをそれらに任せたい!と考えるのは今の時代自然となりました。k8sgptを利用してKubernetesクラスタのトラブルシューティングをしよう!では、クラスタのエラーメッセージから問題の説明・対応策などを提案してくれるOSSを紹介しました。今回はOpenAIのAPIを活用して自然言語でマニフェストの自動生成を可能とするOSSであるkubectl-aiを紹介します。
インストール
インストールはGithubのREADMEの通りです。brewが入っていれば以下のコマンドでインストールできます。
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai brew install kubectl-ai
利用方法
利用するにはOpenAIもしくはAzure OpenAI ServiceのAPIキーとまた利用するモデルを環境変数により設定します。検証時点で利用したkubectl-aiはv0.0.10を利用しており、そのバージョンでのデフォルトのモデルは gpt-3.5-turbo-0301
となっています。ちなみに最近追加されたsuffixが-0613
のモデルを用いた実装はされておらず動作しません。
export OPENAI_API_KEY=XXXXXXXXX export OPENAI_DEPLOYMENT_NAME=gpt-3.5-turbo-0301
上記の値が設定されていれば利用方法は非常に簡単です。以下のコマンドの引数に自然言語でマニフェスト生成のためのプロンプトを入力するだけです。今回は nginxをイメージとして利用してprivileged権限を持ったPodを作成する。30秒毎に `ls /dev/null` コマンドでlivenessProbeによりヘルスチェックをする。
ということにしました。
$ kubectl ai 'nginxをイメージとして利用してprivileged権限を持ったPodを作成する。30秒毎に `ls /dev/null` コマンドでlivenessProbeによりヘルスチェックをする。' ✨ Attempting to apply the following manifest: apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx-container image: nginx securityContext: privileged: true livenessProbe: exec: command: - sh - -c - ls /dev/null initialDelaySeconds: 30 periodSeconds: 30 Use the arrow keys to navigate: ↓ ↑ → ← ? Would you like to apply this? [Reprompt/Apply/Don't Apply]: + Reprompt ▸ Apply Don't Apply
生成されたマニフェストは上記のようなものです。おおむね指示通りのマニフェストが生成されました。生成されたマニフェストをapplyするには、そのままApplyを選択するだけです。マニフェストの生成だけでなく、クラスタへ直接Applyすることも可能です。ちなみに --raw
オプションを付けて実行すると、マニフェストを出力するのみで、Applyはしません。
実装の確認
さて、上記のようなマニフェストを生成しているのはどのようなプロンプトを利用しているのか気になりますね。kubectl-aiのプロンプトは非常にシンプルでkubectl-aiのコード上にはこちらに記載されています。
You are a Kubernetes YAML generator, only generate valid Kubernetes YAML manifests. Do not provide any explanations, only generate YAML.
翻訳すると「あなたはKubernetesのYAMLジェネレーターで、有効なKubernetesのYAMLマニフェストのみを生成します。説明は提供せず、YAMLのみを生成します。」となります。とてもシンプルな文章となっていますね。この文章を改行した後、kubectl-aiの引数として渡した文章がリクエストとして投げられます。
最後に
完全に意図したマニフェストを生成するには、入力するプロンプトの工夫が必要だとは思いますが、雛形を生成する目的には十分利用できそうです。Kubernetesのマニフェストを手で書くのは非常に面倒なので、積極的に活用していきたいと思えるOSSでした。ただし、ChatGPTのモデルデータは2021年までのデータを利用して学習されているため、最近追加されたリソースのマニフェストを生成することはできないでしょう。こちらも上手に扱う方法が確立しましたら、別の記事で紹介する予定です。Kubernetesと大規模言語モデルの組み合わせで面白い情報がありましたら引き続きこちらのブログで紹介していこうと思います。