Skip to content

Commit 1ee37f7

Browse files
authored
Merge pull request #23218 from shuuji3/tasks/configure-pod-container/static-pod
Translate tasks/configure-pod-container/static-pod into Japanese
2 parents d8746d8 + 02723a2 commit 1ee37f7

File tree

5 files changed

+260
-2
lines changed

5 files changed

+260
-2
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
title: Docker
3+
id: docker
4+
date: 2018-04-12
5+
full_link: https://docs.docker.com/engine/
6+
short_description: >
7+
Dockerは、コンテナとして知られる、オペレーティングシステムレベルでの仮想化を提供するソフトウェア技術です。
8+
9+
aka:
10+
tags:
11+
- fundamental
12+
---
13+
Docker(正確にはDocker Engine)は、{{< glossary_tooltip text="コンテナ" term_id="container" >}}としても知られる、オペレーティングシステムレベルでの仮想化を提供するソフトウェア技術です。
14+
15+
<!--more-->
16+
17+
Dockerは、cgroupsやカーネル名前空間などのLinuxカーネルのリソースの隔離機能、OverlayFSなどの統合能力のあるファイルシステム、独立したコンテナを単一のLinuxインスタンス内で実行可能にするその他の機能などを利用して、マシンレベルでの仮想マシン(VM)の起動にかかるオーバーヘッドを回避します。
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
title: ラベル
3+
id: label
4+
date: 2018-04-12
5+
full_link: /docs/concepts/overview/working-with-objects/labels
6+
short_description: >
7+
ユーザーにとって意味があり関連性のある識別属性を、オブジェクトにタグ付けするものです。
8+
9+
aka:
10+
tags:
11+
- fundamental
12+
---
13+
ユーザーにとって意味があり関連性のある識別属性を、オブジェクトにタグ付けするものです。
14+
15+
<!--more-->
16+
17+
ラベルは、{{< glossary_tooltip text="Pod" term_id="pod" >}}などのオブジェクトに付与されるキーと値のペアです。オブジェクトのサブセットを組織化したり選択したりするために使われます。
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
title: ミラーPod
3+
id: mirror-pod
4+
date: 2019-08-06
5+
short_description: >
6+
kubelet上のstatic Podを追跡するAPIサーバー内のオブジェクトです。
7+
8+
aka:
9+
tags:
10+
- fundamental
11+
---
12+
kubeletが{{< glossary_tooltip text="static Pod" term_id="static-pod" >}}を代表するために使用する{{< glossary_tooltip text="Pod" term_id="pod" >}}オブジェクトです。
13+
14+
<!--more-->
15+
16+
kubeletが設定の中にstatic Podを発見すると、static Podに対応するPodオブジェクトをKubernetes APIサーバー上に自動的に作成しようとします。つまり、APIサーバーからはPodが見えていますが、制御まではできないということです。
17+
18+
(たとえば、ミラーPodを削除しても、kubeletデーモンが対応するPodの実行を停止することはありません。)

content/ja/docs/reference/glossary/selector.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ id: selector
44
date: 2018-04-12
55
full_link: /docs/concepts/overview/working-with-objects/labels/
66
short_description: >
7-
ユーザーはラベルに基づいてリソースのリストをフィルタリングできます。
7+
セレクターを利用すると、ユーザーはラベルに基づいてリソースのリストをフィルタリングできます。
88
99
aka:
1010
tags:
1111
- fundamental
1212
---
13-
ユーザーは{{< glossary_tooltip text="ラベル" term_id="label" >}}に基づいてリソースのリストをフィルタリングできます。
13+
セレクターを利用すると、ユーザーは{{< glossary_tooltip text="ラベル" term_id="label" >}}に基づいてリソースのリストをフィルタリングできます。
1414

