Kubernetes完全指南速查表 第5章 工作负载资源

总览

这篇文章是本人阅读青山真也的《k8s完全指南》后为自己整理的笔记。这份笔记有以下两个目的。

    通过输出来提高自己的理解能力,即可以记住在自己困难时应该参考哪里,以及不同资源的不同作用。

由于Qiita在我个人记忆概要上起到了备忘录的作用,所以我会省略详细的解释。请参考相关书籍以获得详细说明。

k8s完全指南是什么?

以下是亚马逊的描述。

本书是Kubernetes认证资格(认证Kubernetes管理员/认证Kubernetes应用开发者)持有者的实践经验传授!它充满了在生产环境中积累的使用Kubernetes的实践技巧。

Kubernetes是一个用于自动化容器化应用程序的部署、扩展和管理的平台(容器编排引擎)。本书的目标是使没有接触过Kubernetes的人能够理解Kubernetes的概念,并能够将应用程序容器化并运行起来。

在前半部分,本书以图示为基础,系统而全面地介绍了Kubernetes的各种资源。后半部分介绍了Kubernetes周边生态系统,如清单管理(Helm/Ksonnet)、监控(Prometheus/Datadog)、日志聚合(Fluentd/Datadog)、持续集成/持续部署(Spinnaker/JenkinsX/Scaffold)、服务网格(Istio/Conduit/Linkerd)、服务经纪人等,促进基于云原生开发的使用Kubernetes。

第五章 工作负载资源

5.1 工作负荷资源概览

    • コンテナの実行に関するリソース. 全部で8種類.

Podは最小単位,それらを管理するのが他のWorkloadリソース

Workload リソース使い分け方Podデバッグ,確認用途Replication Controller非推奨,代わりにReplicaSetを利用ReplicaSetPodをスケールさせて管理,基本的にはDeployment経由で利用Deploymentスケールさせるワークロードに利用DaemonSet各ノードに1つずつPodを配置したい時に利用StatefulSetデータの永続化などのステートを持つワークロードに利用Jobワークキューやタスクなどコンテナの終了が必要なワークロードに利用CronJob定期的にJobを作成したい時に利用
    以下,親子関係
 Tier 1               Tier2                  Tier 3
   Pod   <--  ReplicationController
   Pod   <--        ReplicaSet       <--   Deployment
   Pod   <--        DaemonSet
   Pod   <--       StatefulSet 
   Pod   <--           Job           <--    CronJob

5.2. 胶囊

    • Podは1つ以上のコンテナから構成

2つのコンテナが入ったPodを作成した時,2つのコンテナは同一のIPアドレスを保持
つまりNetwork NamespaceはPod内で共有

Podのデザインパターン

役割サイドカーパターンメインコンテナに機能を追加(e.g., コンフィグ変更検知によるアプリケーションの設定の動的書き換え)アンバサダーパターン外部システムとのやり取りの代理(e.g., アプリケーションによるDBへのRead/WriteをProxyを通してCloudSQLに送信)アダプタパターン外部からのアクセスのインターフェース(e.g. Prometheusの形式に合わせた外部との通信インターフェース)

5.3. 副本集/复制控制器

    Podのレプリカを作成し,指定した数のPodを維持し続けるリソース

5.4. 部署

    • 複数のReplicaSetを管理することでローリングアップデートやロールバックなどを実現

Pod単体だとPodに障害が発生した際に自動でPodが再作成されることはない
ReplicaSetだけだとローリングアップデートやロールバックの機能が利用不可

利点

新しいReplicaSet上でコンテナが起動したことや,ヘルスチェックが通っていることを確認しつつの切り替え
ReplicaSetの移行過程におけるPod数の細かい指定も可能

5.5 DaemonSet

5.5 守护进程集

    • ReplicaSetの特殊系

 

    • ReplicaSetでは各k8s Node上に合計N個のPodをNodeのリソース状況に合わせて配置するため...

各Node上のPodの数が等しくなるとは限らない
全てのNode上に確実に配置されるとも限らない

DaemonSetは各ノードにPodを1つずつ配置するリソース

レプリカ数は指定できない
1ノードに2Podずつ配置するということも出来ない

Podを配置したくないノードは除外できる(nodeSelector, Node Anti-Affinityを利用したスケジューリング)

ユースケース: 全Node上で必ず動作させたいプロセス

各Podが出力するログをホスト単位で収集するFluentd
各Podのリソースの使用状況やノードの状態をモニタリングするDatalog

5.6 StatefulSet
5.6 有状态副本集

    • ReplicaSetの特殊系

 

    • DBなどのステートフルなワークロードに対応するためのリソース

 

    • ReplicaSetとの主な違い

作成されるPodのサフィックスは数字のインデックスが付与
データを永続化するための仕組みがある

PersistentVolume(永続化領域)を利用している場合はPodの再起動時に同じ領域を利用して再作成
Pod名が変わらない

5.7. 工作

    • コンテナを利用して一度限りの処理を実行させるリソース

N並列で実行しながら指定した回数のコンテナの正常終了を保証するリソース

ReplicaSetとの主な違い

起動するPodが停止することが前提
Podの停止が正常終了するような用途

ReplicaSetではPodの終了は予期せぬエラー

ユースケース : 長期間の実行が予想されること

特定のサーバとのrsync
S3などのObject Storageへのアップロード

5.8. 定时任务

    Cronのようにスケジュールされた時間にJobを作成
广告
将在 10 秒后关闭
bannerAds