初めてのkubernetes #docker #mirantis #kubernetes #k8s
★ 115
本ブログは Mirantis社のblog記事「Introduction to Kubernetes」の翻訳記事です。
Kubernetes の目的は、動作に必要となる個別アプリケーションをパッケージ化しているコンテナの、グループを管理する時の複雑さを抽象化することです。Kubernetes の REST API を経由してアプリケーションのあるべき状態を登録でき、Kubernetes( 別名 k8s ) は、インフラストラクチャを適合させるために必要なことは何でも行います。コンテナのグループをデプロイし、それらをレプリケートし、いくつかのコンテナが失敗した場合には再デプロイします。
また、オープンソースであるためどこでも実行でき、主要なパブリッククラウドプロバイダーもマネージドサービスを提供しています。もちろん OpenStack や Mesos をベースにしたプライベートクラウドでも k8s を実行でき、ベアメタルサーバをワーカーノードとして活用することも当然可能です。つまり、アプリケーションを k8s のビルディングブロックで記述すれば、パブリッククラウドやプライベートクラウド上の VM やベアメタルサーバ内にデプロイできるということです。
より深く活用するために基礎をしっかりと身につけましょう。
それでは見ていきましょう。
Kubernetes のアーキテクチャ
Kubernetesのアーキテクチャは比較的シンプルです。
アプリケーションをホストしているノードと直接やりとりしません。必ず API 経由で連携し Pods と名付けられたコンテナのグループをスケジューリングして複製する役割を担うコントロールプレーンとのみ通信します。
Kubectl は、API と対話して目的のアプリケーションの状態を共有したり、インフラストラクチャの現在の状態に関する詳細な情報を収集したりするために使用できるコマンドラインインタフェースです。
続いて、いろいろなピースを見てみましょう。
ノード
分散アプリケーションの一部をホストする各ノードは、Docker や CoreOS の Rocket のようなコンテナ技術を利用しています。
ノードはさらに2つのソフトウェアを実行します :
kube-proxy は実行中のアプリケーションへのアクセスを提供します。
kubelet は k8s のコントロールプレーンからコマンドを受信します。
ノードは、etcdをバックエンドとするネットワークファブリックである flannel をコンテナ用に実行することもできます。
Master
コントロールプレーン自体は、API サーバ ( kube-apiserver ) 、スケジューラ ( kube-scheduler ) 、コントローラマネージャ ( kube-controller-manager ) 、etcd ( 設定の共有と、Raft コンセンサスアルゴリズムを利用したサービスディスカバリのための高可用な key-value ストア ) を実行しています。
Terminology
Kubernetes には独自の用語があり、これに慣れてしまえばどのように構成されているかをある程度想定できます。これらの用語には次のようなものがあります。
Pods
Pods とは、1つ以上のコンテナのグループ、共有ストレージ、およびそれらを実行する方法に関するオプションのことです。各 Pod は独自の IP アドレスを取得します。
Labels
Labels とは、Pods や Replication Controllers 、Endpoints など、あらゆる Kubernetes オブジェクトの定義に利用される Key と value のペアのことです。
Annotations
Annotations は、問い合わせ不可能な任意のメタデータを格納するために使用される Key と Velue のペアです。
Services
Services は、Pods の論理セットとネットワーク上でそれらにアクセスするためのポリシーを定義したものです。
Replication Controller
Replication controllers は、特定の数の pod レプリカを一度に実行することを保証します。
Secrets
Secrets は、パスワード、TLS 証明書、OAuth トークン、および ssh 鍵などの機密情報を保持します。
ConfigMap
ConfigMaps は、コンテナをKubernetesに依存させずに、設定データをコンテナに注入するための仕組みです。
なぜKubernetesなのか?
Kubernetes がもたらす複雑さを正当化するためには相応の利点が必要です。
その核心は、k8s のようなクラスタマネージャが開発者にサービスを提供することで、運用チームを巻き込むことなく開発者自身がサービスを利用できる事にあります。
信頼性は Kubernetes の大きなメリットの1つです。Google は社内のコンテナオーケストレーションソリューションである Borg でのインフラ運用に関して10年以上の経験があり、その経験に基づいて Kubernetes を構築しています。Kubernetes を利用することで、アプリケーションの可用性やパフォーマンスに影響を与える障害を防ぐことができるのは大きなメリットです。
スケーラビリティは Kubernetes によってさまざまなレベルで処理されます。
ワーカーノードを増やすことでクラスタの容量を追加できますし、CPUとメモリをトリガーとするオートスケーリング機能を、多くのパブリッククラウドで自動化することも可能です。また、Kubernetes Scheduler にはアフィニティ機能が含まれており、ワークロードをインフラストラクチャ全体に均等に分散し可用性を最大化できます。
最後に、k8sは、カスタムトリガーで駆動できる Pod オートスケーラーを使用してアプリケーションをオートスケーリングできます。
CL LAB Mail Magazine
メールアドレス: 登録
※登録後メールに記載しているリンクをクリックして認証してください。Related post
- 【事例】DXに成功するためには 恐れずに失敗せよ
– 米国大手銀行が Docker Enterprise(現Mirantis Kubernetes Engine)でイノベーションとインフラのコスト削減を同時に実現 –
#DX #Docker #モダナイズ #インフラコスト削減 - Mirantis社がShipa社を買収 — アプリケーション管理の未来を築くために
#Mirantis #Shipa #コンテナ #kubernetes - Kubernetes か Docker Swarm か… それとも…?
#オーケストレーション #Kubernetes #Docker Swarm #コンテナ #Mirantis - k0sでCiliumとHubbleを使ってみよう #kubernetes #k8s #cilium #hubble #k0s #mirantis
- 製造業のエンジニア向け情報ポータル「MONOist」に弊社アジャイルコーチによる連載「製造業のためのアジャイル開発入門」が公開されました #アジャイル #Agile #MONOist #Scrum