Kubernetes

client-goでDynamic Clientを使用して複数のマニフェストを適用する

client-goで単体のリソースを作成する場合は以下のように明示的に対象のclientを作成することで行うことができます。 func main() { ... deployment := &appsv1.Deployment{} deploymentsClient := clientset.AppsV1().Deployments(apiv1.NamespaceDefault) …

KubernetesのJobを管理するカスタムコントローラーを作成した

KubernetesのJobは完了しても登録したJobは削除されず kubectl get job などを実行したときの視認性がよくありません。 これを解消するための設定として .spec.ttlSecondsAfterFinished がありますが、長いことalpha版でGKEでは使用することができません。 …

Kubernetes上で動くGoサーバーでプロファイラを動かしWeb UIで表示する

Goにはプロファイラとして標準パッケージにpprofが搭載されています。 pprofの使い方としてはすでに多数の優良記事が存在するため、ここでは扱いません。 今回はpprofをk8s上で動くサーバーに対して実行し、結果をWebUIで表示する必要があったのでそのやり方…

HelmでKubernetesのマニフェストファイルを管理する

Helmを使って公開されているChartをインストール方法はたくさん紹介されていますが、独自のChartを作成する方法が簡潔に紹介されている記事が無かったので紹介します。 Helm自体の紹介やインストール方法などは省略します。 環境 Helm 3.0.0 Kubernetes 1.15…

KubernetesのPodでDockerコンテナを実行する

KubernetesのPodでDockerコンテナを実行する方法を紹介します。 Dockerコンテナ内でコンテナを起動する方法のことをDinD (Docker inside Docker)などと言われていますが、同じことをKubernetesのPodで実行するには少し工夫する必要があります。 アプローチと…

複数のPodのログをまとめて表示する

Kubernetesを開発環境として使用しプロダクションと同じような環境で開発すると、複数のアプリケーションが可動することになると思います。 そうするとログも複数の場所に出力されることになります。 複数個のターミナルを立ち上げ1つずつログを表示しても…

GKEでプリエンプティブインスタンスを使いこなす

GCPにあるプリエンプティブ インスタンスをGKEでうまいこと使えないか、試行錯誤した結果をまとめます。 プリエンプティブ インスタンスとは 一言で言ってしまえば、AWSにあるスポットインスタンスのGCP版です。 公式ドキュメントにはこのように書いてありま…