(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Windows】skaffoldを利用してコード修正を自動的にポッドに反映する(2/2)

スポンサーリンク

はじめに

以下記事の続きです。

本記事では実際にskaffoldを利用してみます。

skaffoldを利用しない場合

例えばnginxのウェルカムページに差し替えるために用意している「nginx-welcome.html」を修正したとします。

そうするとイメージを更新する必要があるので以下のようにビルドを行い

> docker build -t mynginx .
> docker image ls
...

以下のようにポッドやサービスを落とし上げをして

> kubectl apply -f .\nginx-deployment.yaml
> kubectl apply -f .\nginx-service.yaml

初めて修正が反映されます。

$ curl http://localhost:30080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx! Hoge!!</title>
...

skaffoldを利用する場合

上記でやった一連の流れが修正をトリガーに自動的に行われてユーザは何も行わずともポッド/サービスが反映済みとなります。

skaffoldは以下コマンドで起動します。

> skaffold dev

そうすると以下のようにおなじみの出力が流れて

[34mListing files to watch...[0m
[34m - mynginx
[0m[34mGenerating tags...[0m
[34m - mynginx -> [0mmynginx:a2697be-dirty
[34mChecking cache...[0m
[34m - mynginx: [0m[33mNot found. Building[0m
[34mFound [docker-desktop] context, using local docker daemon.
[0m[34mBuilding [mynginx]...
[0mSending build context to Docker daemon  3.584kB
Step 1/2 : FROM nginx:1.7.9
 ---> 84581e99d807
Step 2/2 : COPY --chown=1001:0 nginx-welcome.html /usr/share/nginx/html/index.html
 ---> 2ba34789f30f
Successfully built 2ba34789f30f
Successfully tagged mynginx:a2697be-dirty
[34mTags used in deployment:[0m
[34m - mynginx -> [0mmynginx:2ba34789f30f261d8258fb47d496e55eb62dd71088df93d7e6a669ba1d6db073
[32m   local images can't be referenced by digest. They are tagged and referenced by a unique ID instead[0m
[34mStarting deploy..[0m
 - deployment.apps/nginx-deployment created
 - service/nginx created
[33mWatching for changes...

「Watching for changes」で止まります。

skaffoldを起動後、展開済のPodを見るとskaffoldに関するラベルが付与されます。このlabelでskaffoldの管理下に入るようです。

Labels:       app=nginx , app.kubernetes.io/managed-by=skaffold-v1.3.1 ...

ここで試しにnginx-welcome.htmlを修正すると

[34mGenerating tags...[0m
[34m - mynginx -> [0mmynginx:a2697be-dirty
[34mChecking cache...[0m
[34m - mynginx: [0m[33mNot found. Building[0m
[34mFound [docker-desktop] context, using local docker daemon.
[0m[34mBuilding [mynginx]...
[0mSending build context to Docker daemon  3.584kB
Step 1/2 : FROM nginx:1.7.9
 ---> 84581e99d807
Step 2/2 : COPY --chown=1001:0 nginx-welcome.html /usr/share/nginx/html/index.html
 ---> 7e5e2114e396
Successfully built 7e5e2114e396
Successfully tagged mynginx:a2697be-dirty
[34mTags used in deployment:[0m
[34m - mynginx -> [0mmynginx:7e5e2114e396845da4dce25dee37cf89eb1f3cfba802e7d0937f45fff943f218
[32m   local images can't be referenced by digest. They are tagged and referenced by a unique ID instead[0m
[34mStarting deploy...[0m
 - deployment.apps/nginx-deployment configured
[33mWatching for changes...[0m

curlコマンドの結果も変更になっています。

補足

Dockerfile無しで同コマンドを利用すると以下のようにエラーとなりました。

level=fatal msg="watching files for artifact nginx: listing files: listing files: opening dockerfile: C:\\..\\Dockerfile: open 
C:\\..\\Dockerfile: The system cannot find the file specified.

skaffold.yamlにDockerfileを指定せずとも修正を検知しているのはデフォルトで同ディレクトリ配下を探しに行っているからだと考えられます。

また、skaffold.yamlにyamlファイルを指定しないとコードを修正してもapplyが行われません。

終わりに

git cloneで落としてくると大量のサンプルが手に入りますが、今回はせっかくなので自作してテストを行いました。
詳細な動き方はつかめていないところはあるので、もう少し遊んでみて新たな知見が分かれば別途記事にしたいと思います。

以上、ご参考になれば幸いです。