1515
<!--more-->
1616

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
---
2+
title: static Podを作成する
3+
weight: 170
4+
content_type: task
5+
---
6+
7+
<!-- overview -->
8+
9+
10+
*Static Pod*とは、{{< glossary_tooltip text="APIサーバー" term_id="kube-apiserver" >}}が監視せず、特定のノード上のkubeletデーモンによって直接管理されるPodです。コントロールプレーンに管理されるPod(たとえば{{< glossary_tooltip text="Deployment" term_id="deployment" >}}など)とは異なり、kubeletがそれぞれのstatic Podを監視(および障害時には再起動)します。
11+
12+
Static Podは、常に特定のノード上の1つの{{< glossary_tooltip term_id="kubelet" >}}に紐付けられます。
13+
14+
kubeletは、各static Podに対して、自動的にKubernetes APIサーバー上に{{< glossary_tooltip text="ミラーPod" term_id="mirror-pod" >}}の作成を試みます。つまり、ノード上で実行中のPodはAPIサーバーから検出されますが、APIサーバー自身から制御されることはないということです。
15+
16+
{{< note >}}
17+
複数ノードからなるKubernetesクラスターを実行していて、Podをすべてのノード上で実行するためにstatic Podを使用している場合、おそらくstatic Podの代わりに{{< glossary_tooltip text="DaemonSet" term_id="daemonset" >}}を使用するべきでしょう。
18+
{{< /note >}}
19+
20+
## {{% heading "prerequisites" %}}
21+
22+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
23+
24+
このページの説明では、Podを実行するために{{< glossary_tooltip term_id="docker" >}}を使用しており、ノード上のOSがFedoraであることを前提としています。他のディストリビューションやKubernetesのインストール方法によっては、操作が異なる場合があります。
25+
26+
<!-- steps -->
27+
28+
## static Podを作成する {#static-pod-creation}
29+
30+
static Podは、[ファイルシステム上でホストされた設定ファイル](#configuration-files)または[ウェブ上でホストされた設定ファイル](/#pods-created-via-http)を使用して設定できます。
31+
32+
### ファイルシステム上でホストされたstatic Podマニフェスト {#configuration-files}
33+
34+
マニフェストは、JSONまたはYAML形式の標準のPod定義で、特定のディレクトリに置きます。[kubeletの設定ファイル](/docs/tasks/administer-cluster/kubelet-config-file)の中で、`staticPodPath: <ディレクトリの場所>`というフィールドを使用すると、kubeletがこのディレクトリを定期的にスキャンして、YAML/JSONファイルが作成/削除されるたびに、static Podの作成/削除が行われるようになります。指定したディレクトリをスキャンする際、kubeletはドットから始まる名前のファイルを無視することに注意してください。
35+
36+
例として、単純なウェブサーバーをstatic Podとして実行する方法を示します。
37+
38+
1. static Podを実行したいノードを選択します。この例では、`my-node1`です。
39+
40+
```shell
41+
ssh my-node1
42+
```
43+
44+
2. ディレクトリを選び(ここでは`/etc/kubelet.d`とします)、ここにウェブサーバーのPodの定義を置きます。たとえば、`/etc/kubelet.d/static-web.yaml`に置きます。
45+
46+
```shell
47+
# このコマンドは、kubeletが実行中のノード上で実行してください
48+
mkdir /etc/kubelet.d/
49+
cat <<EOF >/etc/kubelet.d/static-web.yaml
50+
apiVersion: v1
51+
kind: Pod
52+
metadata:
53+
name: static-web
54+
labels:
55+
role: myrole
56+
spec:
57+
containers:
58+
- name: web
59+
image: nginx
60+
ports:
61+
- name: web
62+
containerPort: 80
63+
protocol: TCP
64+
EOF
65+
```
66+
67+
3. ノード上のkubeletがこのディレクトリを使用するようにするために、`--pod-manifest-path=/etc/kubelet.d/`引数を付けてkubeletを実行するように設定します。Fedoraの場合、次の行が含まれるように`/etc/kubernetes/kubelet`を編集します。
68+
69+
```
70+
KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --pod-manifest-path=/etc/kubelet.d/"
71+
```
72+
73+
あるいは、[kubeletの設定ファイル](/docs/tasks/administer-cluster/kubelet-config-file)に、`staticPodPath: <ディレクトリの場所>`フィールドを追加することでも設定できます。
74+
75+
4. kubeletを再起動します。Fedoraの場合、次のコマンドを実行します。
76+
77+
```shell
78+
# このコマンドは、kubeletが実行中のノード上で実行してください
79+
systemctl restart kubelet
80+
```
81+
82+
### ウェブ上でホストされたstatic Podマニフェスト {#pods-created-via-http}
83+
84+
kubeletは、`--manifest-url=<URL>`引数で指定されたファイルを定期的にダウンロードし、Podの定義が含まれたJSON/YAMLファイルとして解釈します。kubeletは、[ファイルシステム上でホストされたマニフェスト](#configuration-files)での動作方法と同じように、定期的にマニフェストを再取得します。static Podのリスト中に変更が見つかると、kubeletがその変更を適用します。
85+
86+
このアプローチを採用する場合、次のように設定します。
87+
88+
1. YAMLファイルを作成し、kubeletにファイルのURLを渡せるようにするために、ウェブサーバー上に保存する。
89+
90+
```yaml
91+
apiVersion: v1
92+
kind: Pod
93+
metadata:
94+
name: static-web
95+
labels:
96+
role: myrole
97+
spec:
98+
containers:
99+
- name: web
100+
image: nginx
101+
ports:
102+
- name: web
103+
containerPort: 80
104+
protocol: TCP
105+
```
106+
107+
2. 選択したノード上のkubeletを`--manifest-url=<manifest-url>`を使用して実行することで、このウェブ上のマニフェストを使用するように設定する。Fedoraの場合、`/etc/kubernetes/kubelet`に次の行が含まれるように編集します。
108+
109+
```
110+
KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --manifest-url=<マニフェストのURL"
111+
```
112+
113+
3. kubeletを再起動する。Fedoraの場合、次のコマンドを実行します。
114+
115+
```shell
116+
# このコマンドは、kubeletが実行中のノード上で実行してください
117+
systemctl restart kubelet
118+
```
119+
120+
## static Podの動作を観察する {#behavior-of-static-pods}
121+
122+
kubeletが起動すると、定義されたすべてのstatic Podを起動します。ここまででstatic Podを設定してkubeletを再起動したため、すでに新しいstatic Podが実行中になっているはずです。
123+
124+
次のコマンドを(ノード上で)実行することで、(static Podを含む)実行中のコンテナを確認できます。
125+
126+
```shell
127+
# このコマンドは、kubeletが実行中のノード上で実行してください
128+
docker ps
129+
```
130+
131+
出力は次のようになります。
132+
133+
```
134+
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
135+
f6d05272b57e nginx:latest "nginx" 8 minutes ago Up 8 minutes k8s_web.6f802af4_static-web-fk-node1_default_67e24ed9466ba55986d120c867395f3c_378e5f3c
136+
```
137+
138+
APIサーバー上では、ミラーPodを確認できます。
139+
140+
```shell
141+
kubectl get pods
142+
```
143+
```
144+
NAME READY STATUS RESTARTS AGE
145+
static-web-my-node1 1/1 Running 0 2m
146+
```
147+
148+
{{< note >}}
149+
kubeletにAPIサーバー上のミラーPodを作成する権限があることを確認してください。もし権限がない場合、APIサーバーによって作成のリクエストが拒否されてしまいます。詳しくは、[PodSecurityPolicy](/docs/concepts/policy/pod-security-policy/)を参照してください。
150+
{{< /note >}}
151+
152+
153+
static Podに付けた{{< glossary_tooltip term_id="label" text="ラベル" >}}はミラーPodに伝搬します。ミラーPodに付けたラベルは、通常のPodと同じように{{< glossary_tooltip term_id="selector" text="セレクター" >}}などから利用できます。
154+
155+
もし`kubectl`を使用してAPIサーバーからミラーPodを削除しようとしても、kubeletはstatic Podを削除*しません*
156+
157+
```shell
158+
kubectl delete pod static-web-my-node1
159+
```
160+
```
161+
pod "static-web-my-node1" deleted
162+
```
163+
164+
Podはまだ実行中であることがわかります。
165+
166+
```shell
167+
kubectl get pods
168+
```
169+
```
170+
NAME READY STATUS RESTARTS AGE
171+
static-web-my-node1 1/1 Running 0 12s
172+
```
173+
174+
kubeletが実行中のノードに戻り、Dockerコンテナを手動で停止してみることができます。しばらくすると、kubeletが変化に気づき、Podを自動的に再起動することがわかります。
175+
176+
```shell
177+
# このコマンドは、kubeletが実行中のノード上で実行してください
178+
docker stop f6d05272b57e # 実際のコンテナIDと置き換えてください
179+
sleep 20
180+
docker ps
181+
```
182+
```
183+
CONTAINER ID IMAGE COMMAND CREATED ...
184+
5b920cbaf8b1 nginx:latest "nginx -g 'daemon of 2 seconds ago ...
185+
```
186+
187+
## static Podの動的な追加と削除
188+
189+
実行中のkubeletは設定ディレクトリ(この例では`/etc/kubelet.d`)の変更を定期的にスキャンし、このディレクトリ内にファイルが追加/削除されると、Podの追加/削除を行います。
190+
191+
```shell
192+
# This assumes you are using filesystem-hosted static Pod configuration
193+
# このコマンドは、kubeletが実行中のノード上で実行してください
194+
#
195+
mv /etc/kubelet.d/static-web.yaml /tmp
196+
sleep 20
197+
docker ps
198+
# You see that no nginx container is running
199+
mv /tmp/static-web.yaml /etc/kubelet.d/
200+
sleep 20
201+
docker ps
202+
```
203+
```
204+
CONTAINER ID IMAGE COMMAND CREATED ...
205+
e7a62e3427f1 nginx:latest "nginx -g 'daemon of 27 seconds ago
206+
```

0 commit comments

Comments
 (0)