Docker Go Kubernetes インフラ プログラミング

KubernetesでGoコンテナを起動する

更新日:


 

こんにちは、mabuiです。
今回はDocker HubにGoでHello worldを出力するコンテナイメージをアップロード、それを元にKubernetes(以下k8s)の基本的な機能を使ってイメージを起動していきます。
Dockerでの起動、k8sでの起動と順を追って解説するので、k8sの基本的な使い方が理解できるはずです。
 

Goコンテナの準備

まずはアップロード用のGoプログラムを用意します。

 

main.go

go runで起動するとポート8888でhttpリクエストを待ち受けてHello World!を出力するシンプルなコードです。
 

Dockerfile

イメージ作成用のファイルです。最終的に空のコンテナイメージにGoのバイナリファイルを乗せることで、Goランタイムをコンテナから省いて軽量化しています。
 

ローカルでイメージをビルドして起動

http://localhost:9999/ アクセスでハロワが表示されるはずです。
コンテナのポートには直接アクセスできないので指定したローカルマシンのポートにアクセスします。
 

Docker Hubにイメージアップロード、実行

Docker Hubへの登録が必要です。
上記でDocker Hub上のリモートリポジトリにアップされたイメージをローカルと同じように実行できます。
 

Kubernetesからリモートイメージ実行

ここからk8sを使っていきます!
k8sの実行環境はDocker Desktopを利用しています。

前章でアップしたイメージをk8sのコマンドから実行しています。
挙動的には同じですが、Podが起動しているのが確認できます。
Podはk8sのオブジェクトで、一つ以上のコンテナのグループです。

 

Podは上記コマンドで削除できますが、次章で紹介するDeploymentで管理されているためすぐに復活します。
下記コマンドでDeploymentごとシャットダウンできます。

 

Deploymentテンプレートの使用

k8sではマニュフェストと呼ばれる設定ファイルを記述して、コマンド実行時に読み込ませることができます。

先ほどイメージを実行したコマンドにはイメージ、ポート、ラベルの指定がされていますが、これらをDeploymentマニュフェストに移していきます。
 

Deployment はk8sでPodを管理する機能です。
DeploymentにPodの状態を設定することで、Podが異常終了した時に立ち上げ直したり、自動管理してくれます。
 

mkdir k8sでディレクトリを作成して、template/k8s/deployment.yamlを作成

少し長いですが、ほどんどボイラープレートです。
containers:にイメージの名前とポートを指定しています。
 

マニュフェストを使用するにはkubectl applyを実行します。

これでDeploymentを起動して、kubectl runと同じようにPodを起動できました。
 

Serviceテンプレートの使用

Pod、Deploymentに続きk8sの基本的な機能としてServiceがあり、これを使うことでPodとの通信設定を行えます。
 

先ほどイメージ実行時に上記コマンドでローカルからPodに直接ポート転送していましたが、Podとの間にServiceを挟むことができます。
Serviceのエンドポイントに対して通信することで、紐づけられたPodのグループに通信でき、Webプロキシやロードバランサのような役割を果たします。
 

こちらもDeploymentと同じようにServiceマニュフェストを作成します。
 

template/k8s/service.yaml

portsのportとtargetPortで、ServiceのポートとPodのプライベートポートを繋いでいます。
type: ClusterIPだと、Serviceはクラスター内からのみアクセス可能になります(デフォルト)。
 

kubectl applyでServiceを起動します。

http://localhost:9999/ アクセスで、Serviceのポート経由でハロワを表示できます。
 

以上でk8sの基本的な機能を使ってDockerイメージを起動できました!
 

下記参考にした本です。k8sが実用的に説明されていてオススメです。

-Docker, Go, Kubernetes, インフラ, プログラミング
-, , ,

Copyright© , 2020 All Rights Reserved Powered by STINGER.