目次

coreOSを利用して自宅kubernetes環境をkubesprayで構築する(その3


前回からの続き。

coreOSを利用して自宅kubernetes環境をkubesprayで構築する(その2

前回からの続き。[ coreOSを利用して自宅kubernetes環境をkubesprayで構築する(その1 <div class="blogcard-snippet internal-blogcard-snippet"> 勉強のため、k8sことkub

さて実際に、おうちkubernetes環境で色々とDeployをしていくには、もう少し環境構築が必要。具体的にはDocker Private Registryを構築して自分のDockerイメージを保存する場所を用意する。

実際の開発フローにおけるKubernetesの使い方」を参考に、ちょいちょい写経をするだけではNGな項目があったので、以下にまとめる。

構成

環境は以下の通り。

  • 前回kubesprayで構築済みの環境。master, node, node 構成  => kubernetes環境 として利用
  • おうちESXi6.0 上に構築してあるCentos7 => Docker Private Registry を構築

開発環境構築

docker-distributionの構築は写経状態。管理者権限で作業することはないので、sudoの有無が多少違うがほぼ写経。

1
sudo yum install docker-distribution

設定ファイルを修正してDocker Private Registryが稼働するIPとポートを定義。

1
sudo yum install docker-distribution
1
2
3
vi cat /etc/docker-distribution/registry/config.yml
addr: :
addr: ADDR:PORT

開発用のDockerイメージの作成

まずは手順通りにapacheとphpが入っている単純なDockerfileをダウンロードし、ダウンロードしたコンテナイメージにカスタマイズを加えていく。

1
2
#Dockerfile
FROM php:apache

このコンテナイメージにタグ付を行い、Private Docker Registryにアップロードする。ただし、構築したばかりのデフォルトのDocker設定ではTLS通信(暗号化通信)が必須となっているためTLS通信をアップロード前に無効化しておく必要がある。
クライアント端末はMac OSX Catalina、Docker Desktopを利用しているのでGUIの設定から変更する。

https://res.cloudinary.com/dlhmnejhz/c_scale,f_auto,q_auto,w_1200/2020-01-20-23.42.42_tyxor7.png
Docker Desktopの設定変更
設定変更後は、自動でDocker Desktopが再起動されるので起動してくるのをまつ。
無事に起動されてきたら、いよいよPrivate Docker Registryにアップロード。

1
2
3
#以下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アドレスを返答する。

ローカル上で動作確認

1
2
3
4
5
6
7
8
$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不要設定のみのはず。

1
2
3
#/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つのコンテナとして、本番環境にリリースする。

1
2
3
$docker build -t ${IP}:${PORT}/web:1.0 .
$docker push ${IP}:${PORT}/web:1.0
#webというコンテナイメージのタグ1.0が本番で利用するコンテナとなる。

kubernetes環境にデプロイするためのyamlファイルを作成する。リンク先の記載ではリリースできなかった。apiVersionの設定が変わっていた。

このファイルをmasterノードの任意のディレクトリにアップ(もしくはソースコードとしてpullしてきて)

1
$kubectl create -f deploy.yml

でノードに展開される。あとは、この作業を繰り返し、コンテナに追加・変更がある場合はコンテナイメージを再ビルド。
ソースだけの変更の時はソースコードを修正してコミットする。

コンテナを再展開する時は

1
$kubectl apply -f deploy.yaml

となる。