今回の記事では、Kubernetesとは? k8sに関するわかりやすい基礎知識、概要や構造、Kubeの仕組みやメリットに関する情報を入門者の方々にもわかりやすく解説します。
CircleCIなら、Kubernetesのデプロイを全て自動化することが実現します。いますぐより効率的なKubernetesデプロイ管理をスタートしましょう。
目次
Kubernetes (k8s)とは?
Kubernetesとは、k8s又は、「Kube」 とも呼ばれており、コンテナの運用管理やスケールを支援するオープンソース システム(OSS)として使われている、コンテナオーケストレーションツールです。
Kubernetesを活用することによって、コンテナ化されたアプリケーションのデプロイ等の手動プロセスを無くし、Docker コンテナのホストを全てクラスタ化実行を実現させたり、負荷がかかった際にスケーリングを行ったり、冗長化の仕組みを行うことさせも可能になります。
気になるKubernetesの機能と概要
Kubernetes (K8s) を使用することにより、クラスタの管理はもちろん、インフラ機能の共通化や共通オペレーションの環境提供、監視やオートスケール機能を利用することが可能になります。
Kubernetesの主な捜査対象は、現在 Docker コンテナ等に対応しています。K8Sには、Docker が不足しているシステム管理機能があり、コンテナの管理や自動化を可能にさせます。そんな中、K8Sにはコンテナオーケストレーションと呼ばれるマイクロサービス機能を提供しており、コンテナには無い管理機能やサーバー連携機能へのアクセスが可能になります。
K8sの代表的な機能を下にまとめましたので、是非参考にして下さい。
- コンテナオーケストレーション
- デプロイやアップデート(アプリケーション)
- アプリケーションリソースの自動スケーリング
- リリース効率化の実現
- ローリングアップデート
- 自動回復機能
Kubernetesの意味と読み方
Kubernetes とは日本語での読み方は「クーベネティス・クバネテス」とも呼ばれており、ギリシャ語では、κυβερνήτης パイロットやナビゲーターという意味を表しています。
なぜKubernetesは企業にとって重要なのか?
現在、多くの企業がGCPやAWS、Azureなどのいくつかのマルチクラウドプラットフォームを使用しているケースが多い為、共通基盤の役割として活用できる為、世界中の企業にとってはKubernetesが欠かせません。また、現在の企業の間ではアジャイル開発の普及によって、アジャイル開発のプラットフォームとして活用されているケースも少なくありません。
Kubernetesが必要とされる主な理由として一番の理由としては、コンテナ運用管理です。コンテナとは、ミドルウェア、アプリケーションやソフトウェアなどの複数の動作環境を仮想化させる一種のテクニックであり、Dockerのようなコンテナプラットフォームだけでは、実現できない機能をKubernetesが実現させることが可能になります。その為、Kubernetesはコンテナ運用管理に欠かせないコンテナオーケストレーションツールとして使用されています。また、Kubernetesを活用することにより、以下の課題を解決することが可能になります。
- 複数のホストの管理
- ローリングアップデート
- スケーリング
- セルフヒーリング
- ロードバランシング
- データ管理
- ワークロード管理
- ログ分析管理
ご覧の通り、Kubernetesを使用することにより様々な課題を解決することが実現します。
覚えておきたいKubernetesの構造要素と用語とは?
Kubernetesにはノードやクラスタなどの様々な構成要素や用語があります。ノードとはアプリケーション実行の「マシン」であり、物理サーバーと同じ意味を示しています。クラスタの中には一般的に複数のノードとマスターノードが存在します。それでは、次のセクションでKubernetesに重要なコンポーネントと用語を学んでいきましょう。
Control Planesのコンポーネント
Control Planesは、Kubernetesの心臓部分であり、アドミン又は、マスターとも呼ばれています。KubernetesのControl planesには以下の要素が含まれています。
-
etcd: ETCDはクラスタ情報等の保存する場所である
-
kube-scheduler: コンテナ(Pod)をワーカーノード
-
kube-controller-manager: Kubeのコントローラーマネージャーは、ひとつで複数のコントローラー機能を実行可能
-
Cloud-controller-manager: AzureやGCPのリソースなどの機能と連携するコントローラー
-
kube-apiserver: こちらは、APIを外部に提供するコンポーネント
Nodesのコンポーネント
-
Kubelet: ノードで実行できるエージェント
-
Kube-proxy: iptables などを変更・消去
-
コンテナランタイム: コンテナを実行するDockerなど
Kubernetes の Node(ノード)
-
ワーカーノード: 実行ホスト提供するノードである。
-
マスターノード: マスターノードとは、クラスタ内のワーカーノードやPodを管理するノードであり、Kubernetesの心臓部分とも知られています。
Kubernetesはマスターノードとワーカーノードでクラスタが構成されており、コンテナをワーカーノードのコンテナランタイムで起動することも可能です。
** Kubernetes(AWS EKS、GCP GKE、Azure AKS)で利用する場合、マスターノードの管理は必要ありません。**
重要なKubernetesのリソース
Kubeには多くのリソースが存在します。このセクションでは、基本的なKubernetesのリソースをご紹介していきます。
-
Node (ノード):こちらはワーカーノードを示します。Kubeではこちらのリソースを使用しコンテナが動作する各マシンを管理しています。ワーカーノードにはコンテナランタイム等を含みます。
-
Pod:Podとは、一種のリソースとしてコンテナを扱っています。また、Podは共有ストレージ(Volume)を活用し、複数のコンテナを含むことができます。
-
ReplicaSet:日本語では「レプリカセット」とも呼ばれており、Podのレプリカの作成やPodの起動数の管理リソース機能です。
-
Deployment(デプロイメント):ReplicaSetの作成時に必要な機能です。Deploymentはまた、複数のReplicaSetを管理しデプロイを管理するリソースとして知られています。
-
Service (サービス): Serviceの役割とは、散らばっているポッド(Pod) にエンドポイントを割り与えIPアドレスを指定して通信したり、Podに対する負荷分散する役割があります。サービス無しではPodにアクセスすることが不可能となります。
-
Ingress:Ingressとは、クラスター外から内部サービスへのHTTPとHTTPSのルートを公開するリソースです。また、仮想ホスティングやSSL終端等などの機能の提供を行う役割があります。
Kubernetes と Dockerの違いとは?
先ほども Kubernetes は Docker などのコンテナの運用管理をするコンテナオーケストレーションツールですので、一瞬同じに見えても実はDockerとは異なるテクノロジーです。ですので、二つのツールを比較する必要はないと考えてよろしいでしょう。
Kubernetes はコンテナオーケストレーションを提供し、それに対しDockerはコンテナプラットフォームです。どちらも YAML に対応しており、操作者にとって読みやすく、Docker・コンテナプラットフォームを活用すればアプリケーションのデプロイの自動化をシングルノードで実行します。主な違いとしては、Dockerでは、シングルノードを活用し、Kubernetesではクラスター間での実行がメインの違いになると考えて良いでしょう。
また、Dockerには「Docker Swarm」と呼ばれるコンテナオーケストレーションツールが提供されており、スケジューリングやクラスタリングに活用できます。
まとめ
今回の Kubernetes の記事はいかがでしたか? Circleciでは、Kubernetes のデプロイが自動化でき、デプロイ管理がより効率的になるサービスを提供しています。また、CircleCIには、Dockerのサポートやコンテナ レジストリの連携、デプロイサービス等の様々な機能も提供しており、当社の「Orb」を活用すれば Kubernetesの操作もより効率的になります。
CircleCIとKubernetesを連携させて、今までよりデプロイ管理をより効率的に、フレキシブルにさせましょう。