これは、国内ユーザーに最適なK3sHAソリューションである必要があります

序文

実際には、実稼働環境では、高可用性は避けられない問題です。K3s自体は複数の反復を経ており、HAソリューションは、現在の比較的安定したHAソリューションを形成するために継続的に最適化されています。

現在、2つの公式HAソリューションがあります。

  • 組み込みDBの高可用性(実験的)

  • 外部データベースを使用して高可用性を実現

組み込みDBの高可用性は現在実験段階です。この記事ではあまり紹介しませんので、以下を参照してください。

https://rancher.com/docs/k3s/latest/en/installation/ha-embedded/

外部データベースを使用して高可用性を実現するには、高可用性の外部データベースを構築する必要があります。現在、K3sはSQLite / etcd / MySQL / PostgreSQL / DQLiteなどのデータストアをサポートしており、さまざまなデータストアがさまざまな使用シナリオに直面しています。

現在、中国で最も使用されているパブリッククラウド環境はAlibaba Cloudです。仮想マシンを使用して、AlibabaCloud上にK3sHAを構築し、Alibaba CloudのRDSに接続できるため、別のデータベースを維持する手間が省けます。この記事では、よく知られているMySQLを選択してHAの練習を行います。PostgreSQLはMySQLに似ているため、この記事では繰り返しません。

アーキテクチャ図

ここに写真の説明を挿入

上に示したように、エンドユーザーはSLBにアクセスし、SLBはトラフィックをバックエンドの2つのK3マスターHAに転送します。2つのK3マスターノードは、同じRDSによって作成された外部データベースに接続します。

アリババクラウドインスタンスを作成する

K3はHAを形成するために少なくとも2つのインスタンスを必要とするため、デモンストレーションのためにAlibabaCloud上に少なくとも2つのインスタンスを作成します。

ここに写真の説明を挿入

アリババクラウドRDSを構成する

1. RDSインスタンスを作成するには、インスタンスタイプを選択しますMySQL 5.7。このバージョンはK3で正式にサポートされています。必要に応じて、他のパラメータを設定できます。

ここに写真の説明を挿入

2.ホワイトリストを設定します。ホワイトリストの内容は、K3sインスタンスのイントラネットIPに設定できます。設定が成功すると、データベース接続用の内部ネットワークアドレスが取得されます。rm-2ze64ke7q33bkq3yt.mysql.rds.aliyuncs.com

ここに写真の説明を挿入

ここに写真の説明を挿入

3.使用するアカウントを作成普通账号(ksd)するに

4.データベースを作成し、データベース名(k3s)、許可されたアカウント(ksd)を設定します

dockerで起動したmysqlを使用する前に、k3sの起動時に自動的に作成されるため、事前にデータベースを作成する必要はありません。ただし、Alibaba Cloud RDSでは、K3に必要なデータベースを最初にUIで作成する必要があります。

ここに写真の説明を挿入

5.データベースパラメータを変更します

データパラメータinnodb_large_prefix設定する必要がありますON。そうしないと、K3の起動時にエラーが報告されます。

Jul 29 20:08:06 iZ2zed0v8rqape974mz8suZ systemd[1]: k3s.service: Service hold-off time over, scheduling restart.
Jul 29 20:08:06 iZ2zed0v8rqape974mz8suZ systemd[1]: k3s.service: Scheduled restart job, restart counter is at 11.
Jul 29 20:08:06 iZ2zed0v8rqape974mz8suZ systemd[1]: Stopped Lightweight Kubernetes.
Jul 29 20:08:06 iZ2zed0v8rqape974mz8suZ systemd[1]: Starting Lightweight Kubernetes...
Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ k3s[24934]: time="2020-07-29T20:08:07.145963348+08:00" level=info msg="Starting k3s v1.18.6+k3s1 (6f56fa1d)"
Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ k3s[24934]: time="2020-07-29T20:08:07.159363656+08:00" level=fatal msg="starting kubernetes: preparing server: creating storage endpoint: building kine: Error 1071: Specified key was too long; max key length is 767 bytes"
Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ systemd[1]: k3s.service: Main process exited, code=exited, status=1/FAILURE
Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ systemd[1]: k3s.service: Failed with result 'exit-code'.
Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ systemd[1]: Failed to start Lightweight Kubernetes.

