Files
website/content/ja/docs/setup/independent/high-availability.md
Takuya Tokuda bbf3a979d4 Second Japanese l10n work for release-1.13 (#14465)
* 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 between 551489f 7b07d19.

* [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 between 551489f and 7b07d19.
(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
2019-05-22 07:14:12 -07:00

16 KiB

title, content_template, weight
title content_template weight
kubeadmを使用した高可用性クラスターの作成 templates/task 60

{{% capture overview %}}

このページでは、kubeadmを使用して、高可用性クラスターを作成する、2つの異なるアプローチを説明します:

  • 積み重なったコントロールプレーンノードを使う方法。こちらのアプローチは、必要なインフラストラクチャーが少ないです。etcdのメンバーと、コントロールプレーンノードは同じ場所に置かれます。
  • 外部のetcdクラスターを使う方法。こちらのアプローチには、より多くのインフラストラクチャーが必要です。コントロールプレーンノードと、etcdのメンバーは分離されます。

先へ進む前に、どちらのアプローチがアプリケーションの要件と、環境に適合するか、慎重に検討してください。こちらの比較が、それぞれの利点/欠点について概説しています。

クラスターではKubernetesのバージョン1.12以降を使用する必要があります。また、kubeadmを使用した高可用性クラスターはまだ実験的な段階であり、将来のバージョンではもっとシンプルになることに注意してください。たとえば、クラスターのアップグレードに際し問題に遭遇するかもしれません。両方のアプローチを試し、kueadmのissue trackerで我々にフィードバックを提供してくれることを推奨します。

alpha feature gateであるHighAvailabilityはv1.12で非推奨となり、v1.13で削除されたことに留意してください。

高可用性クラスターのアップグレードも参照してください。

{{< caution >}} このページはクラウド上でクラスターを構築することには対応していません。ここで説明されているどちらのアプローチも、クラウド上で、LoadBalancerタイプのServiceオブジェクトや、動的なPersistentVolumeを利用して動かすことはできません。 {{< /caution >}}

{{% /capture %}}

{{% capture prerequisites %}}

どちらの方法でも、以下のインフラストラクチャーが必要です:

  • master用に、kubeadmの最小要件を満たす3台のマシン
  • worker用に、kubeadmの最小要件を満たす3台のマシン
  • クラスター内のすべてのマシン間がフルにネットワーク接続可能であること(パブリック、もしくはプライベートネットワーク)
  • すべてのマシンにおいて、sudo権限
  • あるデバイスから、システム内のすべてのノードに対しSSH接続できること
  • kubeadmkubeletがすべてのマシンにインストールされていること。 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ネットワークドキュメントを参照してください。PodにCIDRを設定するには、ClusterConfigurationnetworkingオブジェクトにpodSubnet: 192.168.0.0/16フィールドを設定してください。

kube-apiserver用にロードバランサーを作成

{{< note >}} ロードバランサーには多くの設定項目があります。以下の例は、一選択肢に過ぎません。あなたのクラスター要件には、異なった設定が必要かもしれません。 {{< /note >}}

  1. DNSで解決される名前で、kube-apiserver用ロードバランサーを作成する。

    • クラウド環境では、コントロールプレーンノードをTCPフォワーディングロードバランサーの後ろに置かなければなりません。このロードバランサーはターゲットリストに含まれる、すべての健全なコントロールプレーンノードにトラフィックを分配します。apiserverへのヘルスチェックはkube-apiserverがリッスンするポート(デフォルト値: :6443)に対する、TCPチェックです。

    • クラウド環境では、IPアドレスを直接使うことは推奨されません。

    • ロードバランサーは、apiserverポートで、全てのコントロールプレーンノードと通信できなければなりません。また、リスニングポートに対する流入トラフィックも許可されていなければなりません。

    • HAProxyをロードバランサーとして使用することができます。

    • ロードバランサーのアドレスは、常にkubeadmのControlPlaneEndpointのアドレスと一致することを確認してください。

  2. ロードバランサーに、最初のコントロールプレーンノードを追加し、接続をテストする:

    nc -v LOAD_BALANCER_IP PORT
    
    • apiserverはまだ動いていないので、接続の拒否は想定通りです。しかし、タイムアウトしたのであれば、ロードバランサーはコントロールプレーンノードと通信できなかったことを意味します。もし、タイムアウトが起きたら、コントロールプレーンノードと通信できるように、ロードバランサーを再設定してください。
  3. 残りのコントロールプレーンノードを、ロードバランサーのターゲットグループに追加します。

SSHの設定

1台のマシンから全てのノードをコントロールしたいのであれば、SSHが必要です。

  1. システム内の全ての他のノードにアクセスできるメインデバイスで、ssh-agentを有効にします

    eval $(ssh-agent)
    
  2. SSHの秘密鍵を、セッションに追加します:

    ssh-add ~/.ssh/path_to_private_key
    
  3. 正常に接続できることを確認するために、ノード間で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のバージョンを一致させることが推奨されます。
  2. ノードがきれいな状態であることを確認します:

    sudo kubeadm init --config=kubeadm-config.yaml
    

    このような出力がされます:

    ...
    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
    
  3. この出力をテキストファイルにコピーします。あとで、他のコントロールプレーンノードをクラスターに参加させる際に必要になります。

  4. Weave CNIプラグインをapplyします:

    kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    
  5. 以下のコマンドを入力し、コンポーネントのPodが起動するのを確認します:

    kubectl get pod -n kube-system -w
    
    • 最初のコントロールプレーンノードが初期化を完了してから、新しいノードを参加させることが推奨されます。
  6. 証明書ファイルを最初のコントロールプレーンノードから残りのノードにコピーします:

    以下の例では、CONTROL_PLANE_IPSを他のコントロールプレーンノードのIPアドレスで置き換えます。

    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を使用する手順で作成したファイルを移動します:

    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フォルダーに必要な全てのファイルが書き込まれます。

  2. kubeadm initを最初のノードで実行した際に取得したjoinコマンドを使って、このノードでkubeadm joinを開始します。このようなコマンドになるはずです:

    sudo kubeadm join 192.168.0.200:6443 --token j04n3m.octy8zely83cy2ts --discovery-token-ca-cert-hash sha256:84938d2a22203a8e56a787ec0c6ddad7bc7dbd52ebabc62fd5f4dbea72b14d1f --experimental-control-plane
    
    • --experimental-control-planeフラグが追加されています。このフラグは、コントロールプレーンノードのクラスターへの参加を自動化します。
  3. 以下のコマンドをタイプし、コンポーネントのPodが起動するのを確認します:

    kubectl get pod -n kube-system -w
    
  4. これらのステップを、残りのコントロールプレーンノードに対して繰り返します。

外部のetcdノード

etcdクラスターの構築

  • こちらの手順にしたがって、etcdクラスターを構築してください。

最初のコントロールプレーンノードの構築

  1. 以下のファイルをetcdクラスターのどれかのノードからこのノードへコピーしてください:

    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で置き換えます。
  2. 以下の内容で、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コンフィグのetcdexternalフィールドを使用していることです。積み重なったetcdトポロジーの場合、これは自動で管理されます。

    • テンプレート内の以下の変数を、クラスターに合わせて適切な値に置き換えます:

      • LOAD_BALANCER_DNS
      • LOAD_BALANCER_PORT
      • ETCD_0_IP
      • ETCD_1_IP
      • ETCD_2_IP
  3. kubeadm init --config kubeadm-config.yamlをこのノードで実行します。

  4. 表示されたjoinコマンドを、あとで使うためにテキストファイルに書き込みます。

  5. Weave CNIプラグインをapplyします:

    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ネットワークをインストールするには、こちらの手順に従ってください。master設定ファイルで提供したPod CIDRのどれかに一致することを確認します。

workerのインストール

kubeadm initコマンドから返されたコマンドを利用して、workerノードをクラスターに参加させることが可能です。workerノードには、--experimental-control-planeフラグを追加する必要はありません。

{{% /capture %}}