<サーバーソフトウェア開発者への microk8s のすすめ>
2019-10-10
=== dai
2019-10-10
もともとは社内向けに書いたもの。
reveal.js で書いたけれどうまく gatsby に乗らないのでスライド構造は脳内補完してください。
環境差で動かない問題
- ビルド環境の違い
- 実行環境の違い
- 設定漏れ
ビルド環境
- ビルドオプションが違う
- IDE 依存しまくり
実行環境
- ライブラリバージョンが違う
- 依存プログラムを入れ忘れた
- OS バージョンが違う
設定
- アプリ設定
- 謎の儀式が必要
- OS 設定が必要
- ulimit
- ディレクトリ構成
開発したソフトウェアの実行方法は
開発側が知っている
ビルド/デプロイ要件を明示するのは
第一に開発側の責務
対策
- ドキュメント化
- 同等環境
- コード化
- イメージ化
ドキュメント化
遺漏なく書くの大変
-> 読んで把握するのも大変
-> 運用現場で改善できない
本番同等環境でテスト
- コストがかかる
- 同等を維持するために設定変更不可
- 開発時のテストには使えない
構築/デプロイのコード化
古代はシェルスクリプト。
近年は構成管理ツール。
- プロジェクト毎に採用ツールが違うので大変
- クラウド時代になって要件が変わった
- クラウド用構成管理ツールも出てきたが...
Note: 要件. Immutable Infra で更新が不要に。 クラウドの API との連携 そもそもコンテナ
実行環境のイメージ化
古代は稼動ディスク丸ごとイメージ化。
近年は仮想化。コンテナ方式がデファクト。
- immutable infrastructure
- クラウド、マイクロサービスと相性良い
コンテナによる解決
-
ビルド環境の違い
-> コンテナはどこでビルドしても同じ -
実行環境の違い
-> コンテナ内は同じ環境 -
設定漏れ
-> コンテナ内で設定済み
クラスタの課題
-
コンテナ間通信の設定
-
コンテナのデプロイ
-
外部サービスとの連携
ops の課題ではあるが、
ops の選ぶツールに合わせる必要がある
コンテナ オーケストレーション
- docker compose / swarm
- 色々
- kubernetes
docker compose / swarm
- docker 語が気持ち悪い
- network や storage が不安定
(Mac で使えないとか) - compose はホスト一台で本番には使えない。
- swarm はマルチホストだけど、スケジューリング程度。
kubernetes
- コンテナ運用以上のクラスタ構築ツール
- 各クラウドが対応
- 多数の運用ツール
- デファクトスタンダード
dev としては
k8s を想定しておけば当分いけそう
k8s 運用を想定して環境問題対策を磨く
k8s & コンテナによる devops プロセス
- 手元の k8s で開発/テスト
- CI 環境の k8s でテスト
- 統合環境の k8s で統合テスト
- 本番環境の k8s へデプロイ
dev としては
- コンテナイメージの作成
- 手元の k8s 構築/運用
- k8s デプロイ定義
コンテナイメージの作成
環境差異を無くすため、
テスト環境から本番環境まで同一イメージ
環境差異
イメージ外部から指定できるように
- ファイル(kubernetes ConfigMap)
- 環境変数
- 起動オプション
初期化処理
- entrypoint スクリプト 条件分岐のリッチな起動スクリプト
- init container (kubernetes) 初期化処理は別 container に分離
イメージ構築
- Dockerfile
- ansible container
- ほか
Dockerfile は分かりにくいので他にあれば移行したい
手元の k8s
- minikube
- microk8s
- k3s
- kind
minikube
仮想マシン Linux 上でシングルノードの k8s を動かす
- 重いような気がする
- 構築がやや大変
microk8s
シングルノードで k8s クラスタを運用するためのパッケージ
- 汎用の minikube と違い、シングル前提で設定簡略化
- snap 一発でインストール
- container registry も付いてる
k3s + k3d
k3s: - IoT など低性能ホストで動かすための k8s サブセット - シングルバイナリでクラスタ起動 - ホストは linux 専
k3d: - k3s をマルチノード対応にする
kind
docker container 上で kubernetes を動かす。
kubernetes のテスト目的で、開発に便利なツールは備えていない
kubeadm
kubernetes クラスタを構築するための便利ツール
microk8s 構築
docker.io
1 2 3 |
|
microk8s
1 2 3 4 |
|
kubectl は専用のやつを使う
1 |
|
container registry
localhost:32000 で動いているので、イメージもそこへ push. マニフェストでそれを指定する。
1 2 |
|
kubernetes 操作
操作は kubectl.
1 2 3 4 5 |
|
リソースとマニフェスト
まずはこの辺から
- Pod
コンテナホスト。コンテナは複数可。 - Deployment
pod のワークロードを管理。スケーリングとか。 - Service
pod への静的なエンドポイント。 - Ingress
外部から Service への疎通。
End.