innodb_large_prefixように修正ONし、右上隅をクリックします[終了したらパラメータを送信します。

ここに写真の説明を挿入

上記の手順が完了したら、K3sに必要な外部データベースが準備されました。K3sHAを起動しましょう。

K3sHAを実現

同じコマンドk3s-master-1k3s-master-2実行します。

curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh |  \
  INSTALL_K3S_MIRROR=cn \
  K3S_DATASTORE_ENDPOINT='mysql://ksd:your_password@tcp(rm-2ze64ke7q33bkq3yt.mysql.rds.aliyuncs.com:3306)/k3s' \
  sh -s - server

しばらくすると、K3sHA環境が開始されました。

アリババクラウド上のプルK3のミラーが遅い場合は、ミラーを構成するか、対応するバージョンのオフラインパッケージをhttp://mirror.cnrancher.comからダウンロードしてから、次のリンクを参照してミラーをインポートできます:https://rancher.com/docs / k3s / latest / en / Installation / airgap /#prepare-the-images-directory-and-k3s-binary

root@k3s-master-2:~# kubectl get pods -A -o wide
NAMESPACE     NAME                                     READY   STATUS      RESTARTS   AGE   IP          NODE           NOMINATED NODE   READINESS GATES
kube-system   local-path-provisioner-6d59f47c7-tshfx   1/1     Running     0          16m   10.42.0.5   k3s-master-1   <none>           <none>
kube-system   metrics-server-7566d596c8-mrc94          1/1     Running     0          16m   10.42.0.2   k3s-master-1   <none>           <none>
kube-system   coredns-8655855d6-sxn7v                  1/1     Running     0          16m   10.42.0.4   k3s-master-1   <none>           <none>
kube-system   helm-install-traefik-cmmsr               0/1     Completed   2          16m   10.42.0.3   k3s-master-1   <none>           <none>
kube-system   svclb-traefik-z6vlb                      2/2     Running     0          11m   10.42.0.6   k3s-master-1   <none>           <none>
kube-system   svclb-traefik-f89x6                      2/2     Running     0          11m   10.42.1.2   k3s-master-2   <none>           <none>
kube-system   traefik-758cd5fc85-chnbc                 1/1     Running     0          11m   10.42.1.3   k3s-master-2   <none>           <none>
root@k3s-master-2:~#
root@k3s-master-2:~# kubectl get node -o wide
NAME           STATUS   ROLES    AGE   VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
k3s-master-1   Ready    master   16m   v1.18.6+k3s1   172.17.207.15   <none>        Ubuntu 18.04.4 LTS   4.15.0-106-generic   containerd://1.3.3-k3s2
k3s-master-2   Ready    master   16m   v1.18.6+k3s1   172.17.207.16   <none>        Ubuntu 18.04.4 LTS   4.15.0-106-generic   containerd://1.3.3-k3s2

アリババクラウドSLBを介して統合アクセスを提供します

現在、利用性の高いMySQLとK3がありますが、複数のK3サーバーに統合アクセスエントリを提供するためのエントリがまだありません。これは、次の方法で実現できます。

  1. L4層ロードバランサー

  2. ラウンドロビンDNS

  3. VIPまたはエラスティックIP

したがって、L4層の負荷分散にAlibaba CloudのSLBを直接使用し、ポート6443をバックエンドの2つのK3マスターに転送できます。

ここに写真の説明を挿入

次に、k3sマスターノード/etc/rancher/k3s/k3s.yamlをローカル~/.kube/configディレクトリにコピーしてから、サーバーアドレスをserver: https://39.106.185.201:6443(SLBパブリックネットワークIP)に変更します。

次にkubectl get nodes、トラフィックをSLBを介してK3マスターに転送できるかどうかテストできます。

ksd@Hailong-MacBook-Pro  ~  kubectl get nodes
Unable to connect to the server: x509: certificate is valid for 10.43.0.1, 127.0.0.1, 172.17.207.15, 172.17.207.16, not 39.106.185.201

このエラーは、K3s msterの起動時に自動的に作成される証明書が39.106.185.201、このSLBのパブリックIPを信頼しないためです。この問題を解決するには、K3sマスターを更新してパラメーターを追加します--tls-san 39.106.185.201

curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh |  \
  INSTALL_K3S_MIRROR=cn \
  K3S_DATASTORE_ENDPOINT='mysql://ksd:your_password@tcp(rm-2ze64ke7q33bkq3yt.mysql.rds.aliyuncs.com:3306)/k3s' \
  sh -s - server \
  --tls-san 39.106.185.201

最後に、ローカルマシンに戻って再度実行しkubectl get nodesます。何も起こらない場合は、ノード情報を取得できるはずです。

ksd@Hailong-MacBook-Pro  ~  kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
k3s-master-2   Ready    master   65m   v1.18.6+k3s1
k3s-master-1   Ready    master   65m   v1.18.6+k3s1

追記

この記事では、AlibabaCloudのSLBとRDSを使用してK3sHAを実現する方法のみを紹介します。他のパブリッククラウドの動作は基本的に同じです。詳細なテストは行われていませんが、理論的にはサポートされているはずです。非公開のクラウド環境の場合は、必要に応じて適切なデータストアと対応するHAモードを選択できます。

おすすめ

転載: blog.csdn.net/qq_42206813/article/details/108399178