bbf3a979d4
* Update k8s.io/ja/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/ (#13153) * [ja] Translate Hello Minikube in tutorials (#13100) (#13161) * ja-trans: update supported-doc-versions.md (#13186) * [ja] Update /concepts/overview/what-is-kubernetes.md #13079 (#13187) * ja-trans: update expose-intro.html (#13215) * ja-trans: update expose-intro.html * ja-trans: fix broken links by linking to english pages * update deploy-intro.html (#13103) (#13208) * update deploy-intro.html (#13103) * Update content/ja/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html add /ja path Co-Authored-By: chidakiyo <chidakiyo@users.noreply.github.com> * [ja] Update /setup/release/building-from-source.md (#13095) (#13220) * ja-trans: update /ja/docs/setup/independent/control-plane-flags/ (#13228) * ja-trans: Update /setup/turnkey/azure.md (#13097) (#13224) * ja-trans: update /ja/docs/tutorials/kubernetes-basics/ (#13232) * ja-trans: update /ja/docs/tutorials/kubernetes-basics/ * ja-trans: translate card.title * ja-trans: update setup/minikube.md (#13091) (#13219) * [ja] Update content of setup/minikube.md, fixing the diff between551489f7b07d19. * [ja] Translate the content: content/ja/docs/setup/minikube.md (#13091) * Correct Katakana words, using long vowel words Co-Authored-By: yukinagae <yuki.nagae1130@gmail.com> * Fix typos Co-Authored-By: yukinagae <yuki.nagae1130@gmail.com> * Correct some changes, thanks for the FB Co-Authored-By: yukinagae <yuki.nagae1130@gmail.com> * ja-trans: Update k8s.io/ja/docs/setup/pick-right-solution/ (#13094) (#13328) * ja-trans: Update the content of setup/pick-right-solution.md, only fixing the diff between551489fand7b07d19. (Not yet translating the content at the moment to only make sure fixing the diff is ok. Next commit will be actually the translation stuff) * ja-trans: Translate /ja/docs/setup/pick-right-solution.md (#13094) * Update content/ja/docs/setup/pick-right-solution.md Correct small changes based on the feedback Co-Authored-By: yukinagae <yuki.nagae1130@gmail.com> * Better translation and refer the Japanese document link Co-Authored-By: yukinagae <yuki.nagae1130@gmail.com> * Correct Japanese anchors Co-Authored-By: yukinagae <yuki.nagae1130@gmail.com> * Correct translation mistakes Co-Authored-By: yukinagae <yuki.nagae1130@gmail.com> * ja: Translate /docs/home (#13366) * follow to the latest format * review * ja: fix some unnatural translation and formatting (#13367) * format * Update content/ja/docs/setup/certificates.md Co-Authored-By: inductor <kohei.ota@zozo.com> * ja-trans: Translate heading and subheading of docs/setup/version-skew-policy.md in Japanese (#13360) * copy content * remove reviewer block * Translate heading and subheading. * change translation * ja-trans: Translate heading and subheading of docs/setup/turnkey/icp.md in Japanese (#13359) * copy content * remove reviewer block * Translate heading and subheading. * ref. #13098 (#13358) * ref. #13096 (#13357) * ref. #13089 (#13353) * ref. #13087 (#13351) * ref. #13082 (#13348) * ref. #13085 (#13349) * ref. #13088 (#13352) * ref. #13090 (#13354) * ref. #13092 (#13355) * ref. #13093 (#13356) * ref. #13099 (#13361) * [ja] Translate the content: ja/docs/setup/independent/high-availability/ (#13364) * [ja] Translate the content: ja/docs/setup/independent/high-availability/ * remove redundant comma, words * Update content/ja/docs/setup/independent/high-availability.md 余分な文字を削除 Co-Authored-By: TSUDA-Kyosuke <tsuda@stmn.co.jp> * Update k8s.io/ja/docs/setup/cri/ (#13663) * fix content. * Update content/ja/docs/setup/cri.md Co-Authored-By: cstoku <cs.toku.mail@gmail.com> * Update cri.md * Update content/ja/docs/setup/cri.md Co-Authored-By: cstoku <cs.toku.mail@gmail.com> * Update content/ja/docs/setup/cri.md Co-Authored-By: cstoku <cs.toku.mail@gmail.com> * improve translation
303 lines
16 KiB
Markdown
303 lines
16 KiB
Markdown
---
|
|
title: kubeadmを使用した高可用性クラスターの作成
|
|
content_template: templates/task
|
|
weight: 60
|
|
---
|
|
|
|
{{% capture overview %}}
|
|
|
|
このページでは、kubeadmを使用して、高可用性クラスターを作成する、2つの異なるアプローチを説明します:
|
|
|
|
- 積み重なったコントロールプレーンノードを使う方法。こちらのアプローチは、必要なインフラストラクチャーが少ないです。etcdのメンバーと、コントロールプレーンノードは同じ場所に置かれます。
|
|
- 外部のetcdクラスターを使う方法。こちらのアプローチには、より多くのインフラストラクチャーが必要です。コントロールプレーンノードと、etcdのメンバーは分離されます。
|
|
|
|
先へ進む前に、どちらのアプローチがアプリケーションの要件と、環境に適合するか、慎重に検討してください。[こちらの比較](/docs/setup/independent/ha-topology/)が、それぞれの利点/欠点について概説しています。
|
|
|
|
クラスターではKubernetesのバージョン1.12以降を使用する必要があります。また、kubeadmを使用した高可用性クラスターはまだ実験的な段階であり、将来のバージョンではもっとシンプルになることに注意してください。たとえば、クラスターのアップグレードに際し問題に遭遇するかもしれません。両方のアプローチを試し、kueadmの[issue tracker](https://github.com/kubernetes/kubeadm/issues/new)で我々にフィードバックを提供してくれることを推奨します。
|
|
|
|
alpha feature gateである`HighAvailability`はv1.12で非推奨となり、v1.13で削除されたことに留意してください。
|
|
|
|
[高可用性クラスターのアップグレード](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-ha-1-13)も参照してください。
|
|
|
|
{{< caution >}}
|
|
このページはクラウド上でクラスターを構築することには対応していません。ここで説明されているどちらのアプローチも、クラウド上で、LoadBalancerタイプのServiceオブジェクトや、動的なPersistentVolumeを利用して動かすことはできません。
|
|
{{< /caution >}}
|
|
|
|
{{% /capture %}}
|
|
|
|
{{% capture prerequisites %}}
|
|
|
|
どちらの方法でも、以下のインフラストラクチャーが必要です:
|
|
|
|
- master用に、[kubeadmの最小要件](/ja/docs/setup/independent/install-kubeadm/#before-you-begin)を満たす3台のマシン
|
|
- worker用に、[kubeadmの最小要件](/ja/docs/setup/independent/install-kubeadm/#before-you-begin)を満たす3台のマシン
|
|
- クラスター内のすべてのマシン間がフルにネットワーク接続可能であること(パブリック、もしくはプライベートネットワーク)
|
|
- すべてのマシンにおいて、sudo権限
|
|
- あるデバイスから、システム内のすべてのノードに対しSSH接続できること
|
|
- `kubeadm`と`kubelet`がすべてのマシンにインストールされていること。 `kubectl`は任意です。
|
|
|
|
外部etcdクラスターには、以下も必要です:
|
|
|
|
- etcdメンバー用に、追加で3台のマシン
|
|
|
|
{{< note >}}
|
|
以下の例では、CalicoをPodネットワーキングプロバイダーとして使用します。別のネットワーキングプロバイダーを使用する場合、必要に応じてデフォルトの値を変更してください。
|
|
{{< /note >}}
|
|
|
|
{{% /capture %}}
|
|
|
|
{{% capture steps %}}
|
|
|
|
## 両手順における最初のステップ
|
|
|
|
{{< note >}}
|
|
コントロールプレーンや、etcdノードでのコマンドはすべてrootとして実行してください。
|
|
{{< /note >}}
|
|
|
|
- CalicoなどのいくつかのCNIネットワークプラグインは`192.168.0.0/16`のようなCIDRを必要としますが、Weaveなどは必要としません。[CNIネットワークドキュメント](/ja/docs/setup/independent/create-cluster-kubeadm/#pod-network)を参照してください。PodにCIDRを設定するには、`ClusterConfiguration`の`networking`オブジェクトに`podSubnet: 192.168.0.0/16`フィールドを設定してください。
|
|
|
|
### kube-apiserver用にロードバランサーを作成
|
|
|
|
{{< note >}}
|
|
ロードバランサーには多くの設定項目があります。以下の例は、一選択肢に過ぎません。あなたのクラスター要件には、異なった設定が必要かもしれません。
|
|
{{< /note >}}
|
|
|
|
1. DNSで解決される名前で、kube-apiserver用ロードバランサーを作成する。
|
|
- クラウド環境では、コントロールプレーンノードをTCPフォワーディングロードバランサーの後ろに置かなければなりません。このロードバランサーはターゲットリストに含まれる、すべての健全なコントロールプレーンノードにトラフィックを分配します。apiserverへのヘルスチェックはkube-apiserverがリッスンするポート(デフォルト値: `:6443`)に対する、TCPチェックです。
|
|
|
|
- クラウド環境では、IPアドレスを直接使うことは推奨されません。
|
|
|
|
- ロードバランサーは、apiserverポートで、全てのコントロールプレーンノードと通信できなければなりません。また、リスニングポートに対する流入トラフィックも許可されていなければなりません。
|
|
|
|
- [HAProxy](http://www.haproxy.org/)をロードバランサーとして使用することができます。
|
|
|
|
- ロードバランサーのアドレスは、常にkubeadmの`ControlPlaneEndpoint`のアドレスと一致することを確認してください。
|
|
|
|
1. ロードバランサーに、最初のコントロールプレーンノードを追加し、接続をテストする:
|
|
|
|
```sh
|
|
nc -v LOAD_BALANCER_IP PORT
|
|
```
|
|
|
|
- apiserverはまだ動いていないので、接続の拒否は想定通りです。しかし、タイムアウトしたのであれば、ロードバランサーはコントロールプレーンノードと通信できなかったことを意味します。もし、タイムアウトが起きたら、コントロールプレーンノードと通信できるように、ロードバランサーを再設定してください。
|
|
|
|
1. 残りのコントロールプレーンノードを、ロードバランサーのターゲットグループに追加します。
|
|
|
|
### SSHの設定
|
|
|
|
1台のマシンから全てのノードをコントロールしたいのであれば、SSHが必要です。
|
|
|
|
1. システム内の全ての他のノードにアクセスできるメインデバイスで、ssh-agentを有効にします
|
|
|
|
```
|
|
eval $(ssh-agent)
|
|
```
|
|
|
|
1. SSHの秘密鍵を、セッションに追加します:
|
|
|
|
```
|
|
ssh-add ~/.ssh/path_to_private_key
|
|
```
|
|
|
|
1. 正常に接続できることを確認するために、ノード間でSSHします。
|
|
|
|
- ノードにSSHする際は、必ず`-A`フラグをつけます:
|
|
|
|
```
|
|
ssh -A 10.0.0.7
|
|
```
|
|
|
|
- ノードでsudoするときは、SSHフォワーディングが動くように、環境変数を引き継ぎます:
|
|
|
|
```
|
|
sudo -E -s
|
|
```
|
|
|
|
## 積み重なったコントロールプレーンとetcdノード
|
|
|
|
### 最初のコントロールプレーンノードの手順
|
|
|
|
1. 最初のコントロールプレーンノードで、`kubeadm-config.yaml`という設定ファイルを作成します:
|
|
|
|
apiVersion: kubeadm.k8s.io/v1beta1
|
|
kind: ClusterConfiguration
|
|
kubernetesVersion: stable
|
|
apiServer:
|
|
certSANs:
|
|
- "LOAD_BALANCER_DNS"
|
|
controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"
|
|
|
|
- `kubernetesVersion`には使用するKubernetesのバージョンを設定します。この例では`stable`を使用しています。
|
|
- `controlPlaneEndpoint` はロードバランサーのアドレスかDNSと、ポートに一致する必要があります。
|
|
- kubeadm、kubelet、kubectlとKubernetesのバージョンを一致させることが推奨されます。
|
|
|
|
1. ノードがきれいな状態であることを確認します:
|
|
|
|
```sh
|
|
sudo kubeadm init --config=kubeadm-config.yaml
|
|
```
|
|
|
|
このような出力がされます:
|
|
|
|
```sh
|
|
...
|
|
You can now join any number of machines by running the following on each node
|
|
as root:
|
|
|
|
kubeadm join 192.168.0.200:6443 --token j04n3m.octy8zely83cy2ts --discovery-token-ca-cert-hash sha256:84938d2a22203a8e56a787ec0c6ddad7bc7dbd52ebabc62fd5f4dbea72b14d1f
|
|
```
|
|
|
|
1. この出力をテキストファイルにコピーします。あとで、他のコントロールプレーンノードをクラスターに参加させる際に必要になります。
|
|
|
|
1. Weave CNIプラグインをapplyします:
|
|
|
|
```sh
|
|
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
|
|
```
|
|
|
|
1. 以下のコマンドを入力し、コンポーネントのPodが起動するのを確認します:
|
|
|
|
```sh
|
|
kubectl get pod -n kube-system -w
|
|
```
|
|
|
|
- 最初のコントロールプレーンノードが初期化を完了してから、新しいノードを参加させることが推奨されます。
|
|
|
|
1. 証明書ファイルを最初のコントロールプレーンノードから残りのノードにコピーします:
|
|
|
|
以下の例では、`CONTROL_PLANE_IPS`を他のコントロールプレーンノードのIPアドレスで置き換えます。
|
|
```sh
|
|
USER=ubuntu # 変更可能
|
|
CONTROL_PLANE_IPS="10.0.0.7 10.0.0.8"
|
|
for host in ${CONTROL_PLANE_IPS}; do
|
|
scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:
|
|
scp /etc/kubernetes/pki/ca.key "${USER}"@$host:
|
|
scp /etc/kubernetes/pki/sa.key "${USER}"@$host:
|
|
scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:
|
|
scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:
|
|
scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:
|
|
scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt
|
|
scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
|
|
scp /etc/kubernetes/admin.conf "${USER}"@$host:
|
|
done
|
|
```
|
|
|
|
{{< caution >}}
|
|
上のリストにある証明書だけをコピーしてください。kubeadmが、参加するコントロールプレーンノード用に、残りの証明書と必要なSANの生成を行います。間違って全ての証明書をコピーしてしまったら、必要なSANがないため、追加ノードの作成は失敗するかもしれません。
|
|
{{< /caution >}}
|
|
|
|
### 残りのコントロールプレーンノードの手順
|
|
|
|
1. `scp`を使用する手順で作成したファイルを移動します:
|
|
|
|
```sh
|
|
USER=ubuntu # 変更可能
|
|
mkdir -p /etc/kubernetes/pki/etcd
|
|
mv /home/${USER}/ca.crt /etc/kubernetes/pki/
|
|
mv /home/${USER}/ca.key /etc/kubernetes/pki/
|
|
mv /home/${USER}/sa.pub /etc/kubernetes/pki/
|
|
mv /home/${USER}/sa.key /etc/kubernetes/pki/
|
|
mv /home/${USER}/front-proxy-ca.crt /etc/kubernetes/pki/
|
|
mv /home/${USER}/front-proxy-ca.key /etc/kubernetes/pki/
|
|
mv /home/${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt
|
|
mv /home/${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key
|
|
mv /home/${USER}/admin.conf /etc/kubernetes/admin.conf
|
|
```
|
|
|
|
この手順で、`/etc/kubernetes`フォルダーに必要な全てのファイルが書き込まれます。
|
|
|
|
1. `kubeadm init`を最初のノードで実行した際に取得したjoinコマンドを使って、このノードで`kubeadm join`を開始します。このようなコマンドになるはずです:
|
|
|
|
```sh
|
|
sudo kubeadm join 192.168.0.200:6443 --token j04n3m.octy8zely83cy2ts --discovery-token-ca-cert-hash sha256:84938d2a22203a8e56a787ec0c6ddad7bc7dbd52ebabc62fd5f4dbea72b14d1f --experimental-control-plane
|
|
```
|
|
- `--experimental-control-plane`フラグが追加されています。このフラグは、コントロールプレーンノードのクラスターへの参加を自動化します。
|
|
|
|
1. 以下のコマンドをタイプし、コンポーネントのPodが起動するのを確認します:
|
|
|
|
```sh
|
|
kubectl get pod -n kube-system -w
|
|
```
|
|
|
|
1. これらのステップを、残りのコントロールプレーンノードに対して繰り返します。
|
|
|
|
## 外部のetcdノード
|
|
|
|
### etcdクラスターの構築
|
|
|
|
- [こちらの手順](/ja/docs/setup/independent/setup-ha-etcd-with-kubeadm/)にしたがって、etcdクラスターを構築してください。
|
|
|
|
### 最初のコントロールプレーンノードの構築
|
|
|
|
1. 以下のファイルをetcdクラスターのどれかのノードからこのノードへコピーしてください:
|
|
|
|
```sh
|
|
export CONTROL_PLANE="ubuntu@10.0.0.7"
|
|
+scp /etc/kubernetes/pki/etcd/ca.crt "${CONTROL_PLANE}":
|
|
+scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${CONTROL_PLANE}":
|
|
+scp /etc/kubernetes/pki/apiserver-etcd-client.key "${CONTROL_PLANE}":
|
|
```
|
|
|
|
- `CONTROL_PLANE`の値を、このマシンの`user@host`で置き換えます。
|
|
|
|
1. 以下の内容で、`kubeadm-config.yaml`という名前の設定ファイルを作成します:
|
|
|
|
apiVersion: kubeadm.k8s.io/v1beta1
|
|
kind: ClusterConfiguration
|
|
kubernetesVersion: stable
|
|
apiServer:
|
|
certSANs:
|
|
- "LOAD_BALANCER_DNS"
|
|
controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"
|
|
etcd:
|
|
external:
|
|
endpoints:
|
|
- https://ETCD_0_IP:2379
|
|
- https://ETCD_1_IP:2379
|
|
- https://ETCD_2_IP:2379
|
|
caFile: /etc/kubernetes/pki/etcd/ca.crt
|
|
certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
|
|
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
|
|
|
|
- ここで、積み重なったetcdと外部etcdの違いは、kubeadmコンフィグの`etcd`に`external`フィールドを使用していることです。積み重なったetcdトポロジーの場合、これは自動で管理されます。
|
|
|
|
- テンプレート内の以下の変数を、クラスターに合わせて適切な値に置き換えます:
|
|
|
|
- `LOAD_BALANCER_DNS`
|
|
- `LOAD_BALANCER_PORT`
|
|
- `ETCD_0_IP`
|
|
- `ETCD_1_IP`
|
|
- `ETCD_2_IP`
|
|
|
|
1. `kubeadm init --config kubeadm-config.yaml`をこのノードで実行します。
|
|
|
|
1. 表示されたjoinコマンドを、あとで使うためにテキストファイルに書き込みます。
|
|
|
|
1. Weave CNIプラグインをapplyします:
|
|
|
|
```sh
|
|
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
|
|
```
|
|
|
|
### 残りのコントロールプレーンノードの手順
|
|
|
|
残りのコントロールプレーンノードを参加させるために、[こちらの手順](#残りのコントロールプレーンノードの手順)に従います。ローカルetcdメンバーが作られないことを除いて、積み重なったetcdの構築と同じ手順です。
|
|
|
|
まとめると:
|
|
|
|
- 最初のコントロールプレーンノードが完全に初期化されているのを確認します。
|
|
- 証明書を、最初のコントロールプレーンノードから他のコントロールプレーンノードへコピーします。
|
|
- テキストファイルに保存したjoinコマンドに`--experimental-control-plane` フラグを加えたものを使って、それぞれのコントロールプレーンノードを参加させます。
|
|
|
|
## コントロールプレーン起動後の共通タスク
|
|
|
|
### Podネットワークのインストール
|
|
|
|
Podネットワークをインストールするには、[こちらの手順に従ってください](/ja/docs/setup/independent/create-cluster-kubeadm/#pod-network)。master設定ファイルで提供したPod CIDRのどれかに一致することを確認します。
|
|
|
|
### workerのインストール
|
|
|
|
`kubeadm init`コマンドから返されたコマンドを利用して、workerノードをクラスターに参加させることが可能です。workerノードには、`--experimental-control-plane`フラグを追加する必要はありません。
|
|
|
|
{{% /capture %}}
|