---
title: Linuxワーカーノードの追加
content_type: task
weight: 10
---

<!-- overview -->

このページでは、kubeadmクラスターにLinuxワーカーノードを追加する方法を示します。

## {{% heading "prerequisites" %}}

* ワーカーノードとして追加する各マシンに、[kubeadmのインストール](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)で要求されている、kubeadm、kubelet、{{< glossary_tooltip term_id="container-runtime" text="コンテナランタイム" >}}等のコンポーネントがインストールされていること。
* `kubeadm init`で構築され、[kubeadmを使用したクラスターの作成](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)ドキュメントの手順に従った稼働中のkubeadmクラスターが存在すること。
* ノードにスーパーユーザー権限でアクセスできること。

<!-- steps -->

## Linuxワーカーノードの追加

新たなLinuxワーカーノードをクラスターに追加するために、以下を各マシンに対して実行してください。

1. SSH等の手段でマシンへ接続します。
1. `kubeadm init`実行時に出力されたコマンドを実行します。例:

  ```bash
  sudo kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>
  ```

### kubeadm joinに関する追加情報

{{< note >}}
`<control-plane-host>:<control-plane-port>`にIPv6タプルを指定するには、IPv6アドレスを角括弧で囲みます。
例: `[2001:db8::101]:2073`
{{< /note >}}

トークンが不明な場合は、コントロールプレーンノードで次のコマンドを実行すると取得できます。

```bash
# コントロールプレーンノード上で実行してください。
sudo kubeadm token list
```

出力は次のようになります。

```console
TOKEN                    TTL  EXPIRES              USAGES           DESCRIPTION            EXTRA GROUPS
8ewj1p.9r9hcjoqgajrj4gi  23h  2018-06-12T02:51:28Z authentication,  The default bootstrap  system:
                                                   signing          token generated by     bootstrappers:
                                                                    'kubeadm init'.        kubeadm:
                                                                                           default-node-token
```

デフォルトでは、トークンは24時間後に有効期限が切れます。
現在のトークンの有効期限が切れた後にクラスターにノードを参加させたい場合は、コントロールプレーンノード上で次のコマンドを実行することで、新しいトークンを生成できます。

```bash
# コントロールプレーンノード上で実行してください。
sudo kubeadm token create
```

このコマンドの出力は次のようになります。

```console
5didvk.d09sbcov8ph2amjw
```

新たなトークンを生成しながらkubeadm joinコマンドを出力するには、次のコマンドを使用します。

```bash
sudo kubeadm token create --print-join-command
```

`--discovery-token-ca-cert-hash`の値が不明な場合は、コントロールプレーンノード上で次のコマンドを実行することで取得できます。

```bash
# コントロールプレーンノード上で実行してください。
sudo cat /etc/kubernetes/pki/ca.crt | openssl x509 -pubkey  | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'
```

出力は次のようになります。

```console
8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78
```

`kubeadm join`コマンドによって以下のように出力されるはずです。

```
[preflight] Running pre-flight checks

... (log output of join workflow) ...

Node join complete:
* Certificate signing request sent to control-plane and response
  received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on control-plane to see this machine join.
```

数秒後、`kubectl get nodes`を実行すると、出力内にこのノードが表示されるはずです(`kubectl`コマンドは、コントロールプレーンノード等で実行してください)。

{{< note >}}
クラスターのノードは、通常は順番に初期化されるため、CoreDNSのPodは全て最初のコントロールプレーンノードで実行されている可能性があります。
高可用性を実現するため、新たなノードを追加した後には`kubectl -n kube-system rollout restart deployment coredns`コマンドを実行してCoreDNSのPodを再配置してください。
{{< /note >}}

## {{% heading "whatsnext" %}}

* [Windowsワーカーノードを追加](/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/)する方法を参照してください。
