前回の記事では、60秒で4ノードのK3sクラスターを作成する方法を紹介しました。この記事には、仮想マシンの構成も含まれています。このクラスターの唯一の問題は、クラウドプロバイダーがサポートされていないことです。つまり、LoadBalancer、ストレージ、およびその他のサービスを使用できません。したがって、この記事では、K3をクラウドプロバイダーと統合する方法について説明します。
CCM(Cloud Management Controller)をK3sと統合するということは、基本的に、K3sクラスターがクラウドプロバイダーのAPIと通信して、LoadBalancer(入力用)やノード用などのサービスを要求および構成できることを意味します。適切なラベルなどを貼ってください。このプロセスは、クラウドプロバイダーごとに異なり、主にクラウドプロバイダーが最初にCCMを提供するかどうかによって異なります。この記事では、DigitalOceanにK3をインストールします。
全体のプロセスは複雑ではありませんが、以下の手順に注意深く従う必要があります。まず、マスターノードから始めます。K3sマスターノードをインストールするときは、次のパラメーターを渡す必要があります。
— disable-cloud-controller
— no-deploy servicelb
— kubelet-arg=”cloud-provider=external”
— kubelet-arg=”provider-id=digitalocean://[master_node_id]”
それで、それらはどういう意味ですか?まず、名前が示すように、デフォルトのK3sクラウドプロバイダーを無効にします。無効にしないと、K3sは独自の組み込みクラウドコントローラーを使用します。次に、IPアドレスを台無しにするため、K3にservicelbをデプロイしないように依頼します。servicelbは入力IPをノードIPで上書きし、DigitalOcean LoadBalancerIPをLoadBalancerサービスタイプとして使用します。第三に、これはほとんどすべてのCCM要件であり、外部のクラウドプロバイダーを使用するようにkubeletに指示するだけで済みます。最後のパラメーター、これはDOCCMの要件です-DOCCM Githubリポジトリ(https://github.com/digitalocean/digitalocean-cloud-controller-manager)を確認すると、このパラメーターを渡すだけでよいことがわかります。 kubeletへ。[master_node_id]は、DOダッシュボードで見つけるか、ドロップレット自体からGET呼び出しを行うことで見つけることができます。
curl http://169.254.169.254/metadata/v1/id
したがって、CCM用に準備されたK3sサーバーをインストールするには、次のコマンドを実行する必要があります。
curl -sfL https://get.k3s.io | sh -s — server \
--disable-cloud-controller \
--no-deploy servicelb \
--kubelet-arg=”cloud-provider=external” \
--kubelet-arg=”provider-id=digitalocean://$master_id”
上記は最初の部分、準備です。K3sサーバーを起動したら、CCMをインストールする必要があります。この手順を完了するには、最初にgitリポジトリのクローンを作成する必要があります。
https://github.com/digitalocean/digitalocean-cloud-controller-manager
次に、DigitalOceanAPIトークンを含むKubernetesシークレットを作成する必要があります。リポジトリでシークレットジェネレータを使用するか、次のコマンドを使用できます。
kubectl -n kube-system create secret generic digitalocean --from-literal=access-token=[YOUR_DO_API_TOKEN]
シークレットが保存されている場合は、ウェアハウスからyamlマニフェストを適用するだけです。
kubectl apply -f releases/v0.1.21.yml
これで、LoadBalancerサービスが有効になるたびに、DigitalOcean LoadBalancerが作成され、トラフィックをその負荷にルーティングするように構成されます。さらに、k3sにはデフォルトでTraefikが組み込まれているため、DOLBが自動的に作成されます。
これまでのところ、K3マスターノードのみを作成しました。ワーカーノードの場合、次のパラメーターを使用してK3をインストールするだけで済みます。
curl -sfL https://get.k3s.io | K3S_TOKEN=${token} sh -s - agent \
--server https://${master_node_ip}:6443 \
--kubelet-arg="cloud-provider=external" \
--kubelet-arg="provider-id=digitalocean://$worker_id"
これで、すべてのノードに適切なラベルセット(パブリック/プライベートIP、DOエリアなど)が設定され、DOLBを介したルーティングがすぐに開始されます。
最後に、プロセス全体を自動化するための簡単なbashスクリプトを作成しました。このソリューションでは、DO CCMを使用して、DigitalOcean上に4ノード(1つのマスターノード+ 3つのワーカーノード)のk3sクラスターを2分以内に作成できます。
https://github.com/DavidZisky/k3s-cloud
著者:
Dawid Ziolkowski、クラウドネイティブエンジニア
元のリンク:
https://itnext.io/how-to-integrate-k3s-with-the-cloud-controller-36bd5020b8f7