お疲れ様です。おれちゃんでござる!
普段はTerraformのこと話してますが今回少し脱線しようと思っております。一応自動化と繋がってる技術なので大した脱線にはなりませんの安心してください。
最近社内のAWS構築自動化にこれから使う予定ツールを宿るためのKubernetesクラスターを作成していますから少しKubernetes(略してk8s)のこと話したいと思っております。
Kubernetesってなんですか?
Kubernetes は、デプロイやスケーリングを自動化したり、コンテナ化されたアプリケーションを管理したりするための、オープンソースのシステムです。
コンテナ技術だったらDockerは結構有名なのですがKubernetesはなにが違うという疑問が浮かんでいますね。Dockerは元々コードをコンパイルするサーバーを建てたり、維持したり、管理したり手間を省くため作られました。コードをよくコンパイルするプロジェクトにも7/7日24/24Hがアップしてるサーバーはいらないのでコードをコンパイルしたいだけの時に使われてるプラットフォームで凄く節約できます。でもこれだけではない、元々サーバーのコンパイルプログラムや依存ライブラリなどを大量にインストールしてアップグレードしたら大変なことが行われるから、毎回コンパイルのとき0から作られて、削減されてるコンテナーのほうは無難です。
この前の仮想機械技術と違てOSのレベルを仮想することではなく、プロセスのレベルでしていますのでオーバーヘッドが更に減っています。この利点を見てコンパイルのためだけではなく、使用は広がることになりました。
「Docker Compose」などのツールで簡単なWebサーバーを建てるのですがネットワークやストレージと接続すること以外複雑な構築はしがたいです。
そこにKubernetesは登場しました。
オートスケーリング、セルフヒーリング、コンテナー設定変数化、暗号変数、ロードバランサー、セキュリティなどな様々な機能が使えるようになります。
Wordpressを建て見ましょう
インフラをテストするような有名なやり方なので今回も使いたいと思ています。
先ずはDockerだけで:
$ docker run --name some-wordpress -p 8080:80 -d wordpress
このコマンドだけでhttp://127.0.0.1:8080にWordpress公開されてます。でもディスク設定されてないからもしDockerのホストが再起動したらかDockerのWordpressコンテナーが停止して再作成されたらデータは失われてしまいます。
Docker Compose Yamlファイルでもうちょっと複雑にしましょう:
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
db:
driver: local
wordpress:
driver: local
このようにVolume作ったらデータは保存されてるので再起動に問題は起こらないはずです。ただ再起動時間にサイトは表示されてない、またはホストに問題あったらサイト完全消失可能性あります。
ではKubernetes風な構築建てましょう。
WordpressでKubernetesの簡単構築
先ずはWordpressのリソースを全部同じ場所に片付くためのNamespaceを作りましょう
次はデータベースのDeployment、ServiceとPVC。
Deploymentはコンテナーを管理と設定するリソース。コンテナーの状況を監視するからもしコンテナーが故障な状態になったり、負担が急に上がったりとしたら対策は設定できます。
Serviceはポートをクラスターに公開するためのリソースです。
PVCはPersistantVolumeClaimの略でデータを保存するリソースです。
Worpressも同じく:
後残っているのはIngressで公開することです。IngressはURLを公開するためのリソースです。Servicesのリソースだけでk8sクラスターのIPで公開されてるので複数のサイトを公開する場合には複数のIPも必要にされるのでIngressのほうが便利です。
書き方こうなります:
hostに書かれているアドレスをDNSに記入していたら公開します。またテストだけしたかったらWindowsのhostsファイルの変更でサイト見えることができます。
最後に
Wordpressという人気なソリューションを例として挙げてk8sの基本使い方を少し見れました。k8sは様々な使い方ありますのでサイトだけではなく、CI/CDでたかったり、APIを公開したりなどに使われています。
またk8sのことお話しする機会があると思うのでこの時まで
また次回お楽しみにしてね ^^💦