今回は「Kubernetesで実践するクラウドネイティブDevOps」を読んでみました。
kubernetesを社内で導入しようとした時に、ひたすら情報を集めてた時にたどり着いた一冊でした。本番環境への導入のための運用ルールなどを決めたり、導入時に気をつけなければいけないことなど記述されていたので購入を決めました。
並行して「Kubernetes完全ガイド 第一版」と「RancherによるKubernetes活用完全ガイド」を読んでいましたが、これらと違って運用で気を付ける点などの知識が詰まっていて初期導入〜運用ルールを作る段階で必要なことを学べました。
これら3冊を読んでも導入が間に合わなかったのがログ周りの管理です。Fluentdをサイドカーとして立ち上げて運用すれば良いということまではわかったのですが、実際どう立ち上げ設定するのか現段階の知識では理解できませんでした。
第1章では社内で目指してるクラウドネイティブの特製についても触れていました。
内容も納得感がありチームにメリット感を伝える時に役立ちました。 開発をしているとインフラに知見があるメンバーと無いメンバーが顕著にわかれますが、「DevOpsを導入することで境目が無くなっていく、できないと取り残されていく」ってのも、開発業界あるあるですね。コンテナやTypeScriptが流行ってきた辺りからキャッチアップしないと開発すら円滑に進めれなくなったり。
Dockerのビルド方法〜kubectl
を使ってコンテナを起動させる方法の紹介
この章ではクラスタのアーキテクチャについて解説しています。
RancherからKubernetesの理解を進めた筆者にとって「etcd」「Control Plane」「Worker
ノード」の役割、特にコントロールプレーン
について曖昧だった認識が明確になりました。
「信頼するも検証を怠らない」、運用検証の段階で実際にRancherでNodeを削除したり復活させたりでアプリケーションがどう落ちるか、etcdサーバーが落ちたらどう復活するか等試していました。
「異常検知したら復活!」と予定してたけど実際落とすと復活しなかったりコネクションエラーでNodeを消せなくなったり。
Pod / Deployment / Serviceなどのyaml操作についての説明
この章では今までの開発経験で全く触れてこなかったリソースについて紹介されています。
Kubernetesではコンテナを立ち上げる際にCPU
とメモリ
の最小と最大を設定します。特にメモリはどのスライドをみても必須と言っており、メモリはマシンが落ちる可能性がでるので最小と最大を同じにしても良いと聞いたことがあります。実際テスト環境で検証しているとホストのマシンが頻繁に落ちる現象がありましたが割り当てをすると無くなりました。
「ノードの典型的なインスタンスサイズは1CPUと4GBのメモリ」と書かれていましたがAWSにこのサイズがないのが残念。
kubectl
についてのコマンド解説、ツールといえばyamlを管理する時に教えてもらったのがkustomizeでDEV/PRDやバッチサーバーなど一部の差分だけを変更したいときに有効に使えました。
latestタグが最後にpushされたタグが自動的につくというのが初耳でした。普通に危ないので二度と使わない。
ボリュームマウントといえばrock
を使って分散ストレージを作れるという話を聞きましたが実際使い勝手どうなんでしょう?EBSだと複数のノードから読み書きできないし何かしら分散ストレージを組む必要はありそう。
Job
かCronJob
CronJobも検証で使っていましたが、RancherOSでタイムゾーンを日本時間にする方法が無く諦めて9時間ずらして運用しました。
環境変数はConfigMapやSecretを使って管理します。Secretは暗号化されておりpodの出力で表示されません。
Helmについて記述されていましたが、今回不要そうな内容のため読み飛ばし
アプリケーションのデプロイ方法について紹介されています、私のチームではECSからの引き継ぎでブルーグリーンデプロイでの運用をしていました。ローリングデプロイにしようかなと検討してる部分が、リソースの予約との関連です。 ブルーグリーンの場合、podが全て揃ってからデプロイするため設定しているリソースの倍CPUとメモリの確保が必要になってきます。その点、ローリングデプロイだと準備した段階からリリースをしてくれるので余剰リソースが少なくてすみます。
CICDについてはRancherのpipelineを使ってるので読み飛ばし、検証中にRancherの最新バージョンが2.5.0にからfleet
を使ってね。ってなってるけど全く使い方わからず(情報待ち)
pipelineもプロジェクト単位でリソース食うので早めに移行はしたい。
ログはインシデント発生してからのトラブルシューティングには便利
Kubernetesで役立つメトリクスの紹介
最後ログ関連や監視については読み飛ばしてしまいましたが、この本を読んでると運用イメージを十分に得ることができました。rsyncでデプロイ、docker-composeで運用してる環境から一歩進みコンテナさえ作ればチームの誰でもサービスを立ち上げることができたり容易にバージョンアップやスケーリングを試せる環境までもう一歩です。インフラ環境変更するのって本当手間で勇気いりますよね、頑張ってここから抜け出しましょう。
このサイトを運営してるuiuifreeです。
渋谷のベンチャー企業で2年ほど新規事業を担当した後にフリーランスエンジニアにキャリア転換。
求人サイトの開発が多くエンジニア/看護師/保育士などの分野でサイトを運営しています。