「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Open PaaS]]
--[[OpenShift]]
--[[Cloud Foundry]]
--[[Kubernetes]]

*目次 [#dc96026c]
#contents

*概要 [#ec699210]
-ネットワークインフラなどの自動展開やスケーリングといったコンテナの運用を自動化するための、~
フリーソフトウェアによって構成されるコンテナ・オーケストレーション・プラットフォーム。

-[[Open PaaS]]と比較されることが多いが、ジャンルとしては、PaaSではなく、CaaS(新設)らしい。

**呼称 [#r0c31f26]
-クバネティス / クバネテス / クーべネティス
-ギリシャ語で航海長またはパイロットを意味する。
-K8sと略記される。

**経緯 [#v0663bf1]
-当初、Googleが開発していた。~
Google の Borg という 15 年にわたるプロジェクトに基づいている。

-オープンソースソフトウェアとして公開したことで、~
MicrosoftやRed Hatといった多くのIT企業が開発に参加表明。

***2014年 [#b0c577b8]
Google、Kubernetes発表(6月)

***2015年 [#l593ed2e]

-2月~
OpenShift V3、[[Docker>#de77bde7]]とKubernetesをコアとすると発表。

-7月
--バージョン1.0に達する
--CNCFが設立され開発主体がこの団体へ移動。

***2016年 [#r839d233]
[[Swarm>Docker#u512f6bd]] 対 Kubernetesの状態

-10月~
Kubernetesが独自コンテナランタイム([[cri-o>#wd8d1dac]])開発を表明

***2017年 [#a235c6fb]
コンテナ・オーケストレーションのデファクトになった。

-初頭に、Kubernetesをサポートする~
Public Cloud は Google Cloud Platformのみだった。

-2月~
Microsoft AzureがKubernetesの公式サポートを表明、~
クラウド業界は次第にKubernetesにシフトするようになった。
--オラクルやVMwareといった企業もCNCFに参加を表明
--GoogleやMicrosoftとは競合関係にあるAWSも参加

-10月に、[[Docker>#de77bde7]]がKubernetesサポートすることを発表。

***2018年 [#c1de5ccb]
-1月時点でLinux Foundationの傘下にある~
CNCFが管理するオープンソースプロジェクトになった。

***[[標準化の動向>#c2b84e28]] [#f8f6436f]

*アーキテクチャ [#xbc57197]
-ネットワークで接続された複数のLinux上にクラスタを構築することで動作する。 
-クラスタは主に複数の[[マスター>#x3a054be]] (master) と[[ノード>#w630aafb]] (node) から構成される。
--[[マスター>#x3a054be]]がクラスターの管理を行い、
--各[[ノード>#w630aafb]]上にコンテナがデプロイされる。

-[[マスター>#x3a054be]]や[[ノード>#w630aafb]]を構成するコンポーネントは下記のようになっている。
-[[マスター>#x3a054be]]と[[ノード>#w630aafb]]のコンポーネントは同一のマシン上に存在してもよく、~
最小の構成では1台からなるKubernetesクラスタが構築出来る。

**マスター [#x3a054be]
制御プレーンとも。

***kube-apiserver [#vdc79d21]
Kubernetes APIを外部に公開するためのコンポーネント。

***etcd [#f3f1e957]
Kubernetesクラスタの情報を保存する分散キーバリューストア。

***kube-scheduler [#ybf9a720]
[[ポッド>#j268603c]]をどの[[ノード>#w630aafb]]に対してデプロイするかを選択するコンポーネント。

***kube-controller-manager [#bbc30c32]
Kubernetesクラスタの各種[[コントローラ>#zca03066]]を実行するコンポーネント。

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

***[[その他アドオン>#y089c43f]] [#ubeb7941]

**ノード [#w630aafb]
実行ノードとも。

***kubelet [#a31f1808]
-ノード上に常駐し、ノードの生存をクラスタに対して通知する。

-自身に対する[[ポッド>#j268603c]]の割り当てが行われたかどうかを監視して
--ボリュームのマウント、
--コンテナのダウンロード/デプロイ、
--[[ポッド>#j268603c]]の生存確認

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

***kube-proxy [#wc90f28d]
外部やapiserverからのアクセスを、~
ノード上の各[[ポッド>#j268603c]]に対して転送し、~
[[ポッド>#j268603c]]へのアクセスを抽象化するコンポーネント。

**コンテナ・ランタイム [#r6074505]
-実際にコンテナを動作させるバックエンドに利用される。
-全て [[Kubernetes CRI (Container Runtime Interface)>#t04d9c7b]] 実装

***[[Docker]] [#de77bde7]

***[[containerd>#h78f8fe9]] [#k8003d18]

***[[CRI-O>#n37e3d66]] [#wd8d1dac]

**アドオン [#y089c43f]

***DNS [#cd972417]
-環境内の他のDNSサーバ

-以下のDNSレコードを提供するDNSサーバ
--環境内の他のDNSサーバ
--Kubernetesサービスの

***ダッシュボード [#n1081d32]

***コンテナリソース監視 [#o0092bab]
-supervisord

-kubeletと[[Docker>#de77bde7]]が正しく動作~
し続けるように監視及び管理するコンポーネント。

***クラスターレベルログ [#m40c6bcb]
-fluentd
-クラスタレベルでのロギングを補助する。

**コントローラ [#zca03066]
[[マスター>#x3a054be]]上の[[kube-controller-manager>#bbc30c32]]上で実行される。

***Deployments [#p7551857]
下位要素は、[[ReplicaSet>#w119c808]]

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

***ReplicaSet [#w119c808]
下位要素は、[[ポッド>#j268603c]]

-負荷分散や、SLAの維持のためレプリカ数の[[ポッド>#j268603c]]が利用可能であることを保証する。
-[[ポッド>#j268603c]]がどの[[ノード>#w630aafb]]で動くかは、[[kube-scheduler>#ybf9a720]]によって決定される。

***DaemonSet [#e7cc1702]
下位要素は、[[ポッド>#j268603c]]

-[[ノード>#w630aafb]]が単一の[[ポッド>#j268603c]]のコピーを稼働させることを保証する。

-全[[ノード>#w630aafb]]や特定の[[ノード>#w630aafb]]群に対してある機能を実行しておきたい場合に使う。

-具体的な利用シーンとしては、ログ収集のエージェントなどがある。


***StatefulSet [#t7cc78b3]
下位要素は、[[ポッド>#j268603c]]

-データベースなどステートフルな[[ポッド>#j268603c]]が必要な場合は[[StatefulSet>#t7cc78b3]]を使って展開。

-[[Deployment>#p7551857]]では、全ての[[ポッド>#j268603c]]で1個のPVをマウントするが、~
[[StatefulSet>#t7cc78b3]]で作成された[[ポッド>#j268603c]]は、それぞれ単一のPVをマウントする。

-[[StatefulSet>#t7cc78b3]]を使うとストレージやネットワーク名などが保持される。

-データベースなど、データの永続化の用途で利用される。

**ポッド [#j268603c]

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

***特徴 [#o1577b38]
以下の特徴がある。

-ポッド内のコンテナは、同一ホスト上に配備される。
-ポッド内のコンテナは、仮想NICやプロセステーブルを共有する。~
→ つまり、同じIPを使えたり、互いのプロセスが見えたりする。
--各ポッドには固有のIPアドレスがあり、ポートスペース全体を所有している。
--ポッド内のコンテナはストレージを共有できる。

-ポッドには、ポッドをグループするための1つ以上のラベルを指定できる。

-一般的には、サーバと、そのサーバと共に実行する補助サービスを含める。
--Webサーバ
--APサーバ
--DBサーバ
--KVSサーバ

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

***種類や用途 [#s3ba1bd4]
ボリュームには様々な種類や用途がある。

-一時領域
--CONFIG

-データ共有
--永続領域
--高可用性
---DBの高可用性オプションによるもの
---[[ReplicaSet>#w119c808]]によるもの

***ボリューム・タイプ [#o6b09b53]
-emptyDir
--[[ポッド>#j268603c]]用の一時的なディスク領域
--[[ポッド>#j268603c]]が terminate されると削除される。

-hostPath~
[[ノード>#w630aafb]](ホスト)の任意の領域をマウントできる。

-[[PersistentVolume(PV)>#l873c79e]]~
永続化領域として確保されるボリューム。

**サービス [#neadf311]
ネットワーク機能を提供するコンポーネント

***用途 [#s545ffc7]
-[[ポッド>#j268603c]]に対して通信をルーティングする。
-[[ポッド>#j268603c]]に対する通信を維持する(SLA、負荷分散)

***サービス・タイプ [#pd866509]
以下の種類がある。

-Node Port
-Cluster IP
-Load Balancer
-, etc.

※ 詳しくは[[コチラ>#u9217b63]]。

*リソースで分類 [#ee62200e]
に分類されます。リソースを定義するYAMLの記述方法の詳細はAPIドキュメントを参照ください。

**Workloads [#o20650b7]
Kubernetesを構成する基本的なリソース

***[[Deployment>#p7551857]] [#r5d77514]
***[[ReplicaSet>#w119c808]] [#k5d1f44c]
***[[Pod>#j268603c]] [#f39bdbac]
***[[DaemonSet>#e7cc1702]] [#le61eab5]
***[[StatefulSet>#t7cc78b3]] [#n861cc2c]

***Job/CronJob [#f9dce694]
-Job~
バッチ処理が終わったらPodが(正常)終了。
-CronJob~
Jobをスケジュール実行する。

**Discovery & LB [#u5daf1b9]
基本的なリソースに対して、外部から参照する口を提供するもの

***Service [#u9217b63]
-L4のロードバランシングを実現する。
-Serviceは、既定で利用可能。

-種別~
以下のような種別がある。

--Node Port
---'<Node IP>:<Node Port>にアクセスを提供する。
---<Node IP>は、マスタのIPで、サービスの全Nodeを公開

--Cluster IP~
サービスの特定のNodeを公開(内部通信用)

--External IP~
サービスの特定のNodeを公開(外部通信用)

--Headless~
DNS ラウンドロビンによる転送先PodのIPアドレス取得

--Endpoint(selector 指定無し)

***負荷分散 [#sba5ab4d]
-Load balancer
--L4ロード・バランシングを実現する。
--Cluster IPに負荷分散機能を加えている。

-Ingress
--L7ロード・バランシングを実現する。
--IngressリソースにはIngressコントローラーが必要。

***Outbound [#n6e47aba]
-External Name
--外部のドメイン宛のCNAMEを返す機能を提供する。
--例えば、Podから外部のexample.comへアクセスする場合。

-None-Selector~
外部のサービスに対してロード・バランシング

**Config & Storage [#iffeeae0]

***Config Map [#b03c67e4]
Key-Valueで構成され、アプリケーションの設定値を管理するリソース。

***Secret [#cdb67527]
パスワードなどの機密情報を管理するリソース。

***Volume [#l873c79e]
Podのデータを永続化するための仕組み。

-PersistentVolumeClaim (PVC)~
PodにVolumeや[[PersistentVolume (PV)>#sf7eb14d]]を間接的に指定。

--PV の要求を行うリソース。
--PVC は要求された内容(容量、ラベル)から~
適切な PV を探し、ボリュームを割り当てる。
--プロビジョニングの方法として以下の2つの方法がある。
---Static : 予め PV を作成
---Dynamic : PVC が作成した際に動的に PV を作成

***Cluster [#sf7eb14d]
-[[Node>#w630aafb]]

-Namespace~
分離 / 独立した環境を準備する。

-PersistentVolume (PV)
--[[PersistentVolumeClaim(PVC)>#l873c79e]]経由で利用する。
--accessModes, capacity, storageClassName, volumeMode, etc.を定義

-RBAC (Role Based Access Control)
--Role
--ClusterRole
--RoleBinding
--ClusterRoleBinding

***Metadata [#eefe0c0e]
-Resource Quota

--resource.request~
NamespaceおよびPodに割り当てるリソース量を定義
--resource.limit~
NamespaceおよびPodに割り当てるリソースの上限を定義

--LimitRange~
最小 / 最大・デフォルト値を定義
---リソースタイプ~
Pod / Container / PersistentVolumeClaim
---マシンリソース~
CPU / メモリ
---設定値~
最大値 / 最小値 / デフォルト / resource.limitとresource.requestの比率

-QoS Classes~
マシンリソースを超えたリソースを割当を行う場合、~
どのPodに優先 / 削除する必要があるかを決定する。
--Guaranteed~
CPU/メモリ共にresource.limit/requestが設定&limit=request
--Burstable~
CPU/メモリのいずれかがresource.limit/requestが設定
--BestEffort~
上記条件に当てはまらない

-HorizontalPodAutoscaler(HPA)
--Pod数を増減
--動的な水平スケーリングを実現
--Webサーバなど永続化データを持たないサーバが対象

-VerticalPodAutoscaler(VPA)
--Podに割り当てるCPU / メモリ量を増減
--動的な垂直スケーリングを実現
--DBサーバなど永続化データを持つサーバが対象

*エコシステム [#na158cd0]

**[[kubectl]] [#o2eaedf8]
***[[kubectlコマンド>kubectl#n7027448]] [#n7027448]
***[[kube configファイル>kubectl#ja6b145e]] [#ja6b145e]

**サブシステム [#y92d3a2a]

***[[Compose on Kubernetes]] [#l49a8b15]
[[Kompose>#fbdd4dc8]]と同じだが、開発元が社

***[[Kompose]] [#fbdd4dc8]
Docker Compose ファイルを Kubernetes オブジェクトに変換できる。

***[[Helm Charts]] [#qb08430b]
Kubernetes の charts を利用するための簡単なツール

***[[Rancher Charts]] [#s02dcf6f]
[[Helm>#qb08430b]]のウワモノ。

**[[構築ツール類>Kubernetesの構築]] [#l3e7f5de]
**ツール類 [#od0fea25]
***[[構築ツール類>Kubernetesの構築]] [#l3e7f5de]
***[[運用ツール類>Kubernetesの運用]] [#z0740fe8]
***[[監視ツール類>Kubernetesの監視]] [#h8d0c17c]

*トレンド [#dfd9871c]

**[[コンテナの標準仕様]] [#lb9e85e4]

***[[CRI(Container Runtime Interface)>コンテナの標準仕様#r82f49bd]] [#t04d9c7b]
→ [[コンテナ・ランタイム>#r6074505]]

***[[OCI(Open Container Initiative)>コンテナの標準仕様#y9807a95]] [#z00fdca5]

***[[CSI(Container Storage Interface)>コンテナの標準仕様#f78e2849]] [#odd00978]

***[[CNI(Container Network Interface)>コンテナの標準仕様#j757b1a3]] [#o5f190ed]

**標準化の動向 [#c2b84e28]

***2015年 [#u50a190d]
[[OCI(Open Container Initiative)>#z00fdca5]]
-コンテナ・ランタイムとコンテナ・イメージの標準
-6月にDocker社などの複数の企業によりイニシアチブ(組織)が設立された。

***2016年 [#vd6fce6b]
[[CRI(Container Runtime Interface)>#t04d9c7b]]
-[[Docker]]以外のコンテナ・ランタイムを組み込み易くするI/F標準。
-12月にkubeletとコンテナランタイムの通信規格として規定された

***2017年 [#i2ec3011]
-[[OCI(Open Container Initiative)>#z00fdca5]]~
7月に「OCI v1.0」が策定、以下がリリースされている。
--コンテナランタイムの標準仕様である「Runtime Specification」
--コンテナイメージの標準仕様である「Image Format Specification」

-[[CRI(Container Runtime Interface)>#t04d9c7b]]
--「[[cri-o>#n37e3d66]]」も1.0に到達
--kubeletとコンテナランタイム間のAPIのI/Fも「CRI」準拠のものとなった。

***2018年 [#q1c2e1bd]

-[[OCI(Open Container Initiative)>#z00fdca5]]~
4月にはコンテナイメージ配布の標準仕様を策定する、~
「Distribution Specification」プロジェクトへの着手が発表。

-[[CSI(Container Storage Interface)>#odd00978]]~
11月にコンテナ・オーケストレーション・ツールと~
ストレージ間のI/Fの標準仕様として、v1.0に到達した。

**[[Docker]]との関係 [#nd0739d1]
昨今、開発寄りなのかも知れない。
-アプリケーションの開発フェーズにおいて[[Docker]]が使われる。
-今後は、コンテナ・ランタイムの多様化が起きると言われている。

***containerd [#h78f8fe9]
デファクト・スタンダードのコンテナ・ランタイム

-2016年

--6-8月~
[[Swarm>Docker#u512f6bd]] と Kubernetesのコンテナ・オーケストレーション・ツールの主導権争い。

--10月~
Kubernetesが独自コンテナランタイム([[cri-o>#n37e3d66]])開発を表明

--12月~
中立的なコンテナ・ランタイムのため、[[Docker]]からcontainerdが分離された。

***cri-o [#n37e3d66]
[[Docker]]に依存しない軽量コンテナ・ランタイム

-2017年
--1.0が2017/10/17にリリースされた。
--ランタイムのみなので、[[Docker]]コマンドのような機能は備えていない。

*参考 [#g54270bb]
-Kubernetes~
https://ja.wikipedia.org/wiki/Kubernetes

-GKEを用いたレガシーシステムからのリプレース事例~
https://lp.google-mkto.com/rs/248-TPC-286/images/Google_Cloud_Kubernetes_Day_Session02.pdf

-Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー~
https://www.slideshare.net/ToruMakabe/kubernetes-120907020

**Qiita [#gd21561e]
-今さら人に聞けない Kubernetes とは?~
https://qiita.com/MahoTakara/items/85096f8b2632c802ab22

-構築関連は[[コチラ>Kubernetesの構築#gd21561e]]に移動しました。

**Publickey [#b2ba6395]
-Dockerを管理するKubernetesの基本的な動作や仕組みとは?~
Kubernetesを触ってみた。第20回 PaaS勉強会~
https://www.publickey1.jp/blog/14/dockerkubernetes_kubernetes20_paas_1.html

-Dockerコンテナ時代の第一章の終わり、そして第二章の展望など~
https://www.publickey1.jp/blog/17/post_265.html

***CRI [#bd0a533b]
-Kubernetes、独自のコンテナランタイム「cri-o」開発中。~
コンテナランタイムのインターフェイスを標準化し、~
Dockerだけでなくどんなコンテナランタイムでも対応可能に~
https://www.publickey1.jp/blog/16/kubernetescri-odocker.html

-「Kubernetesはオープンソースの~
コンテナオーケストレーションのデファクトになった」と、~
CoreOSがfleetの開発を終了、代わりにKubernetes採用を発表~
https://www.publickey1.jp/blog/17/kubernetescoreosfleetkubernetes.html

***OCI [#y2471083]
-Dockerエンジンのコアランタイムが~
「containerd」として分離、独立したオープンソースプロジェクトに。~
Docker、AWS、Google、IBM、マイクロソフトらが協力して開発推進へ~
https://www.publickey1.jp/blog/16/dockercontainerddockerawsgoogleibm.html

-Open Container Initiativeによる~
コンテナランタイムとコンテナイメージの~
最初の標準化作業が完了、「OCI v1.0」発表~
https://www.publickey1.jp/blog/17/open_container_initiativeoci_v10.html

-Kubernetes、Dockerに依存しないKubernetes用の~
軽量コンテナランタイム「cri-o」正式版1.0リリース~
https://www.publickey1.jp/blog/17/kubernetesdockerkubernetescri-o10.html

-事実上の標準コンテナランタイム~
「containerd」がバージョン1.0に到達~
https://www.publickey1.jp/blog/17/containerd10.html

-Kubernetes対応コンテナランタイム「containerd 1.1」正式リリース。~
CRIにネイティブ対応し、Dockerより軽量で高速な動作を実現~
https://www.publickey1.jp/blog/18/kubernetescontainerd_11cridocker.html

**IT Search+ [#j81f922c]
【連載】Kubernetes入門
-[1]Kubernetesとは~
https://news.mynavi.jp/itsearch/article/devsoft/4097

-[2]Dockerを触ってみる~
https://news.mynavi.jp/itsearch/article/devsoft/4208

-[[[3]Kubernetesを試す>Kubernetesの構築#i3250356]]

-[4]Kubernetesの4つのリソース - Pod/ReplicaSet/Deployment/Service~
https://news.mynavi.jp/itsearch/article/devsoft/4358

-Kubernetesのリソースタイプを体系的に学ぶ

--[5] Workloads~
https://news.mynavi.jp/itsearch/article/devsoft/4413
--[6] Discovery & LB~
https://news.mynavi.jp/itsearch/article/devsoft/4459
--[7] Config & Storage~
https://news.mynavi.jp/itsearch/article/devsoft/4516
--[8] Cluster~
https://news.mynavi.jp/itsearch/article/devsoft/4611
--[9] Metadata~
https://news.mynavi.jp/itsearch/article/devsoft/4665
-[10]Kubernetesのアーキテクチャ~
https://news.mynavi.jp/itsearch/article/devsoft/4729

-[[[11]-[13]k8s構築ツールの選択肢>Kubernetesの構築#i3250356]]

-[[[14]その他の学習用サービス>Kubernetesの構築#i3250356]]

-[15]CI/CDにおける潮流 - CIOpsからGitOpsへ~
https://news.mynavi.jp/itsearch/article/devsoft/5025

-DevOps

--[16]Jenkins Xを使ってKubernetesでDevOps~
https://news.mynavi.jp/itsearch/article/devsoft/5079

--[17]「ArgoCD」を使ってKubernetesでDevOps~
https://news.mynavi.jp/itsearch/article/devsoft/5154

--[18]Tektonを使ってKubernetesでDevOps~
https://news.mynavi.jp/itsearch/article/devsoft/5218

--[19]Spinnakerを使ってKubernetesでDevOps~
https://news.mynavi.jp/itsearch/article/devsoft/5311

**Kubernetes [#f9f4c856]
-Kubernetes Documentation~
https://kubernetes.io/docs/home/

***Concepts [#r02d3a19]
https://kubernetes.io/docs/concepts/
-Overview
-Cluster Architecture
-Workloads
-Services, Load Balancing, and Networking
-Storage
-Configuration
-Security
-Policies
-Scheduling
-Cluster Administration
-Extending Kubernetes

***Kubectl [#l10a8c3a]

-kubectl CLI~
https://kubernetes.io/docs/reference/kubectl/

-Kubectl Reference Docs~
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

***github.com [#d01789e2]
-kubernetes/kubernetes:~
Production-Grade Container Scheduling and Management~
https://github.com/kubernetes/kubernetes

**マイクロソフト系技術情報 Wiki [#ke5e4ce1]

***[[Docker Desktop for Windows>https://techinfoofmicrosofttech.osscons.jp/index.php?Docker%20Desktop%20for%20Windows]] [#qb5fcdac]

***[[Azure Kubernetes Service (AKS)>https://techinfoofmicrosofttech.osscons.jp/index.php?Azure%20Kubernetes%20Service%20%28AKS%29]] [#rc6e2b9b]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS