Software Design plus Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方
- 須田一輝,稲津和磨,五十嵐綾,坂下幸徳,吉田拓弘,河宜成,久住貴史,村田俊哉 著
- 定価
- 3,278円(本体2,980円+税10%)
- 発売日
- 2019.3.2
- 判型
- B5変形
- 頁数
- 328ページ
- ISBN
- 978-4-297-10438-2 978-4-297-10439-9
サポート情報
概要
Dockerの登場以降,アプリケーションはコンテナイメージとして管理・実行できるようになりました。コンテナイメージには,アプリケーションの実行に必要な言語ランタイムやライブラリなどがすべて含まれているため,どんな環境でも同じアプリケーションを同じように実行できます。このコンテナの利点を活かして,アプリケーションのデプロイ・設定・管理を自動的に行うためのソフトウェアが「Kubernetes(クーバネティス)」です。
本書は,コンテナイメージの作成・デプロイ・運用という一連の流れに沿って,アプリケーション(コンテナ)を本番運用で使える状態(プロダクションレディ)にまで持っていく方法を解説します。
具体的には,アプリケーションの開発や運用に携わる人向けに,Kubernetesクラスタ上で,アプリケーション(コンテナ)のデプロイ,更新,安定性の向上,セキュリティの強化,ロギング,モニタリングなどを行う方法を扱います(Kubernetesクラスタそのものの構築や運用については扱っていないため,ご注意ください)。
こんな方にオススメ
- コンテナでデプロイ・本番運用したいと考えているアプリケーションエンジニア
- Kubernetesの使い方を学びたいエンジニア
目次
第1章 Hello Kubernetes world! コンテナオーケストレーションとKubernetes
- 1.1 Kubernetesとは
- 1.1.1 コンテナオーケストレーションとKubernetes
- 1.1.2 Linuxコンテナ技術とDocker
- 1.1.3 頻繁なデプロイを可能にする「宣言的設定」
- 1.1.4 強力な自己回復機能「セルフヒーリング」
- 1.1.5 VM 中心ではなく「コンテナ中心のインフラ」
- 1.1.6 ベンダーロックインされない「クラウド・ポータビリティ」
- 1.2 Kubernetesが解決する課題
- 1.2.1 マイクロサービスとKubernetes
- 1.2.2 Kubernetesが解決するインフラ面の課題
- 1.2.3 Kubernetesが解決するアプリケーション面の課題
- 1.3 Kubernetesオブジェクト
- 1.3.1 Namespace ―― 論理的にクラスタを分割する
- 1.3.2 Pod ―― デプロイの最小単位
- 1.3.3 LabelとLabelセレクタ ―― オブジェクトのグルーピング
- 1.3.4 ReplicaSet ―― 実行されているPodレプリカ数を保証する
- 1.3.5 Deployment ―― デプロイ戦略とロールバック
- 1.3.6 Service ―― 仮想IPと負荷分散
- 1.3.7 ConfigMap ―― アプリケーションと設定情報の分離
- 1.3.8 Secret ―― アプリケーションと秘密情報の分離
- 1.3.9 その他のオブジェクト
- 1.4 Kubernetesのアーキテクチャ
- 1.4.1 クラスタを操作するコマンドラインツール「kubectl」
- 1.4.2 マスタコンポーネント
- 1.4.3 ノードコンポーネント
- 1.4.4 クラスタアドオン
- 1.5 まとめ
第2章 Kubernetesを構築する
- 2.1 クラスタの構築・運用の難しさ
- 2.2 クラスタ構築の方法
- 2.3 minikubeでクラスタを構築する
- 2.3.1 minikubeとは
- 2.3.2 インストール方法
- 2.3.3 minikubeでクラスタを構築する
- 2.3.4 kubectlとは
- 2.3.5 クラスタを停止・削除するには
- 2.3.6 minikubeでaddonを管理する
- 2.4 クラスタの動作に必要なコンポーネント
- 2.4.1 コンテナレジストリ
- 2.4.2 ログ分析
- 2.4.3 メトリクス
- 2.4.4 認証
- 2.5 まとめ
第3章 Kubernetes上にアプリケーションをデプロイする
- 3.1 アプリケーションを簡易的にデプロイする
- 3.2 Kubernetes APIでCRUDしてKubernetesの動きを体感する
- 3.2.1 Create,Read ―― アプリケーションがデプロイされるまでの流れを理解する
- 3.2.2 Update,Delete ―― ControllerManagerによる調整ループとセルフヒーリング
- 3.3 Dockerコンテナイメージを知る
- 3.3.1 Dockerfileを読む
- 3.3.2 DockerfileからDockerイメージを生成する
- 3.3.3 コンテナイメージをDocker Hubにアップロードする
- 3.4 アプリケーションのマニフェストを書く
- 3.4.1 DeploymentのYAMLファイルを書く
- 3.4.2 ConfigMapを使って設定値を管理する
- 3.4.3 Secretを使って秘密情報を取り扱う
- 3.5 クラスタ内のアプリケーション間で通信する
- 3.5.1 マニフェストを適用する
- 3.5.2 Serviceマニフェストを書いてサービスディスカバリの恩恵を受ける
- 3.5.3 外部アプリケーションをクラスタ内アプリケーションと同じように扱う
- 3.5.4 ClusterIPを使わないHeadless Service
- 3.6 アプリケーションを外部に公開する
- 3.6.1 NodePortを使って公開する
- 3.6.2 外部Load Balancerを使って公開する
- 3.6.3 Ingressを使って公開する
- 3.7 データを保存する
- 3.7.1 Kubernetesで利用するストレージの特徴と選定
- 3.7.2 スケールするMySQLの構成
- 3.7.3 ストレージの準備
- 3.7.4 外部ストレージの割り当て
- 3.7.5 StatefulSetを使ったMySQLのMaster-Slave構成
- 3.7.6 スケールするMySQLの動作検証
- 3.7.7 Mattermostとの接続
- 3.7.8 Mattermostを使ったデータ永続化の動作検証
- 3.8 定期的にバックアップを取る
- 3.8.1 1 回のみ実行するJob
- 3.8.2 定期実行するCronJob
- 3.9 まとめ
第4章 アプリケーションをデバッグする
- 4.1 Kubernetesオブジェクトの状態を把握する
- 4.1.1 kubectl get
- 4.1.2 kubectl describe
- 4.2 アプリケーションコンテナを調査する
- 4.2.1 kubectl logs
- 4.2.2 kubectl cp
- 4.2.3 kubectl exec
- 4.2.4 kubectl run
- 4.2.5 kubectl port-forward
- 4.3 kubectlの動作を調べる
- 4.3.1 設定情報を確認する
- 4.3.2 クラスタ情報を確認する
- 4.3.3 --vオプションでログレベルを変更する
- 4.4 まとめ
第5章 アプリケーションを更新する
- 5.1 アプリケーションを手動更新する
- 5.1.1 Dockerイメージの更新
- 5.1.2 更新したDockerイメージのデプロイ
- 5.2 アプリケーションを停止せずに更新する
- 5.2.1 ローリングアップデート
- 5.3 アプリケーションを以前の状態に戻す
- 5.3.1 ロールバック
- 5.3.2 ロールバックの注意点
- 5.4 アプリケーションを継続的に更新する
- 5.4.1 CI/CDとは
- 5.4.2 CI/CDツール
- 5.4.3 CI/CDとサービスアカウント
- 5.5 サービスアカウントを用意する(ServiceAccount,RBAC)
- 5.5.1 Kubernetesの認証・認可
- 5.5.2 サービスアカウント(ServiceAccount)
- 5.5.3 ServiceAccountの作成
- 5.5.4 Pod内のServiceAccountの利用
- 5.5.5 Role-Based Access Controlによる認可の設定
- 5.5.6 マニフェストでの管理
- 5.6 まとめ
第6章 アプリケーションの安定性をあげる
- 6.1 アプリケーションの耐障害性を向上させる
- 6.1.1 Podの動作を安定させるためのしくみ
- 6.1.2 Podの動作を安定させるしくみの恩恵を受けるには
- 6.2 負荷に応じてアプリケーションの処理能力を向上させる
- 6.2.1 スケールアップする
- 6.2.2 スケールアウトする
- 6.3 まとめ
第7章 アプリケーションのセキュリティを強化する
- 7.1 Kubernetesのセキュリティモデル
- 7.1.1 クラスタそのもののセキュリティ
- 7.1.2 アプリケーション自体のセキュリティ
- 7.2 コンテナイメージのスキャン
- 7.3 Podのセキュリティを強化する
- 7.3.1 コンテナ内でプロセスを実行するユーザを設定する
- 7.3.2 一般ユーザで動作するようにコンテナイメージを変更する
- 7.3.3 OSのセキュリティ機構を利用して権限を制限する
- 7.4 ネットワークのセキュリティを強化する
- 7.4.1 minikubeでNetworkPolicyを利用できるようにする
- 7.4.2 Mattermostのネットワーク構成のおさらい
- 7.4.3 NetworkPolicyの作成
- 7.4.4 NetworkPolicyが無指定の場合の挙動
- 7.4.5 デフォルトのNetworkPolicy
- 7.4.6 MattermostのNetworkPolicy
- 7.5 まとめ
第8章 アプリケーションを運用する
- 8.1 ロギング
- 8.1.1 kubectl logsでログを確認する
- 8.1.2 kubectl logsのしくみ
- 8.1.3 ログの転送・集約
- 8.1.4 ログ集約のパターン
- 8.1.5 EFKスタックでログを集約する
- 8.2 メトリクスモニタリング
- 8.2.1 kubectl topでリソース使用状況を確認する
- 8.2.2 kubectl topのしくみ
- 8.2.3 Kubernetesのメトリクスモニタリング
- 8.2.4 Prometheusとは
- 8.2.5 Prometheusをデプロイする
- 8.2.6 Prometheusでメトリクスを収集する
- 8.2.7 Grafanaでメトリクスを可視化する
- 8.3 まとめ
付録 Podのセキュリティを高める管理者向けの機能
- A.1 PodSecurityPolicyでPodのセキュリティ設定を強制する
- A.1.1 PodSecurityPolicyを有効にする
- A.1.2 PodSecurityPolicyの作成
- A.1.3 システムコンポーネントのためのポリシーのひもづけ
- A.1.4 ポリシーの例
プロフィール
須田一輝
Twitter:@superbrothers
2009年にヤフー株式会社に入社。2014年に同僚との会話の中で初めてKubernetesを知る。2015年からゼットラボ株式会社に出向し,Kubernetesを中心としたインフラ基盤の研究開発・技術支援に従事。その他,OSS開発や登壇,Kubernetes Meetup Tokyoなどのミートアップ主催,Kubernetes GitHub Orgメンバーとしての貢献も行う。好きなコマンドはkubectl completion。
稲津和磨
Twitter:@ina_ani
2010年にヤフー株式会社に入社。さまざまなWebサービスのバックエンド,フロントエンドの開発に従事。2015年からゼットラボ株式会社の初期メンバーとして出向し,Yahoo! JAPANの次世代インフラ基盤の構築に携わる。Webサービスに限らずものづくりが好きで,趣味として電子工作に取り組み,自宅に3Dプリンタを持っている。ここ最近は格安VPSでいかにKubernetesクラスタを構築するかに挑戦中。
五十嵐綾
Twitter:@Ladicle
OpenStackをベースとしたIaaS/PaaSのクラウドサービス基盤を5年ほど開発したのち,2017年よりゼットラボ株式会社でヤフー社向けのKubernetes管理基盤の研究開発を担当。ほかにも,Kubernetes周辺のOSSの開発やコミュニティの運営,登壇などをしつつ,日本での仲間集めを目論む。k8sではCRD(Custom Resource Definitions)周りが好き。
坂下幸徳
2003年に株式会社日立製作所 システム開発研究所に入社。主任研究員として運用管理・クラウド技術の研究開発に従事。2014年に米国シリコンバレーのHitachi America Ltd, R&D/IT Platform Systems Labのラボ長に就任,同国で2017年まで活動。
2018年よりゼットラボ株式会社に移り,Kubernetesを中心とした運用管理・クラウド技術の研究開発に従事。また,2012年よりストレージの業界団体SNIA(Storage Networking Industry Association)でも活動。2013年~2017年の間,SNIA本部@米国コロラドのTechnical Working Groupを取りまとめるTechnical Councilに日本人初で就任し,ISO/ANSIの標準化にも貢献。2018年現在はSNIA日本支部技術委員会副委員長としても活動中。お酒を嗜みつつKubernetesでのストレージ活用,Statefulアプリケーションの普及を狙い奮戦中。博士(情報科学),情報処理学会会員。
吉田拓弘
2009年にヤフー株式会社に入社。決済システムや内製モニタリングプラットフォームの開発に従事。その後,ランニングの趣味が高じてマラソン関連の事業会社にてAndroidアプリの開発やサーバーレスアーキテクチャを活用したモバイルバックエンドの開発を行う。2017年よりゼットラボ株式会社にてKubernetes管理基盤の開発や導入支援を担当。最近はPrometheusを触ることが多い。
河宜成
2008年にヤフー株式会社に入社。さまざまなプロジェクトにおいてWebサービス開発,Androidアプリ開発を経て,開発部長に就任。
2015年ゼットラボ株式会社の立ち上げに参画し,ソフトウェアエンジニア・開発マネージメントを担当。2017年より同社代表取締役に就任。以降,最新技術をヤフー社に提供し続けるため邁進している。プライベートではAndroidアプリを細々と開発し続け,いつか大当たりすれば良いと考えている。
久住貴史
2007年にヤフー株式会社に入社。決済システムや認証技術の研究開発に従事。2015年からゼットラボ株式会社の初期メンバーとして参加し,Kubernetesをベースとしたインフラ基盤の研究開発・導入支援を担当する。Kubernetesで一番興味のある分野はsig-auth。
村田俊哉
2010年にヤフー株式会社に入社。2014年からKubernetesを触り始め,Kubernetesを利用したPaaSの開発や構成管理基盤の整備業務に従事。2015年からゼットラボ株式会社の初期メンバーとして参加し,Kubernetesクラスタを管理するシステムの開発やKubernetesの導入支援を担当する。Kubernetesで最近興味のある分野はsig-autoscaling。CKA(Certified Kubernetes Administrator)保有。