ローカルのプログラムやコマンドを k8s クラスタ内で実行する方法


はじめに


  • 以下の様なモチベーションから、同僚に聞いた方法をまとめました


    • k8s クラスタ上の Pod に対して、自作のプログラムでリクエストを投げたい

    • kubectl port-forward でもできるけど、いろんな Pod に投げたいので、何個も port-forward するのはだるい




想定


  • GKE 上のクラスタで一時的にプログラムを動かしたい(クラスタ上のイメージには使えるものがない)

  • GCR HostName: asia.gcr.io

  • GCP ProjectName: gcp-project-hoge


Docker イメージを作る


  • Dockerfile

# 動かしたいプログラムのバイナリと以下のDockerfile を同じ場所に置く

FROM ubuntu:latest

COPY ./app .


  • build docker image

# sample-image-name は適当

$ docker build . -t asia.gcr.io/gcp-project-hoge/sample-image-name


GCR に push する

$ docker push asia.gcr.io/gcp-project-hoge/sample-image-name:latest


k8s クラスタにデプロイ

# sample-pod は適当な pod 名

# デプロイしたい k8s の context に切り替えておくこと
# 実行後、Docker コンテナにログインした状態になり(-it)、 exit すると Pod は削除される(--rm)
$ kubectl run sample-pod --restart=Never -it --rm --image asia.gcr.io/gcp-project-hoge/sample-image-name:latest