書籍概要

Software Design plus

Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方

著者
発売日
更新日

概要

Dockerの登場以降,アプリケーションはコンテナイメージとして管理・実行できるようになりました。コンテナイメージには,アプリケーションの実行に必要な言語ランタイムやライブラリなどがすべて含まれているため,どんな環境でも同じアプリケーションを同じように実行できます。このコンテナの利点を活かして,アプリケーションのデプロイ・設定・管理を自動的に行うためのソフトウェアが「Kubernetes(クーバネティス)」です。
本書は,コンテナイメージの作成・デプロイ・運用という一連の流れに沿って,アプリケーション(コンテナ)を本番運用で使える状態(プロダクションレディ)にまで持っていく方法を解説します。
具体的には,アプリケーションの開発や運用に携わる人向けに,Kubernetesクラスタ上で,アプリケーション(コンテナ)のデプロイ,更新,安定性の向上,セキュリティの強化,ロギング,モニタリングなどを行う方法を扱います(Kubernetesクラスタそのものの構築や運用については扱っていないため,ご注意ください)。

こんな方におすすめ

  • コンテナでデプロイ・本番運用したいと考えているアプリケーションエンジニア
  • Kubernetesの使い方を学びたいエンジニア

サンプル

samplesamplesample

目次

第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 ポリシーの例

サポート

現在サポート情報はありません。

商品一覧