.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • K8sとも呼ばれる。
  • ギリシャ語で航海長またはパイロットを意味する。
  • ネットワークインフラなどの自動展開やスケーリングといったコンテナの運用を自動化するための、
    フリーソフトウェアによって構成されるコンテナオーケストレーションプラットフォーム。

経緯

  • 当初、Googleが開発していた
  • オープンソースソフトウェアとして公開したことで、
    MicrosoftやRed Hatといった多くのIT企業が開発に参加表明。
  • 2017年初頭に、Kubernetesをサポートする
    Public Cloud は Google Cloud Platformのみだった。
  • 2017年2月に、Microsoft AzureがKubernetesの公式サポートを表明、
    クラウド業界は次第にKubernetesにシフトするようになった。
    • オラクルやVMwareといった企業もCNCFに参加を表明
    • GoogleやMicrosoft Azureとは競合関係にあるAWSも参加
  • 2017年10月に、DockerがKubernetesサポートすることを発表。
  • 2018年1月時点でLinux Foundationの傘下にあるCNCFが管理する
    オープンソースプロジェクトとなっている。

アーキテクチャ

  • ネットワークで接続された複数のLinux上にクラスタを構築することで動作する。
  • クラスタは主に複数のマスター (master) とノード (node) から構成される。
    • マスターがクラスターの管理を行い、
    • コンテナは各ノード上にデプロイされる。
  • マスターノードを構成するコンポーネントは下記のようになっている。
  • マスターノードのコンポーネントは同一のマシン上に存在してもよく、
    最小の構成では1台からなるKubernetesクラスタが構築出来る。

マスター

kube-apiserver

Kubernetes APIを外部に公開するためのコンポーネント。

etcd

Kubernetesクラスタの情報を保存する分散キーバリューストア。

kube-scheduler

ポッドをどのノードに対してデプロイするかを選択するコンポーネント。

kube-controller-manager

Kubernetesクラスタの各種コントローラを実行するコンポーネント。

cloud-controller-manager

  • Kubernetesとプラットフォームとなっている
    クラウドプロバイダとの相互作用を担うコンポーネント。
  • 各クラウドプロバイダに特化した機能を提供し、パフォーマンスを向上する。

その他アドオン

  • Kubernetesクラスタ内での名前解決を行うDNSサーバ
  • 各種Web UIやクラスタ単位でロギングを行うコンポーネント(fluentd, etc.)
  • , etc.

ノード

kubelet

  • ノード上に常駐し、ノードの生存をクラスタに対して通知する。
  • 自身に対するポッドの割り当てが行われたかどうかを監視して
    • ボリュームのマウント、
    • コンテナのダウンロード/デプロイ、
    • ポッドの生存確認

などを行い、クラスタに通知する機能も担う。

kube-proxy

外部やapiserverからのアクセスを、
ノード上の各ポッドに対して転送し、
ポッドへのアクセスを抽象化するコンポーネント。

Docker

実際にコンテナを動作させるバックエンドに利用される。

supervisord

kubeletとdockerが正しく動作し続けるように監視及び管理するコンポーネント。

fluentd

クラスタレベルでのロギングを補助する。

コントローラ

Deployments

  • CLIを使用したり、yaml や JSON で定義をコントローラに渡したりして展開できる。
  • ポッドだけでなくサービスの定義や、各種要素の詳細な設定を定義して一括で適用できる。

ReplicaSet?

  • 負荷分散や、SLAの維持のためレプリカ数のポッドが利用可能であることを保証する。
  • ポッドがどのノードで動くかはスケジューラーによって決定される。

DaemonSet?

  • ノードが単一のポッドのコピーを稼働させることを保証する。
  • ノードや特定のノード群に対してある機能を実行しておきたい場合に使う。

StatefulSet?

  • データベースなどステートフルなポッドが必要な場合はステートフルセットを使って展開。
  • ステートフルセットを使うとストレージやネットワーク名などが保持される。

