kubeadm で高可用性クラスタを作成(参考訳:v1.11)

kubeadm で高可用性クラスタを作成(参考訳:v1.11)

关于这份文件

这是关于当前版本v1.11的《使用kubeadm创建高可用集群》文档的参考翻译。由于文档经常更新,因此请查看原始网站以获取最新和准确的信息。

使用kubeadm创建高可用集群

この手順書では、高可用性 Kubernetes クラスタを kubeadm でセットアップするための2つの方法を説明します。

    • マスタ群を使う。この方法は必要なインフラが少ないです。etcd メンバとコントロール・プレーンが同じ場所です。

 

    外部にある etd クラスタを使う。この方法は多くのインフラが必要です。コントロール・プレーンのノードと etcd メンバは別々です。

クラスタでは Kubernetes バージョン 1.11 以上を動かす必要があります。また、kubeadm で HA クラスタをセットアップするのは、まだ実験的ですのでご注意ください。そのため、クラスタのアップグレード時に問題が出るかもしれません。どちらか一方の手法を試して、フィードバックをください。

请注意:本页面不涵盖在云服务提供商上运行集群的方法。没有关于使用云环境中的服务类型,如负载均衡和持久化存储(PersistentVolume)的文档。

事前準備

无论哪种方法,都需要下一代基础设施。

kubeadm 動作条件 を持つマシンで3台のマスタを構成

kubeadm 動作条件 を持つマシンで3台のワーカを構成
クラスタ内の全てのマシンに対する、完全なネットワーク接続性(パブリックまたはプライベート・ネットワークどちらでも構わない)
システム上の全てのノードに SSH 接続できる手段
全てのマシン上で sudo 特権

只有在使用外部etcd集群时,才需要以下内容:

    etcd メンバ用に3台の追加マシン

メモ: 以下の例は Pod ネットワーク・プロバイダとして Calico を使用します。もしも他のネットワーク・プロバイダを動作する場合は、必要に応じて初期値を置き換えてください。

初めにする共通の手順

メモ: このガイドにおけるコントロール・プレーンや etcd ノード上でのコマンドは、root として実行すべきです。

    ポッド CIDR を確認します。詳細については CNI ネットワーク資料 をご覧ください。Calico を使う場合、ポッド CIDR は 192.168.0.0/16 です。

SSH の設定

メイン・デバイス上(訳者注:PCやサーバなど、作業用の環境)で ssh-agent を有効にします。これでシステム内の他のノードすべてにアクセスします。

eval $(ssh-agent)

セッションに自分の SSH 秘密鍵を追加します。

ssh-add ~/.ssh/path_to_private_key

ノード間の SSH 接続が正常に行えるかを確認します。

- ノードに SSH するときは、 `-A` フラグを確認します。

  ```
  ssh -A 10.0.0.7
  ```

- ノードで sudo を実行するときは、SSH 転送(forwarding)で持続するようにします。

  ```
  sudo -E -s
  ```

创建用于kube-apiserver的负载均衡器。

メモ: ロードバランサには多くの設定方法があります。以下の例はそのうちの1つです。クラスタの要件によっては、別の設定が必要になるでしょう。

    创建一个使用DNS进行名称解析的kube-apiserver负载均衡器。
- クラウド環境では、TCP 転送ロードバランサの派小河にコントロール・プレーン・ノードを配置すべきでしょう。ロードバランサは、コントロール・プレーン・ノードの一覧から、正常なノードにトラフィックを分散します。apiserver に対するヘルスチェックとは、kube-apiserver が開く(listen)ポート(初期値: `6443`)に対する TCP 確認です。

- クラウド環境では、 IP アドレスを直接使う方法は推奨しません。

- ロードバランサは全てのコントロール・プレーン・ノード上の apiserver ポートと通信できる必要があります。また、開いている(listening)ポートに対する受信トラフィック(incoming traffic)の許可も必要です。
    1. 通过向负载均衡器添加第一个控制平面节点,并确认连接。

nc -v LOAD_BALANCER_IP PORT

- 接続拒否エラーが出た場合、予想されるのは apiserver がまだ実行していない場合です。タイムアウトとは、ロードバランサがコントロール・プレーン・ノードと通信できないのを意味します。もしもタイムアウトが発生したら、ロードバランサがコントロール・プレーン・ノードと通信できるように再設定します。
    将剩余的控制平面节点添加到负载均衡器的目标组中。

