-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_Kubernetes
- 戻る(Open PaaS)
- OpenShift
- Cloud Foundry
- Kubernetes
-
ネットワークインフラなどの自動展開やスケーリングといったコンテナの運用を自動化するための、
フリーソフトウェアによって構成されるコンテナ・オーケストレーション・プラットフォーム。 -
Open PaaSと比較されることが多いが、
ジャンルとしては、PaaSではなく、CaaS(新設)らしい。
- クバネティス / クバネテス / クーべネティス
- ギリシャ語で航海長またはパイロットを意味する。
- K8sと略記される。
-
当初、Googleが開発していた。
Google の Borg という 15 年にわたるプロジェクトに基づいている。 -
オープンソースソフトウェアとして公開したことで、
MicrosoftやRed Hatといった多くのIT企業が開発に参加表明。
Google、Kubernetes発表(6月)
-
2月
OpenShift V3、DockerとKubernetesをコアとすると発表。 -
7月
- バージョン1.0に達する
- CNCFが設立され開発主体がこの団体へ移動。
Swarm(Dockerの該当節を参照) 対 Kubernetesの状態
- 10月
Kubernetesが独自コンテナランタイム(cri-o)開発を表明
コンテナ・オーケストレーションのデファクトになった。
-
初頭に、Kubernetesをサポートする
Public Cloud は Google Cloud Platformのみだった。 -
2月
Microsoft AzureがKubernetesの公式サポートを表明、
クラウド業界は次第にKubernetesにシフトするようになった。- オラクルやVMwareといった企業もCNCFに参加を表明
- GoogleやMicrosoftとは競合関係にあるAWSも参加
-
10月に、DockerがKubernetesサポートすることを発表。
- 1月時点でLinux Foundationの傘下にある
CNCFが管理するオープンソースプロジェクトになった。
標準化の動向を参照。
-
ネットワークで接続された複数のLinux上にクラスタを構築することで動作する。
-
マスターとノードのコンポーネントは同一のマシン上に存在してもよく、
最小の構成では1台からなるKubernetesクラスタが構築出来る。
制御プレーンとも。
Kubernetes APIを外部に公開するためのコンポーネント。
Kubernetesクラスタの情報を保存する分散キーバリューストア。
ポッドをどのノードに対してデプロイするかを選択するコンポーネント。
Kubernetesクラスタの各種コントローラを実行するコンポーネント。
- Kubernetesとプラットフォームとなっている
クラウドプロバイダとの相互作用を担うコンポーネント。 - 各クラウドプロバイダに特化した機能を提供し、パフォーマンスを向上する。
アドオンを参照。
実行ノードとも。
-
ノード上に常駐し、ノードの生存をクラスタに対して通知する。
-
自身に対するポッドの割り当てが行われたかどうかを監視して
- ボリュームのマウント、
- コンテナのダウンロード/デプロイ、
- ポッドの生存確認
などを行い、クラスタに通知する機能も担う。
外部やapiserverからのアクセスを、
ノード上の各ポッドに対して転送し、
ポッドへのアクセスを抽象化するコンポーネント。
- 実際にコンテナを動作させるバックエンドに利用される。
- 全て Kubernetes CRI (Container Runtime Interface) 実装
-
環境内の他のDNSサーバ
-
以下のDNSレコードを提供するDNSサーバ
- 環境内の他のDNSサーバ
- Kubernetesサービスの
-
supervisord
-
kubeletとDockerが正しく動作
し続けるように監視及び管理するコンポーネント。
- fluentd
- クラスタレベルでのロギングを補助する。
マスター上のkube-controller-manager上で実行される。
下位要素は、ReplicaSet
下位要素は、ポッド
- 負荷分散や、SLAの維持のためレプリカ数のポッドが利用可能であることを保証する。
- ポッドがどのノードで動くかは、kube-schedulerによって決定される。
下位要素は、ポッド
-
ノードが単一のポッドのコピーを稼働させることを保証する。
-
全ノードや特定のノード群に対してある機能を実行しておきたい場合に使う。
-
具体的な利用シーンとしては、ログ収集のエージェントなどがある。
下位要素は、ポッド
-
データベースなどステートフルなポッドが必要な場合はStatefulSetを使って展開。
-
Deploymentでは、全てのポッドで1個のPVをマウントするが、
StatefulSetで作成されたポッドは、それぞれ単一のPVをマウントする。 -
StatefulSetを使うとストレージやネットワーク名などが保持される。
-
データベースなど、データの永続化の用途で利用される。
- いくつかのコンテナをグループ化したもの。
- ポッド単位で作成、開始、停止、削除といった操作を行う。
- 1つのコンテナを作成したいときも「コンテナが1つ含まれるポッド」を作成する。
以下の特徴がある。
-
ポッド内のコンテナは、同一ホスト上に配備される。
-
ポッド内のコンテナは、仮想NICやプロセステーブルを共有する。
→ つまり、同じIPを使えたり、互いのプロセスが見えたりする。- 各ポッドには固有のIPアドレスがあり、ポートスペース全体を所有している。
- ポッド内のコンテナはストレージを共有できる。
-
ポッドには、ポッドをグループするための1つ以上のラベルを指定できる。
-
一般的には、サーバと、そのサーバと共に実行する補助サービスを含める。
- Webサーバ
- APサーバ
- DBサーバ
- KVSサーバ
- 抽象化されたポッドと疎結合なリソースで、ポッドに紐づく。
- ポッド内のコンテナがデータを読み書きできるディスク領域。
- 様々な種類が提供されている。
ボリュームには様々な種類や用途がある。
-
一時領域
- CONFIG
-
データ共有
-
永続領域
-
高可用性
- DBの高可用性オプションによるもの
- ReplicaSetによるもの
-
-
emptyDir
- ポッド用の一時的なディスク領域
- ポッドが terminate されると削除される。
-
hostPath
ノード(ホスト)の任意の領域をマウントできる。 -
PersistentVolume(PV)
永続化領域として確保されるボリューム。
ネットワーク機能を提供するコンポーネント
- ポッドに対して通信をルーティングする。
- ポッドに対する通信を維持する(SLA、負荷分散)
以下の種類がある。
- Node Port
- Cluster IP
- Load Balancer
- , etc.
※ 詳しくはService。
以下に分類される。リソースを定義するYAMLの記述方法の詳細はAPIドキュメントを参照ください。
Kubernetesを構成する基本的なリソース
- Job
バッチ処理が終わったらPodが(正常)終了。 - CronJob
Jobをスケジュール実行する。
基本的なリソースに対して、外部から参照する口を提供するもの
-
L4のロードバランシングを実現する。
-
Serviceは、既定で利用可能。
-
種別
以下のような種別がある。-
Node Port
-
<Node IP>:<Node Port>にアクセスを提供する。 -
<Node IP>は、マスタのIPで、サービスの全Nodeを公開
-
-
Cluster IP
サービスの特定のNodeを公開(内部通信用) -
External IP
サービスの特定のNodeを公開(外部通信用) -
Headless
DNS ラウンドロビンによる転送先PodのIPアドレス取得 -
Endpoint(selector 指定無し)
-
-
Load balancer
- L4ロード・バランシングを実現する。
- Cluster IPに負荷分散機能を加えている。
-
Ingress
- L7ロード・バランシングを実現する。
- IngressリソースにはIngressコントローラーが必要。
-
External Name
- 外部のドメイン宛のCNAMEを返す機能を提供する。
- 例えば、Podから外部のexample.comへアクセスする場合。
-
None-Selector
外部のサービスに対してロード・バランシング
Key-Valueで構成され、アプリケーションの設定値を管理するリソース。
パスワードなどの機密情報を管理するリソース。
Podのデータを永続化するための仕組み。
-
PersistentVolumeClaim (PVC)
PodにVolumeやPersistentVolume (PV)を間接的に指定。-
PV の要求を行うリソース。
-
PVC は要求された内容(容量、ラベル)から
適切な PV を探し、ボリュームを割り当てる。 -
プロビジョニングの方法として以下の2つの方法がある。
- Static : 予め PV を作成
- Dynamic : PVC が作成した際に動的に PV を作成
-
-
Namespace
分離 / 独立した環境を準備する。 -
PersistentVolume (PV)
- PersistentVolumeClaim(PVC)経由で利用する。
- accessModes, capacity, storageClassName, volumeMode, etc.を定義
-
RBAC (Role Based Access Control)
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
-
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
上記条件に当てはまらない
- Guaranteed
-
HorizontalPodAutoscaler(HPA)
- Pod数を増減
- 動的な水平スケーリングを実現
- Webサーバなど永続化データを持たないサーバが対象
-
VerticalPodAutoscaler(VPA)
- Podに割り当てるCPU / メモリ量を増減
- 動的な垂直スケーリングを実現
- DBサーバなど永続化データを持つサーバが対象
kubectlの該当節を参照。
kubectlの該当節を参照。
Komposeと同じだが、開発元が別の会社。
Docker Compose ファイルを Kubernetes オブジェクトに変換できる。
Kubernetes の charts を利用するための簡単なツール
Helmのウワモノ。
コンテナの標準仕様の該当節を参照。
コンテナの標準仕様の該当節を参照。
コンテナの標準仕様の該当節を参照。
コンテナの標準仕様の該当節を参照。
OCI(Open Container Initiative)
- コンテナ・ランタイムとコンテナ・イメージの標準
- 6月にDocker社などの複数の企業によりイニシアチブ(組織)が設立された。
CRI(Container Runtime Interface)
- Docker以外のコンテナ・ランタイムを組み込み易くするI/F標準。
- 12月にkubeletとコンテナランタイムの通信規格として規定された
-
OCI(Open Container Initiative)
7月に「OCI v1.0」が策定、以下がリリースされている。- コンテナランタイムの標準仕様である「Runtime Specification」
- コンテナイメージの標準仕様である「Image Format Specification」
-
CRI(Container Runtime Interface)
- 「cri-o」も1.0に到達
- kubeletとコンテナランタイム間のAPIのI/Fも「CRI」準拠のものとなった。
-
OCI(Open Container Initiative)
4月にはコンテナイメージ配布の標準仕様を策定する、
「Distribution Specification」プロジェクトへの着手が発表。 -
CSI(Container Storage Interface)
11月にコンテナ・オーケストレーション・ツールと
ストレージ間のI/Fの標準仕様として、v1.0に到達した。
昨今、開発寄りなのかも知れない。
- アプリケーションの開発フェーズにおいてDockerが使われる。
- 今後は、コンテナ・ランタイムの多様化が起きると言われている。
デファクト・スタンダードのコンテナ・ランタイム
-
2016年
Dockerに依存しない軽量コンテナ・ランタイム
-
2017年
- 1.0が2017/10/17にリリースされた。
- ランタイムのみなので、Dockerコマンドのような機能は備えていない。
-
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
-
今さら人に聞けない Kubernetes とは?
https://qiita.com/MahoTakara/items/85096f8b2632c802ab22 -
構築関連は Kubernetesの構築の該当節に移動しました。
-
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
-
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
-
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
【連載】Kubernetes入門
-
[1]Kubernetesとは
https://news.mynavi.jp/itsearch/article/devsoft/4097 -
[2]Dockerを触ってみる
https://news.mynavi.jp/itsearch/article/devsoft/4208 -
[3]Kubernetesを試す(Kubernetesの構築の該当節を参照)
-
[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
- [5] Workloads
-
[10]Kubernetesのアーキテクチャ
https://news.mynavi.jp/itsearch/article/devsoft/4729 -
[11]-[13]k8s構築ツールの選択肢(Kubernetesの構築の該当節を参照)
-
[14]その他の学習用サービス(Kubernetesの構築の該当節を参照)
-
[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 Documentation
https://kubernetes.io/docs/home/
https://kubernetes.io/docs/concepts/
- Overview
- Cluster Architecture
- Workloads
- Services, Load Balancing, and Networking
- Storage
- Configuration
- Security
- Policies
- Scheduling
- Cluster Administration
- Extending Kubernetes
-
kubectl CLI
https://kubernetes.io/docs/reference/kubectl/ -
Kubectl Reference Docs
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
- kubernetes/kubernetes:
Production-Grade Container Scheduling and Management
https://github.com/kubernetes/kubernetes
Azure Kubernetes Service (AKS)
移行メモ
- 「リソースで分類」の冒頭「に分類されます。」は主語が欠けていたため 「以下に分類される。」と補った。
- 「マシンリソースを超えたリソースを割当を行う場合」は 「マシンリソースを超えたリソースの割当を行う場合」に、 「[Kompose]と同じだが、開発元が社」は「開発元が別の会社。」に正した。
- マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への リンクは、移行済みの
MS_DockerDesktopForWindows/MS_AKSに張り替えた。
Tags: 移行, Kubernetes, K8s, コンテナ, オーケストレーション, Docker, CRI, OCI
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。