ポッド

概要

  • いくつかのコンテナをグループ化したもの。
  • ポッド単位で作成、開始、停止、削除といった操作を行う。
  • 1つのコンテナを作成したいときも「コンテナが1つ含まれるポッド」を作成する。

特徴

以下の特徴がある。

  • ポッド内のコンテナは、同一ホスト上に配備される。
  • ポッド内のコンテナは、仮想NICやプロセステーブルを共有する。
    → つまり、同じIPを使えたり、互いのプロセスが見えたりする。
    • 各ポッドには固有のIPアドレスがあり、ポートスペース全体を所有している。
    • ポッド内のコンテナはストレージを共有できる。
  • ポッドには、ポッドをグループするための1つ以上のラベルを指定できる。
  • 一般的には、サーバと、そのサーバと共に実行する補助サービスを含める。
    • Webサーバ
    • APサーバ
    • DBサーバ
    • KVSサーバ

ボリューム

  • 抽象化されたポッドと疎結合なリソースで、ポッドに紐づく。
  • ポッド内のコンテナがデータを読み書きできるディスク領域。
  • 様々な種類が提供されている。

種類や用途

ボリュームには様々な種類や用途がある。

  • 一時領域
    • CONFIG
  • データ共有
    • 永続領域
    • 高可用性
      • DBの高可用性オプションによるもの
      • ReplicaSetによるもの

ボリューム・タイプ

  • emptyDir
    • ポッド用の一時的なディスク領域
    • ポッドが terminate されると削除される。
  • hostPath
    ノード(ホスト)の任意の領域をマウントできる。
  • PersistentVolume?(PV)
    • 永続化領域として確保されるボリューム。
    • PVは個別にリソースを作成して利用する必要がある。
    • 後述する PersistentVolumeClaim?(PVC)経由で利用する。
  • PersistentVolumeClaim?(PVC)
    • PV の要求を行うリソース。
    • PVC は要求された内容(容量、ラベル)から
      適切な PV を探し、ボリュームを割り当てる。
    • プロビジョニングの方法として以下の2つの方法がある。
      • Static : 予め PV を作成
      • Dynamic : PVC が作成した際に動的に PV を作成

サービス

ネットワーク機能を提供するコンポーネント

用途

  • ポッドに対して通信をルーティングする。
  • ポッドに対する通信を維持する(SLA、負荷分散)

サービス・タイプ

以下の種類がある。

  • ClusterIP
    クラスタの内部IP
  • LoadBalancer?
    クラスタの外部IP
  • ExternalName?
    特定の DNS エントリを作成
  • NodePort?
    「ノードのIP:特定のポート」を特定のサービス(ClusterIP:特定のポート)に転送

トレンド

Dockerとの関係

  • コンテナとしてもDockerに依存しない「cri-o」と言う
    軽量コンテナランタイムの1.0が2017/10/17にリリースされた。
  • cri-oはコンテナランタイムとして最適化されているため、
    Dockerコマンドのようなコンテナ、イメージを操作する機能などを備えていない。
  • アプリケーションの開発フェーズにおいてDockerが使われる。

PaaSの上モノ部分

OpenShiftの「s2i」に相当するものが色々出ており、
(microsoftの「draft」やGoogleの「Skaffold」など)
玉石混合で、なにがベストプラクティスなのか固まっていない。

HelmCompose on Kubernetes

参考

Publickey

Kubernetes

Concepts

https://kubernetes.io/docs/concepts/

  • Overview
  • Cluster Architecture
  • Workloads
  • Services, Load Balancing, and Networking
  • Storage
  • Configuration
  • Security
  • Policies
  • Scheduling
  • Cluster Administration
  • Extending Kubernetes

Kubectl

サブシステム

Helm Charts

Compose on Kubernetes

Qiita


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-12-17 (火) 18:25:24 (104d)