堆积的控制平面节点

准备第一个用于堆栈控制平面的节点。

    1. 创建kubeadm-config.yaml模板文件:

 

    1. apiVersion: kubeadm.k8s.io/v1alpha2

 

    1. kind: MasterConfiguration

 

    1. kubernetesVersion: v1.11.0

 

    1. apiServerCertSANs:

 

    1. – “负载均衡器DNS”

 

    1. api:

 

    1. controlPlaneEndpoint: “负载均衡器DNS:负载均衡器端口”

 

    1. etcd:

 

    1. local:

 

    1. extraArgs:

 

    1. listen-client-urls: “https://127.0.0.1:2379,https://CP0 IP地址:2379”

 

    1. advertise-client-urls: “https://CP0 IP地址:2379”

 

    1. listen-peer-urls: “https://CP0 IP地址:2380”

 

    1. initial-advertise-peer-urls: “https://CP0 IP地址:2380”

 

    1. initial-cluster: “CP0主机名=https://CP0 IP地址:2380”

 

    1. serverCertSANs:

 

    1. – CP0主机名

 

    1. – CP0 IP地址

 

    1. peerCertSANs:

 

    1. – CP0主机名

 

    1. – CP0 IP地址

 

    1. networking:

 

    1. # 此CIDR是Calico的默认值。根据您的CNI提供程序进行替换或删除。

 

    1. podSubnet: “192.168.0.0/16”

 

    将模板中的以下变量替换为适合您的集群的正确值。
* `LOAD_BALANCER_DNS`
* `LOAD_BALANCER_PORT`
* `CP0_HOSTNAME`
* `CP0_IP`
    执行以下命令,初始化kubeadm:kubeadm init –config kubeadm-config.yaml。

将必要的文件复制到其他控制平面节点。

运行kubeadm init命令后,将创建以下证书和其他必要文件。请将每个文件复制到其他控制平面节点上。

    • /etc/kubernetes/pki/ca.crt

 

    • /etc/kubernetes/pki/ca.key

 

    • /etc/kubernetes/pki/sa.key

 

    • /etc/kubernetes/pki/sa.pub

 

    • /etc/kubernetes/pki/front-proxy-ca.crt

 

    • /etc/kubernetes/pki/front-proxy-ca.key

 

    • /etc/kubernetes/pki/etcd/ca.crt

 

    /etc/kubernetes/pki/etcd/ca.key

admin kubeconfig(管理用設定ファイル)を他のコントロール・プレーン・ノードにコピーします。

    /etc/kubernetes/admin.conf

请将以下示例中的CONTROL_PLANE_IPS中的IP地址更改为每个控制平面节点的地址。

USER=ubuntu # customizable
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

メモ: この例と皆さんの設定ファイルとは異なる場合がありますので、ご注意ください。

添加第二个用于堆栈控制平面的节点。

2台めの作成にあたり、異なる kubeadm-config.yaml テンプレート・ファイルを作ります。

apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.11.0
apiServerCertSANs:
– “LOAD_BALANCER_DNS”
api:
controlPlaneEndpoint: “LOAD_BALANCER_DNS:LOAD_BALANCER_PORT”
etcd:
local:
extraArgs:
listen-client-urls: “https://127.0.0.1:2379,https://CP1_IP:2379”
advertise-client-urls: “https://CP1_IP:2379”
listen-peer-urls: “https://CP1_IP:2380”
initial-advertise-peer-urls: “https://CP1_IP:2380”
initial-cluster: “CP0_HOSTNAME=https://CP0_IP:2380,CP1_HOSTNAME=https://CP1_IP:2380”
initial-cluster-state: existing
serverCertSANs:
– CP1_HOSTNAME
– CP1_IP
peerCertSANs:
– CP1_HOSTNAME
– CP1_IP
networking:
# This CIDR is a calico default. Substitute or remove for your CNI provider.
podSubnet: “192.168.0.0/16”

テンプレートにある以下の変数を、自分のクラスタにあわせた適切な値に置き換えます。

- `LOAD_BALANCER_DNS`
- `LOAD_BALANCER_PORT`
- `CP0_HOSTNAME`
- `CP0_IP`
- `CP1_HOSTNAME`
- `CP1_IP`

コピーしたファイルを適切な場所に移動します。

USER=ubuntu # customizable
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

kubeadm phase コマンドを実行し、 kubelet を立ち上げます。

