@@ -22,9 +22,9 @@ DaemonSetのいくつかの典型的な使用例は以下の通りです。
22
22
23
23
<!-- body -->
24
24
25
- ## DaemonSet Specの記述
25
+ ## DaemonSet Specの記述 {#writing-a-daemonset-spec}
26
26
27
- ### DaemonSetの作成
27
+ ### DaemonSetの作成 {#create-a-daemonset}
28
28
29
29
ユーザーはYAMLファイル内でDaemonSetの設定を記述することができます。例えば、下記の` daemonset.yaml ` ファイルでは` fluentd-elasticsearch ` というDockerイメージを稼働させるDaemonSetの設定を記述します。
30
30
@@ -36,7 +36,7 @@ YAMLファイルに基づいてDaemonSetを作成します。
36
36
kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml
37
37
```
38
38
39
- ### 必須のフィールド
39
+ ### 必須のフィールド {#required-fields}
40
40
41
41
他の全てのKubernetesの設定と同様に、DaemonSetは` apiVersion ` 、` kind ` と` metadata ` フィールドが必須となります。設定ファイルの活用法に関する一般的な情報は、[ ステートレスアプリケーションの稼働] ( /ja/docs/tasks/run-application/run-stateless-application-deployment/ ) 、[ コンテナの設定] ( /ja/docs/tasks/ ) 、[ kubectlを用いたオブジェクトの管理] ( /ja/docs/concepts/overview/working-with-objects/object-management/ ) といったドキュメントを参照ください。
42
42
@@ -45,7 +45,7 @@ DaemonSetオブジェクトの名前は、有効な
45
45
46
46
また、DaemonSetにおいて[ ` .spec ` ] ( https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status ) セクションも必須となります。
47
47
48
- ### Podテンプレート
48
+ ### Podテンプレート {#pod-template}
49
49
50
50
` .spec.template ` は` .spec ` 内での必須のフィールドの1つです。
51
51
@@ -55,7 +55,7 @@ Podに対する必須のフィールドに加えて、DaemonSet内のPodテン
55
55
56
56
DaemonSet内のPodテンプレートでは、[ ` RestartPolicy ` ] ( /ja/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy ) フィールドを指定せずにデフォルトの` Always ` を使用するか、明示的に` Always ` を設定するかのどちらかである必要があります。
57
57
58
- ### Podセレクター
58
+ ### Podセレクター {#pod-selector}
59
59
60
60
` .spec.selector ` フィールドはPodセレクターとなります。これは[ Job] ( /docs/concepts/workloads/controllers/job/ ) の` .spec.selector ` と同じものです。
61
61
@@ -70,14 +70,14 @@ Kubernetes1.8のように、ユーザーは`.spec.template`のラベルにマッ
70
70
71
71
もし` spec.selector ` が指定されたとき、` .spec.template.metadata.labels ` とマッチしなければなりません。この2つの値がマッチしない設定をした場合、APIによってリジェクトされます。
72
72
73
- ### 選択したNode上でPodを稼働させる
73
+ ### 選択したNode上でPodを稼働させる {#running-pods-on-select-nodes}
74
74
75
75
もしユーザーが` .spec.template.spec.nodeSelector ` を指定したとき、DaemonSetコントローラーは、その[ node selector] ( /ja/docs/concepts/scheduling-eviction/assign-pod-node/ ) にマッチするNode上にPodを作成します。同様に、もし` .spec.template.spec.affinity ` を指定したとき、DaemonSetコントローラーは[ node affinity] ( /ja/docs/concepts/scheduling-eviction/assign-pod-node/ ) にマッチするNode上にPodを作成します。
76
76
もしユーザーがどちらも指定しないとき、DaemonSetコントローラーは全てのNode上にPodを作成します。
77
77
78
- ## Daemon Podがどのようにスケジューリングされるか
78
+ ## Daemon Podがどのようにスケジューリングされるか {#how-daemon-pods-are-scheduled}
79
79
80
- ### デフォルトスケジューラーによってスケジューリングされる場合
80
+ ### デフォルトスケジューラーによってスケジューリングされる場合 {#scheduled-by-default-scheduler}
81
81
82
82
{{< feature-state for_k8s_version="1.17" state="stable" >}}
83
83
@@ -102,7 +102,7 @@ nodeAffinity:
102
102
103
103
さらに、` node.kubernetes.io/unschedulable:NoSchedule`というtolarationがDaemonSetのPodに自動的に追加されます。デフォルトスケジューラーは、DaemonSetのPodのスケジューリングのときに、`unschedulable`なNodeを無視します。
104
104
105
- # ## TaintsとTolerations
105
+ # ## TaintsとTolerations {#taints-and-tolerations}
106
106
107
107
DaemonSetのPodは[TaintsとTolerations](/ja/docs/concepts/scheduling-eviction/taint-and-toleration/)の設定を尊重します。下記のTolerationsは、関連する機能によって自動的にDaemonSetのPodに追加されます。
108
108
@@ -115,7 +115,7 @@ DaemonSetのPodは[TaintsとTolerations](/ja/docs/concepts/scheduling-eviction/t
115
115
| `node.kubernetes.io/unschedulable` | NoSchedule | 1.12+ | DaemonSetのPodはデフォルトスケジューラーによってスケジュール不可能な属性を許容(tolerate)します。 |
116
116
| `node.kubernetes.io/network-unavailable` | NoSchedule | 1.12+ | ホストネットワークを使うDaemonSetのPodはデフォルトスケジューラーによってネットワーク利用不可能な属性を許容(tolerate)します。 |
117
117
118
- # # Daemon Podとのコミュニケーション
118
+ # # Daemon Podとのコミュニケーション {#communicating-with-daemon-pods}
119
119
120
120
DaemonSet内のPodとのコミュニケーションをする際に考えられるパターンは以下の通りです。 :
121
121
@@ -124,7 +124,7 @@ DaemonSet内のPodとのコミュニケーションをする際に考えられ
124
124
- **DNS**: 同じPodセレクターを持つ[HeadlessService](/ja/docs/concepts/services-networking/service/#headless-service)を作成し、`endpoints`リソースを使ってDaemonSetを探すか、DNSから複数のAレコードを取得します。
125
125
- **Service**: 同じPodセレクターを持つServiceを作成し、複数のうちのいずれかのNode上のDaemonに疎通させるためにそのServiceを使います。
126
126
127
- # # DaemonSetの更新
127
+ # # DaemonSetの更新 {#updating-a-daemonset}
128
128
129
129
もしNodeラベルが変更されたとき、そのDaemonSetは直ちに新しくマッチしたNodeにPodを追加し、マッチしなくなったNodeからPodを削除します。
130
130
@@ -134,25 +134,25 @@ DaemonSet内のPodとのコミュニケーションをする際に考えられ
134
134
135
135
ユーザーはDaemonSet上で[ローリングアップデートの実施](/docs/tasks/manage-daemon/update-daemon-set/)が可能です。
136
136
137
- # # DaemonSetの代替案
137
+ # # DaemonSetの代替案 {#alternatives-to-daemonset}
138
138
139
- # ## Initスクリプト
139
+ # ## Initスクリプト {#init-scripts}
140
140
141
141
Node上で直接起動することにより(例 : ` init` 、`upstartd`、`systemd`を使用する)、デーモンプロセスを稼働することが可能です。この方法は非常に良いですが、このようなプロセスをDaemonSetを介して起動することはいくつかの利点があります。
142
142
143
143
- アプリケーションと同じ方法でデーモンの監視とログの管理ができる。
144
144
- デーモンとアプリケーションで同じ設定用の言語とツール(例 : Podテンプレート、`kubectl`)を使える。
145
145
- リソースリミットを使ったコンテナ内でデーモンを稼働させることにより、デーモンとアプリケーションコンテナの分離を促進します。しかし、これはPod内でなく、コンテナ内でデーモンを稼働させることにより可能です(Dockerを介して直接起動する)。
146
146
147
- # ## ベアPod
147
+ # ## ベアPod {#bare-pods}
148
148
149
149
特定のNode上で稼働するように指定したPodを直接作成することは可能です。しかし、DaemonSetはNodeの故障やNodeの破壊的なメンテナンスやカーネルのアップグレードなど、どのような理由に限らず、削除されたもしくは停止されたPodを置き換えます。このような理由で、ユーザーはPod単体を作成するよりもむしろDaemonSetを使うべきです。
150
150
151
- # ## 静的Pod Pods
151
+ # ## 静的Pod Pods {#static-pods}
152
152
153
153
Kubeletによって監視されているディレクトリに対してファイルを書き込むことによって、Podを作成することが可能です。これは[静的Pod](/ja/docs/tasks/configure-pod-container/static-pod/)と呼ばれます。DaemonSetと違い、静的Podはkubectlや他のKubernetes APIクライアントで管理できません。静的PodはApiServerに依存しておらず、クラスターの自立起動時に最適です。また、静的Podは将来的には廃止される予定です。
154
154
155
- # ## Deployment
155
+ # ## Deployment {#deployments}
156
156
157
157
DaemonSetは、Podの作成し、そのPodが停止されることのないプロセスを持つことにおいて[Deployment](/ja/docs/concepts/workloads/controllers/deployment/)と同様です(例 : webサーバー、ストレージサーバー)。
158
158
0 commit comments