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)の許可も必要です。
-
- 通过向负载均衡器添加第一个控制平面节点,并确认连接。
nc -v LOAD_BALANCER_IP PORT
- 接続拒否エラーが出た場合、予想されるのは apiserver がまだ実行していない場合です。タイムアウトとは、ロードバランサがコントロール・プレーン・ノードと通信できないのを意味します。もしもタイムアウトが発生したら、ロードバランサがコントロール・プレーン・ノードと通信できるように再設定します。
- 将剩余的控制平面节点添加到负载均衡器的目标组中。
堆积的控制平面节点
准备第一个用于堆栈控制平面的节点。
-
- 创建kubeadm-config.yaml模板文件:
-
- apiVersion: kubeadm.k8s.io/v1alpha2
-
- kind: MasterConfiguration
-
- kubernetesVersion: v1.11.0
-
- apiServerCertSANs:
-
- – “负载均衡器DNS”
-
- api:
-
- controlPlaneEndpoint: “负载均衡器DNS:负载均衡器端口”
-
- etcd:
-
- local:
-
- extraArgs:
-
- listen-client-urls: “https://127.0.0.1:2379,https://CP0 IP地址:2379”
-
- advertise-client-urls: “https://CP0 IP地址:2379”
-
- listen-peer-urls: “https://CP0 IP地址:2380”
-
- initial-advertise-peer-urls: “https://CP0 IP地址:2380”
-
- initial-cluster: “CP0主机名=https://CP0 IP地址:2380”
-
- serverCertSANs:
-
- – CP0主机名
-
- – CP0 IP地址
-
- peerCertSANs:
-
- – CP0主机名
-
- – CP0 IP地址
-
- networking:
-
- # 此CIDR是Calico的默认值。根据您的CNI提供程序进行替换或删除。
-
- 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命令的输出结果作为命令来执行。