kubeadm alpha phase certs all –config kubeadm-config.yaml
kubeadm alpha phase kubelet config write-to-disk –config kubeadm-config.yaml
kubeadm alpha phase kubelet write-env-file –config kubeadm-config.yaml
kubeadm alpha phase kubeconfig kubelet –config kubeadm-config.yaml
systemctl start kubelet

ノードを etcd クラスタに追加するため、以下のコマンドを実行します。

CP0_IP=10.0.0.7
CP0_HOSTNAME=cp0
CP1_IP=10.0.0.8
CP1_HOSTNAME=cp1

KUBECONFIG=/etc/kubernetes/admin.conf kubectl exec -n kube-system etcd-${CP0_HOSTNAME} — etcdctl –ca-file /etc/kubernetes/pki/etcd/ca.crt –cert-file /etc/kubernetes/pki/etcd/peer.crt –key-file /etc/kubernetes/pki/etcd/peer.key –endpoints=https://${CP0_IP}:2379 member add ${CP1_HOSTNAME} https://${CP1_IP}:2380
kubeadm alpha phase etcd local –config kubeadm-config.yaml

  - こちらのコマンドの実行で、etcd クラスタは短時間利用できなくなります。これは、ノードが稼働中のクラスタに追加後、新しいノードが etcd クラスタに参加するまでです。

コントロール・プレーン構成要素を展開し、ノードをマスタとして記録(マーク)します。

kubeadm alpha phase kubeconfig all –config kubeadm-config.yaml
kubeadm alpha phase controlplane all –config kubeadm-config.yaml
kubeadm alpha phase mark-master –config kubeadm-config.yaml

添加第三个用于堆栈的控制平面节点

3台めの作成にあたり、異なる kubeadm-config.yaml テンプレート・ファイルを作ります。

apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.11.0
apiServerCertSANs:
– “LOAD_BALANCER_DNS”
api:
controlPlaneEndpoint: “LOAD_BALANCER_DNS:LOAD_BALANCER_PORT”
etcd:
local:
extraArgs:
listen-client-urls: “https://127.0.0.1:2379,https://CP2_IP:2379”
advertise-client-urls: “https://CP2_IP:2379”
listen-peer-urls: “https://CP2_IP:2380”
initial-advertise-peer-urls: “https://CP2_IP:2380”
initial-cluster: “CP0_HOSTNAME=https://CP0_IP:2380,CP1_HOSTNAME=https://CP1_IP:2380,CP2_HOSTNAME=https://CP2_IP:2380”
initial-cluster-state: existing
serverCertSANs:
– CP2_HOSTNAME
– CP2_IP
peerCertSANs:
– CP2_HOSTNAME
– CP2_IP
networking:
# This CIDR is a calico default. Substitute or remove for your CNI provider.
podSubnet: “192.168.0.0/16”

テンプレートにある以下の変数を、自分のクラスタにあわせた適切な値に置き換えます。

- `LOAD_BALANCER_DNS`
- `LOAD_BALANCER_PORT`
- `CP0_HOSTNAME`
- `CP0_IP`
- `CP1_HOSTNAME`
- `CP1_IP`
- `CP2_HOSTNAME`
- `CP2_IP`

コピーしたファイルを適切な場所に移動します。

USER=ubuntu # customizable
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

kubeadm phase コマンドを実行し、 kubelet を立ち上げます。

kubeadm alpha phase certs all –config kubeadm-config.yaml
kubeadm alpha phase kubelet config write-to-disk –config kubeadm-config.yaml
kubeadm alpha phase kubelet write-env-file –config kubeadm-config.yaml
kubeadm alpha phase kubeconfig kubelet –config kubeadm-config.yaml
systemctl start kubelet

ノードを etcd クラスタに追加するため、以下のコマンドを実行します。

CP0_IP=10.0.0.7
CP0_HOSTNAME=cp0
CP2_IP=10.0.0.9
CP2_HOSTNAME=cp2

KUBECONFIG=/etc/kubernetes/admin.conf kubectl exec -n kube-system etcd-${CP0_HOSTNAME} — etcdctl –ca-file /etc/kubernetes/pki/etcd/ca.crt –cert-file /etc/kubernetes/pki/etcd/peer.crt –key-file /etc/kubernetes/pki/etcd/peer.key –endpoints=https://${CP0_IP}:2379 member add ${CP2_HOSTNAME} https://${CP2_IP}:2380
kubeadm alpha phase etcd local –config kubeadm-config.yaml

