0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kubernetes完全ガイド 第2版 第2章まとめ

Last updated at Posted at 2021-09-25

なぜk8sが必要か

背景

近年、コンテナ技術への注目度が高まり、プロダクションでのコンテナ利用事例も増えてきた。

Dockerはコンテナランタイム(実行環境)であり、Dockerホストを複数台協調させて動作させたり、一元的に管理することはできない。

そのため、一定以上のプロダクションにおいて必要な、複数のホストから構成されるシステムの構築が難しい。

そこで、Kubernetes(k8s)の出番。
...コンテナオーケストレーションエンジン。コンテナ化されたアプリケーションのデプロイ、スケーリング、などの管理を自動化する。

Kubernetesとは

Kubernetes(k8s)...コンテナオーケストレーションエンジン。コンテナ化されたアプリケーションのデプロイ、スケーリング、などの管理を自動化する。

コンテナオーケストレーションエンジン...k8s以外にも、Docker Swarm mode、Apache Mesosなどがある。k8sは2020年7月時点でプロダクション利用事例が最も多く、コンテナオーケストレーションにおけるデファクトスタンダードとなっている。(これは、大手クラウドプロバイダによるマネージドサービスの提供が大きな要因となっている、らしい)

コンテナ...「なんらかのアプリケーションを実行するようにビルドされたコンテナイメージを元に起動されたワークロード(仮想マシン上で実行されているソフトウェア)」

ワークロードとは - IT用語辞典

k8sでできること

  • 宣言的コードによる管理(Infrastructure as Code)…宣言的なコード(マニフェストファイル)によって、デプロイするコンテナや、周辺リソースの管理が可能。
  • スケーリング/オートスケーリング
    • Kubernetesクラスタの形成による複数ホスト(Kubernetes Node)の管理
    • 同一コンテナイメージを元にした複数コンテナ(レプリカ)のデプロイによる負荷分散や耐障害性の確保
    • 負荷に応じたレプリカ数の増減
  • スケジューリング…PodをどのNodeに配置するかを決定することであり、デプロイ時のステップの一つである。Affinity, Anti-Affinity機能を用いることで、スケジューリングを調整可能。アプリケーションの特徴、Nodeの性能差などを意識することができ、例えば、ディスクI/Oが多いコンテナをディスクがSSD(I/O速度が速い)のNodeに配置する」といった制御が可能になる。
  • リソース管理…スケジューリングの指定がない場合、Nodeのリソース状況(メモリ、CPUの空き状況)に従ってスケジューリングが行われる。そのため、ユーザーはコンテナ配置を管理する必要がない。また、リソース使用状況によって、自動でNodeの増減を行う、クラスタオートスケール機能も存在する。
  • セルフヒーリング…コンテナのプロセス監視によって、停止を検知すると、再度コンテナのスケジューリングを実行することで、自動的にコンテナを再デプロイする。これにより、サービスの自動復旧ができる。また、セルフヒーリングの実行条件を変更することも可能。(HTTP/TCPや、シェルスクリプトによるヘルスチェックの成否)
  • ロードバランシングとサービスディスカバリ...
    • 複数台で構成されたアプリケーションを1つのアプリケーションとしてユーザーに見せるためにはユーザーからの接続先となる、複数台を束ねたエンドポイントを用意する必要がある。(仮想マシン利用の際には、ロードバランサーを利用するのが一般的)k8sにも、同様のロードバランシング機能(Service, Ingress)があり、設定した条件に合致したコンテナ群へのルーティングを行うエンドポイントを払い出すことが可能である。さらに、k8sは、スケール時のエンドポイントとなるServiceへのコンテナの自動追加・削除、コンテナ障害時の切り離し、コンテナのローリングアップデート時の事前の切り離しなどを自動で実行してくれる。
    • サービスディスカバリ(サービスのネットワーク上の位置を決定すること)は、Serviceで実現可能。マイクロサービス同士で参照する必要がある時に、簡単にシステム全体を連携することができる。
  • データ管理…データストアには、冗長化できるetcd(エトセディ)を使用。コンテナ間で共通の設定や、データベースのパスワードなどの情報、を安全かつ冗長化された状態でk8s上で管理できる。(コンテナや、Serviceに関するマニフェスト、コンテナが利用する設定ファイル、認証情報を保存する仕組みがある。)
    • etcd...分散型キーバリューストア。クラスタを組むことで冗長化できる、らしい。
    • 外部エコシステムとの連携が盛ん...今後の章でテーマ別に紹介される、らしい。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?