がじぇったー

お金と家電とプログラミングのブログ

Googleの社内環境がオープンソース化されたコンテナ管理基盤、Kubernetes(クバネティス)とは?

こんにちわ

がじぇったー (@hackmylife7) | Twitter


です。

今日はそもそもKubernetesとはなんぞや、という点をまとめていきます。


f:id:gadgeterkun:20190629150041p:plain

TL;DR(要約)

  • KubernetesはGoggleが社内で構築/運用していたコンテナ基盤をベースにOpen Source化されたアプリケーションのオーケストレーションツール
  • コンテナ化されたアプリケーションのDeploy/管理を容易に行うことができる
  • 従来のインフラ構築/運用で必要だった作業の多くが自動化される
  • Kubernetesは宣言型である

What is Kubernetes

k8sとは

  • Open Sourceのコンテナオーケストレーション(※1)Platform
  • もともとは米Googleの社内インフラ基盤が2015年Open Source化され、CNCF(※2)に管理が移管された経緯をもつ

※1 オーケストレーション(英: orchestration)は、複雑なコンピュータシステム/ミドルウェア/サービスの配備/設定/管理の自動化を指す用語。

※2 CNCF is an open source software foundation dedicated to making cloud native computing universal and sustainable.

k8sの特徴

k8sは開発者(Dev)にとって何が嬉しいのか?
  • アプリケーションの実行/動作/管理環境を容易かつ迅速に手に入れることができる
k8sは管理者(Ops)にとって何が嬉しいのか?
  • インフラの構築/変更管理が容易
    • 従来のVMベースの環境で必要だった多くのオペレーション作業が自動化される
      • リソース管理
      • 手動作業によるインフラ変更作業
      • アクセス増加時のズケーリング作業
      • 各Nodeのリソース管理
      • 障害時の復旧
      • ロードバランシング
    • ベンダーの環境に依存しない

VMベースのインフラ環境だと、アクセスが増えた場合のスケーリング、サービスが停止した場合のロードバランサからの切り離しとMWの再起動等が必要になるが、k8sではそれらのインフラオペレーションが必要がなくなるよう機能が提供されている


ベンダの環境に依存しない、というのはよく特徴として語られますが、実際にサービスをデプロイする際はNWの設定や、バックアップ、データベース等をクラウドベンダの他のサービスのものと組み合わせるので依存度は高くなるとおもいます

サポートするコンテナランタイム(実行環境)
  • Docker Engine
  • rkt
  • Windows Server Containers
宣言型
  • k8s宣言型の特性を持つ
    • 開発者はyamlファイルにClusterがどういう状態であって欲しいか(こういう状態であって下さい)を書き、それをk8sに渡す。k8sは受け取った情報がそれが管理しているクラスタの状況(State)に相違があれば変更を加える

AnsibleやTerraformをやられていた方は宣言性という性質がよくわかると思います。

※1 Kubernetesではこのyamlファイルをマニフェストファイルという


f:id:gadgeterkun:20190629151102j:plain


マニフェストファイルの例

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    role: myrole
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP
k8sはPaasではない
    • アプリケーション間の依存関係はk8sは考慮してくれない。つまりアプリケーションのDeployの順番は利用者が考える必要がある
CI(継続的インテグレーション)の機能は備わっていない
  • CIツールの機能は備わっていない。そのため、Deployを行うにはSpinaker, Jenkins等を用いる必要がある
k8sを構成する要素

Kubernetesを構成する要素は多岐に渡ります。
それぞれの要素についても別記事でまとめていきます。

  • Node
  • Namespace
  • ResourceQuota
  • Pod
  • Controller
  • Service
  • Volume
  • PersistentVolume
  • PersistentVolumeClaim
  • Secret
  • ConfigMap

Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。

gadgeterkun.hatenablog.com