Cover Image for Kubernets開発でイメージ作成の手間をなくす方法
Kubernets開発でイメージ作成の手間をなくす方法

skaffold2.gif

ども、k69 です。

OS上で動かすアプリケーション開発と比べ、DockerやKubernetesを使ったアプリケーション開発はコンテナイメージを作成する手間がかかるので面倒です。

例えばJavaのWebアプリだと
OSアプリ
     [java実装] → [war作成] → [デプロイ]
コンテナアプリ
     [java実装] → [war作成] → [イメージ作成]★ ひと手間ふえる → [デプロイ]

この課題を解決してくれそうなツール「skaffold」を教えてもらったので調べると、googleのお墨付きだし将来が楽しみなツールなので「skaffoldを触ってみよう!」と
ウニウニしたのがこの記事です。

対象読者

  • skaffoldに興味がある人
  • コンテナでのアプリケーション開発を少しでも楽にしたい人。

前提条件

  • windows10 ユーザ
  • WSL(Windows Subsystem for Linux)がインストールされていること
    参考ページ
  • minikubeがインストールされていること
    chocolatey でもminikubeはインストールできる。便利です。
choco install -y minikube

結果イメージ

結果イメージ(下記のアニメーションGIF)について簡単に説明します。

  1. 右下画面のアプリ(.go)のソースを修正し、保存します。
  2. 上画面のskaffoldがソースの修正を検知し、コンテナイメージを自動作成し、minikube上に自動デプロイします。
  3. 左下画面のRESTARTSのカウントがインクリメントされ、再デプロイしたことが確認できます。
    ※ ソース修正に伴い上画面に出力される文字列も反映されます

skaffold.gif

  • 上画面  skaffold実行
  • 左下画面 miinikubeのPodを状況(RESTARTS)を監視
  • 右下画面 アプリ(.go)のソース

手順

1. WSL(Ubuntu)側のセットアップ

🔴がついている個所は WSL(Ubuntu)で実行すること

🔴 1-1.WSL(Ubuntu)にdocker-ceをインストールします。

下記のページを参考にインストールしました。

https://docs.docker.com/install/linux/docker-ce/ubuntu/

実行したコマンドを列挙しておきますw

WSL(Ubuntu)で実行したコマンド
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce

🔴 1-2. WSL(Ubuntu)にkubectlをインストールします。

下記のページを参考にインストールしました。

https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl
ここでも実行したコマンドを列挙しておきますww

WSL(Ubuntu)で実行したコマンド
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
sudo chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

🔴1-3. WSL(Ubuntu)にskaffoldをインストールします。

下記のページを参考にインストールしました。

https://github.com/GoogleCloudPlatform/skaffold#installation

ここでも実行したコマンドを列挙しておきますwww

WSL(Ubuntu)で実行したコマンド
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin

2. Windows(WSLではない)側のセットアップ

2-1. Windows(WSLではない)のgit-bashでminikubeを起動します。

minikube起動(メモリ指定は任意)
minikube start --memory=4096

2-2. Windows(WSLではない)のgit-bashでminikubeのdocker環境変数を表示します。

minikubeのdocker環境変数を表示
minikube docker-env
実行結果(結果は環境によって異なる)
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\keita\.minikube\certs"
export DOCKER_API_VERSION="1.23"
# Run this command to configure your shell:
# eval $(minikube docker-env)

3. 環境設定

以下、環境依存の情報(ホームディレクトリ)が記載されているので適宜読み替えてください。

  • WSL(Ubuntu)のホームディレクトリ
/home/keita   ※ 読み替えてください
  • Windows のホームディレクトリ
C:\Users\keita   ※ 読み替えてください  

🔴 3-1. Windows側のminikube と kubectl の設定情報をWSL側にコピーします。

WSL(Ubuntu)側で下記を実行します。

WSL(Ubuntu側で実行)
cd ~
cp -r /mnt/c/User/keita/.minikube .
cp -r /mnt/c/User/keita/.kube .

🔴 3-2. .kubel の設定情報を修正します。

WSL(Ubuntu)側で下記のようにconfigをエディタ(vi等)で修正します。

【修正前】/home/keita/.kube/config
    client-certificate: C:\Users\keita\.minikube\client.crt
    client-key: C:\Users\keita\.minikube\client.key

↓↓↓

【修正後】/home/keita/.kube/config
    client-certificate: /home/keita/.minikube/client.crt
    client-key: /home/keita/.minikube/client.key

🔴 3-3. 2-2で取得したdocker環境変数を一部修正し、WSL(Ubuntu)側で実行します。

WSL(Ubuntu)側で下記を実行します。

【修正前】
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\keita\.minikube\certs"  ★この行を修正★
export DOCKER_API_VERSION="1.23"

↓↓↓

【修正後】下記をWLS(Ubuntu)側で実行
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/keita/.minikube/certs"
export DOCKER_API_VERSION="1.23"

4. skaffoldの資産を取得する。

Windows(WSLではない)のgit-bashでskaffoldの資産をcloneします。
下記のページを参考にcloneしました。

https://github.com/GoogleCloudPlatform/skaffold#installation

git-clone
cd 
git clone https://github.com/GoogleCloudPlatform/skaffold
cd skaffold/examples/getting-started

🔴 5. skaffoldを実行する。

WSL(Ubuntu)側で下記を実行します。
※ 1秒間隔で"Hello World”が出力される

skaffold実行
cd /mnt/c/Users/keita/skaffold/examples/getting-started/
skaffold dev

6. アプリ(.go)のソースを修正してみます。

下記のアプリを適当に修正します。

アプリソースのパス
C:\Users\keita\git\skaffold\examples\getting-started\main.go

本記事の「結果イメージ」のような動きになれば成功です。

まとめ

WSLを噛ましたら動かせるようになりました。ただし、少し複雑(トリッキー?)な構成になってしまった気がしています。ここまで文章で説明してきましたが、理解しづらいので「WSL(Ubuntu)」と「Windows」の関係を下図にまとめました。(これでもわかりづらいですがw)

image.png

最初はgit-bashでチャレンジしていたのですが、skkafoldがWindowsをサポートしていない可能性がありそうだった(issues#69)ので諦めました。
※ 2018/3/27追記 issue#287の修正待ちかな(´ω`)

※ 下記のskaffold dev実行時のエラーが解決できなかった。。。

カレントにDockerFileはあるが認識してくれない。。。
time="2018-03-18T19:06:47+09:00" level=error msg="run: running skaffold steps: running watch: adding watching for deps: starting watch on file C:\\Users\\keita\\git\\skaffold\\examples\\getting-started\\Dockerfile: adding watch for C:\\Users\\keita\\git\\skaffold\\examples\\getting-started\\Dockerfile: The parameter is incorrect."

Windows形式のパスを認識してくれないのかなぁ( ノД`)シクシク…
skaffoldはまだ誕生したばかりなので、期待とともに見守っていきたいと思います。

参考URL

© 2022 k69

本サイトを通じて、たくさんの人がプログラミングに興味を持ち、 これがキッカケでモノづくりの楽しさに触れることができれば幸せです!