Skip to content

Commit aaa944b

Browse files
authored
Merge pull request #51218 from kenta-iijima/update-deploy-intro
[ja] update deploy-intro according to upstream changes
2 parents ba6af6b + 892f109 commit aaa944b

File tree

2 files changed

+152
-88
lines changed

2 files changed

+152
-88
lines changed

content/ja/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html

Lines changed: 0 additions & 88 deletions
This file was deleted.
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
---
2+
title: Deploymentを作成するためにkubectlを使う
3+
weight: 10
4+
---
5+
6+
## {{% heading "objectives" %}}
7+
8+
* アプリケーションのデプロイについて学ぶ。
9+
* kubectlを使って、Kubernetes上にはじめてのアプリケーションをデプロイする。
10+
11+
## KubernetesのDeployment
12+
13+
{{% alert %}}
14+
_Deploymentは、アプリケーションのインスタンスを作成および更新する責務があります。_
15+
{{% /alert %}}
16+
17+
{{< note >}}
18+
このチュートリアルでは、AMD64アーキテクチャを必要とするコンテナを使用します。
19+
異なるCPUアーキテクチャのコンピューターでminikubeを使用する場合は、AMD64をエミュレートできるドライバーでminikubeを使用してみてください。
20+
例えば、Docker Desktopドライバーはこれが可能です。
21+
{{< /note >}}
22+
23+
[実行中のKubernetesクラスター](/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/)を入手すると、その上にコンテナ化アプリケーションをデプロイすることができます。
24+
そのためには、Kubernetesの**Deployment**の設定を作成します。
25+
DeploymentはKubernetesにあなたのアプリケーションのインスタンスを作成し、更新する方法を指示します。
26+
Deploymentを作成すると、KubernetesコントロールプレーンはDeployment内に含まれるアプリケーションインスタンスをクラスター内の個々のノードで実行するようにスケジュールします。
27+
28+
アプリケーションインスタンスが作成されると、Kubernetes Deploymentコントローラーは、それらのインスタンスを継続的に監視します。
29+
インスタンスをホストしているノードが停止、削除された場合、Deploymentコントローラーはそのインスタンスをクラスター内の別のノード上のインスタンスと置き換えます。
30+
**これは、マシンの故障やメンテナンスに対処するためのセルフヒーリングの仕組みを提供しています。**
31+
32+
オーケストレーションが登場する前の世界では、インストールスクリプトを使用してアプリケーションを起動することはよくありましたが、マシン障害が発生した場合に復旧する事はできませんでした。
33+
アプリケーションのインスタンスを作成し、それらをノード間で実行し続けることで、Kubernetes Deploymentはアプリケーションの管理に根本的に異なるアプローチを提供します。
34+
35+
## Kubernetes上にはじめてのアプリケーションをデプロイする
36+
37+
{{% alert %}}
38+
_Kubernetesにデプロイするには、アプリケーションをサポートされているコンテナ形式のいずれかにパッケージ化する必要があります。_
39+
{{% /alert %}}
40+
41+
{{< figure src="/docs/tutorials/kubernetes-basics/public/images/module_02_first_app.svg" class="diagram-medium" >}}
42+
43+
Kubernetesのコマンドラインインターフェースである[kubectl](/docs/reference/kubectl/)を使用して、Deploymentを作成、管理できます。
44+
`kubectl`はKubernetes APIを使用してクラスターと対話します。
45+
このモジュールでは、Kubernetesクラスターでアプリケーションを実行するDeploymentを作成するために必要な、最も一般的な`kubectl`コマンドについて学びます。
46+
47+
Deploymentを作成するときは、アプリケーションのコンテナイメージと実行するレプリカの数を指定する必要があります。
48+
Deploymentを更新することで、あとでその情報を変更できます。
49+
ブートキャンプの[Module 5](/docs/tutorials/kubernetes-basics/scale/scale-intro/)[Module 6](/docs/tutorials/kubernetes-basics/update/update-intro/)では、Deploymentをどのようにスケール、更新できるかについて説明します。
50+
51+
最初のDeploymentには、NGINXを使用して全てのリクエストをエコーバックする、Dockerコンテナにパッケージ化されたhello-nodeアプリケーションを使用します。
52+
(まだhello-nodeアプリケーションを作成して、コンテナを使用してデプロイしていない場合、[Hello Minikube tutorial](/ja/docs/tutorials/hello-minikube/)の通りにやってみましょう。)
53+
54+
kubectlもインストールされている必要があります。
55+
インストールが必要な場合は、[ツールのインストール](/docs/tasks/tools/#kubectl)からインストールしてください。
56+
57+
Deploymentが何であるかがわかったので、最初のアプリケーションをデプロイしましょう!
58+
59+
### kubectlの基本
60+
61+
kubectlコマンドの一般的な書式は`kubectl action resource`です。
62+
63+
これは指定された _resource_(`node``deployment`など)に対して指定された _action_(`create``describe``delete`など)を実行します。
64+
指定可能なパラメーターに関する追加情報を取得するために、サブコマンドの後に`--help`を使うこともできます(例:`kubectl get nodes --help`)。
65+
66+
`kubectl version`コマンドを実行して、kubectlがクラスターと通信できるように設定されていることを確認してください。
67+
68+
kubectlがインストールされていて、クライアントとサーバーの両方のバージョンを確認できることを確認してください。
69+
70+
クラスター内のノードを表示するには、`kubectl get nodes`コマンドを実行します。
71+
72+
利用可能なノードが表示されます。
73+
後で、KubernetesはNodeの利用可能なリソースに基づいてアプリケーションをデプロイする場所を選択します。
74+
75+
### アプリケーションをデプロイする
76+
77+
最初のアプリケーションを`kubectl create deployment`コマンドでKubernetesにデプロイしてみましょう。
78+
デプロイ名とアプリケーションイメージの場所を指定する必要があります(Docker Hub外でホストされているイメージはリポジトリの完全なURLを含める必要があります)。
79+
80+
```shell
81+
kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
82+
```
83+
84+
素晴らしい!Deploymentを作成して、最初のアプリケーションをデプロイしました。
85+
これによっていくつかのことが実行されました。
86+
87+
* アプリケーションのインスタンスを実行可能な適切なノードを探しました(利用可能なノードは1つしかない)。
88+
* アプリケーションをそのノードで実行するためのスケジュールを行いました。
89+
* 必要な場合にインスタンスを新しいノードで再スケジュールするような設定を行いました。
90+
91+
Deploymentの一覧を得るには`kubectl get deployments`コマンドを使います。
92+
93+
```shell
94+
kubectl get deployments
95+
```
96+
97+
アプリケーションの単一のインスタンスを実行しているDeploymentが1つあることが分かります。
98+
インスタンスはノード上のコンテナ内で実行されています。
99+
100+
### アプリケーションを見る
101+
102+
Kubernetes内部で動作している[Pod](/docs/concepts/workloads/pods/)は、プライベートに隔離されたネットワーク上で動作しています。
103+
デフォルトでは、同じKubernetesクラスター内の他のPodやServiceからは見えますが、そのネットワークの外からは見えません。
104+
`kubectl`を使用する場合、アプリケーションと通信するためにAPIエンドポイントを通じてやりとりしています。
105+
106+
アプリケーションをKubernetesクラスターの外部に公開するための他のオプションについては、後ほど[Module 4](/docs/tutorials/kubernetes-basics/expose/)で説明します。
107+
また、これは基本的なチュートリアルであるため、ここでは`Pod`とは何かについては詳しく説明しません。
108+
109+
`kubectl proxy`コマンドによって、通信をクラスター全体のプライベートネットワークに転送するプロキシを作成することができます。
110+
プロキシはcontrol-Cキーを押すことで終了させることができ、実行中は何も出力されません。
111+
112+
**プロキシを実行するにはもう一つターミナルウィンドウを開く必要があります。**
113+
114+
```shell
115+
kubectl proxy
116+
```
117+
118+
ホスト(端末)とKubernetesクラスター間の接続ができました。
119+
プロキシによって端末からAPIへの直接アクセスが可能となります。
120+
121+
プロキシエンドポイントを通してホストされている全てのAPIを確認することができます。
122+
例えば、`curl`コマンドを使って、APIを通じて直接バージョンを調べることができます。
123+
124+
```shell
125+
curl http://localhost:8001/version
126+
```
127+
128+
{{< note >}}
129+
ポート8001にアクセスできない場合は、上で起動した`kube proxy`がもう一つのターミナルで実行されていることを確認してください。
130+
{{< /note >}}
131+
132+
APIサーバーはPod名に基づいて各Pod用のエンドポイントを自動的に作成し、プロキシからもアクセスできるようにします。
133+
134+
まずPod名を取得する必要があるので、環境変数`POD_NAME`に格納しておきます。
135+
136+
```shell
137+
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
138+
echo Name of the Pod: $POD_NAME
139+
```
140+
141+
以下を実行することで、プロキシされたAPIを通してPodにアクセスすることができます。
142+
143+
```shell
144+
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/
145+
```
146+
147+
プロキシを使わずに新しいDeploymentにアクセスするには、[Module 4](/docs/tutorials/kubernetes-basics/expose/)で説明するServiceが必要です。
148+
149+
## {{% heading "whatsnext" %}}
150+
151+
* チュートリアル [Podとノードについて](/docs/tutorials/kubernetes-basics/explore/explore-intro/)
152+
* [Deployment](/docs/concepts/workloads/controllers/deployment/)について詳しく学ぶ

0 commit comments

Comments
 (0)