コントロール・プレーン構成要素を展開し、ノードをマスタとして記録(マーク)します。

kubeadm alpha phase kubeconfig all –config kubeadm-config.yaml
kubeadm alpha phase controlplane all –config kubeadm-config.yaml
kubeadm alpha phase mark-master –config kubeadm-config.yaml

外部的etcd

クラスタのセットアップ

これらの手順に従い、 etcd クラスタをセットアップします。

必要なファイルを他のコントロール・プレーン・ノードにコピー

クラスタ作成時、以下の証明書が作成されます。それぞれ他のコントロール・プレーン・ノードにコピーします。

    • /etc/kubernetes/pki/etcd/ca.crt

 

    • /etc/kubernetes/pki/apiserver-etcd-client.crt

 

    /etc/kubernetes/pki/apiserver-etcd-client.key

以下の例にある USER と CONTROL_PLANE_HOSTS の値は環境にあわせて置き換える必要があります。

USER=ubuntu
CONTROL_PLANE_HOSTS="10.0.0.7 10.0.0.8 10.0.0.9"
for host in $CONTROL_PLANE_HOSTS; do
    scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:
    scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${USER}"@$host:
    scp /etc/kubernetes/pki/apiserver-etcd-client.key "${USER}"@$host:
done

1台めのコントロール・プレーン・ノードをセットアップ

kubeadm-config.yaml テンプレート・ファイルを作成します。

apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.11.0
apiServerCertSANs:
– “LOAD_BALANCER_DNS”
api:
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
networking:
# This CIDR is a calico default. Substitute or remove for your CNI provider.
podSubnet: “192.168.0.0/16”

テンプレートにある以下の変数を、自分のクラスタにあわせた適切な値に置き換えます。

- `LOAD_BALANCER_DNS`
- `LOAD_BALANCER_PORT`
- `ETCD_0_IP`
- `ETCD_1_IP`
- `ETCD_2_IP`
    执行以下命令来初始化 kubeadm,并使用 kubeadm-config.yaml 配置文件:

将所需的文件复制到适当的位置。

执行 `kubeadm init` 后,将会创建以下证书和其他必要的文件。将每个文件复制到其他控制平面节点。

    • /etc/kubernetes/pki/ca.crt

 

    • /etc/kubernetes/pki/ca.key

 

    • /etc/kubernetes/pki/sa.key

 

    • /etc/kubernetes/pki/sa.pub

 

    • /etc/kubernetes/pki/front-proxy-ca.crt

 

    /etc/kubernetes/pki/front-proxy-ca.key

将以下示例中的 CONTROL_PLANE_IPS 中的 IP 地址替换为每个控制平面节点的地址。

USER=ubuntu # customizable
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}"@CONTROL_PLANE_IP:
    scp /etc/kubernetes/pki/ca.key "${USER}"@CONTROL_PLANE_IP:
    scp /etc/kubernetes/pki/sa.key "${USER}"@CONTROL_PLANE_IP:
    scp /etc/kubernetes/pki/sa.pub "${USER}"@CONTROL_PLANE_IP:
    scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@CONTROL_PLANE_IP:
    scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@CONTROL_PLANE_IP:
done

备忘录:由于本例与您的设置文件可能会有所不同,请注意。

设置其他控制平面节点

    我会确认复制文件的位置。/etc/kubernetes目录是这样的。
- `/etc/kubernetes/pki/apiserver-etcd-client.crt`
- `/etc/kubernetes/pki/apiserver-etcd-client.key`
- `/etc/kubernetes/pki/ca.crt`
- `/etc/kubernetes/pki/ca.key`
- `/etc/kubernetes/pki/front-proxy-ca.crt`
- `/etc/kubernetes/pki/front-proxy-ca.key`
- `/etc/kubernetes/pki/sa.key`
- `/etc/kubernetes/pki/sa.pub`
- `/etc/kubernetes/pki/etcd/ca.crt`
    在已创建了每个控制平面节点的 kubeadm-config.yaml 的位置上运行 kubeadm init –config kubeadm-config.yaml。

启动控制平面后的常见任务

安装Pod网络

请按照下列步骤安装Pod网络,确保与主节点配置文件中指定的Pod CIDR匹配。

工人的安装

要将每个工作节点添加到集群中,需将kubeadm init命令的输出结果作为命令来执行。

广告
将在 10 秒后关闭
bannerAds