前回からの続き。

さて実際に、おうちkubernetes環境で色々とDeployをしていくには、もう少し環境構築が必要。具体的にはDocker Private Registryを構築して自分のDockerイメージを保存する場所を用意する。
「実際の開発フローにおけるKubernetesの使い方」を参考に、ちょいちょい写経をするだけではNGな項目があったので、以下にまとめる。

構成
環境は以下の通り。
- 前回kubesprayで構築済みの環境。master, node, node 構成 => kubernetes環境 として利用
- おうちESXi6.0 上に構築してあるCentos7 => Docker Private Registry を構築
開発環境構築
docker-distributionの構築は写経状態。管理者権限で作業することはないので、sudoの有無が多少違うがほぼ写経。
sudo yum install docker-distribution
設定ファイルを修正してDocker Private Registryが稼働するIPとポートを定義。
sudo yum install docker-distribution
vi cat /etc/docker-distribution/registry/config.yml addr: : addr: ADDR:PORT
開発用のDockerイメージの作成
まずは手順通りにapacheとphpが入っている単純なDockerfileをダウンロードし、ダウンロードしたコンテナイメージにカスタマイズを加えていく。
#Dockerfile FROM php:apache
このコンテナイメージにタグ付を行い、Private Docker Registryにアップロードする。ただし、構築したばかりのデフォルトのDocker設定ではTLS通信(暗号化通信)が必須となっているためTLS通信をアップロード前に無効化しておく必要がある。
クライアント端末はMac OSX Catalina、Docker Desktopを利用しているのでGUIの設定から変更する。
設定変更後は、自動でDocker Desktopが再起動されるので起動してくるのをまつ。
無事に起動されてきたら、いよいよPrivate Docker Registryにアップロード。
#以下web=Dockerイメージ名, dev=タグ名 $docker push web:dev ${IP}:${PORT}/web:dev $docker push ${IP}:${PORT}/web:dev
開発
開発時は先ほどアップロードしたPrivate Docker Registry のコンテナイメージをpull&pushしていくイメージとなる。
写経元を参考に以下のcomposeファイルを作成。
src/test.php に以下のファイルを作成。
$_SERVERはphpがデフォルトで用意している変数。この場合サーバのIPアドレスを返答する。
ローカル上で動作確認
$docker-compose up -d curl localhost/test.php # # Server IP address # コンテナのIPアドレスが表示さればOK $docker-compose down #起動していたコンテナの停止
動作確認がとれたらとソースコード(docker-compose.yml ,src/test.php)をアップする。githubでもなんでもいい。今回はCentos上にgitbucketを構築してあるのでそちらにアップ。
リリース
前回まででおうちkubernetes環境は構築済み。基本的なところはkubesprayが設定してくれているので、設定するところはノードがPrivate Docker Registryに接続する際のTLS不要設定のみのはず。
#/etc/sysconfig/docker INSECURE_REGISTRY='--insecure-registry registry.access.redhat.com --insecure-registry ${IP}:${PORT}' #${IP},${PORT}はPrivate Docker Registryのもの
設定反映のためにプロセスを再読み込みしてもよいが、coreOSを再起動して読み込ませても良い。
本番用のDockerfileを構築する。Private Docker Registryからコンテナを読み込んだ上で、コンテナ上にソースコードを配置するという設定を記載。
記載後、この、ソースコードを配置したコンテナを新たに1つのコンテナとして、本番環境にリリースする。
$docker build -t ${IP}:${PORT}/web:1.0 . $docker push ${IP}:${PORT}/web:1.0 #webというコンテナイメージのタグ1.0が本番で利用するコンテナとなる。
kubernetes環境にデプロイするためのyamlファイルを作成する。リンク先の記載ではリリースできなかった。apiVersionの設定が変わっていた。
このファイルをmasterノードの任意のディレクトリにアップ(もしくはソースコードとしてpullしてきて)
$kubectl create -f deploy.yml
でノードに展開される。あとは、この作業を繰り返し、コンテナに追加・変更がある場合はコンテナイメージを再ビルド。
ソースだけの変更の時はソースコードを修正してコミットする。
コンテナを再展開する時は
$kubectl apply -f deploy.yaml
となる。