Hetzner Cloud クラウド コントローラー マネージャーは、Kubernetes クラスターを Hetzner Cloud & Robot API と統合します。
Node
オブジェクトを更新します。Node
オブジェクトをクリーンアップします。type: LoadBalancer
のサービスを監視し、そのサービス用に Hetzner Cloud Load Balancer を作成し、Kubernetes ノードをロード バランサーのターゲットとして追加します。クラウド コントローラーの詳細については、Kubernetes ドキュメントを参照してください。
apiVersion : v1
kind : Node
metadata :
labels :
node.kubernetes.io/instance-type : cx22
topology.kubernetes.io/region : fsn1
topology.kubernetes.io/zone : fsn1-dc8
instance.hetzner.cloud/provided-by : cloud
name : node
spec :
podCIDR : 10.244.0.0/24
providerID : hcloud://123456 # <-- Hetzner Cloud Server ID
status :
addresses :
- address : node
type : Hostname
- address : 1.2.3.4 # <-- Hetzner Cloud Server public ipv4
type : ExternalIP
このデプロイメント例では、 kubeadm
使用して Kubernetes クラスターをブートストラップし、オーバーレイ ネットワーク エージェントとして flannel を使用します。 Kubernetes をインストールする好みの方法に合わせて手順を自由に調整してください。
これらのデプロイ手順はhcloud-cloud-controller-manager
のインストールをガイドすることを目的としており、決して Kubernetes クラスターのセットアップに関する詳細なチュートリアルではありません。関連するコンポーネントに関する事前の知識が必要です。
kubeadm クラスター作成ガイド (これらの手順は拡張を目的としています) および kubeadm ドキュメントを参照してください。
クラウド コントローラー マネージャーは、ノードがクラスターに追加されるときにラベルを追加します。現在の Kubernetes バージョンの場合、これは、 --cloud-provider=external
フラグをkubelet
に追加する必要があることを意味します。これを行う方法は、Kubernetes ディストリビューションによって異なります。 kubeadm
を使用すると、kubeadm config ( nodeRegistration.kubeletExtraArgs
) で設定するか、systemd ドロップイン ユニット/etc/systemd/system/kubelet.service.d/20-hcloud.conf
を通じて設定できます。
[Service]
Environment = " KUBELET_EXTRA_ARGS=--cloud-provider=external "
注: --cloud-provider
フラグは、K8S 1.19 以降非推奨になりました。これに関するログ メッセージが表示されます。今のところ (v1.31) は依然として必要です。
これで、コントロール プレーンを初期化できるようになりました。
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
kube-apiserver に接続するように kubectl を構成します。
mkdir -p $HOME /.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config
sudo chown $( id -u ) : $( id -g ) $HOME /.kube/config
フランネル CNI プラグインをデプロイします。
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
uninitialized
汚染を許容するために、フランネル デプロイメントにパッチを適用します。
kubectl -n kube-system patch ds kube-flannel-ds --type json -p ' [{"op":"add","path":"/spec/template/spec/tolerations/-","value":{"key":"node.cloudprovider.kubernetes.io/uninitialized","value":"true","effect":"NoSchedule"}}] '
Hetzner Cloud API トークンを含むシークレットを作成します。
kubectl -n kube-system create secret generic hcloud --from-literal=token= < hcloud API token >
hcloud-cloud-controller-manager
デプロイする
Helm の使用 (推奨):
helm repo add hcloud https://charts.hetzner.cloud
helm repo update hcloud
helm install hccm hcloud/hcloud-cloud-controller-manager -n kube-system
詳細については、Helm チャートの README を参照してください。
従来のインストール方法:
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
ネットワーク サポートを備えたクラウド コントローラー マネージャーを使用する場合、CCM は IP の割り当て (およびルーティングのセットアップ) を優先します (ドキュメント: https://kubernetes.io/docs/concepts/architecture/cloud-controller/#route-コントローラ)。使用する CNI プラグインは、この k8s ネイティブ機能をサポートする必要があるため (Cilium はサポートしていますが、Calico と WeaveNet については知りません)、基本的には Hetzner Cloud Networks を基盤となるネットワーク スタックとして使用します。
ネットワーク サポートなしで CCM を使用すると、RouteController 部分が無効になるだけで、他のすべての部分は完全に同じように動作します。その後、CNI だけがすべてのネットワーク スタックの作成を担当します。ネットワーク サポートを備えた CCM を使用すると、ノードがプライベート ネットワークに接続されるため、ノードが接続を暗号化する必要がなく、ネットワークを管理する必要がないため運用オーバーヘッドが若干軽減されるという利点があります。
Hetzner Cloud Networks
機能を使用したい場合は、Deployment with Networks のサポート ドキュメントにアクセスしてください。
ネットワークを自分で管理する場合でも、プライベート ネットワークについて CCM に知らせる必要がある場合があります。これを行うには、CCM 導入環境にネットワーク名/ID を含む環境変数を追加します。
env:
- name: HCLOUD_NETWORK
valueFrom:
secretKeyRef:
name: hcloud
key: network
また、ネットワーク名/ID をシークレットに追加する必要もあります: kubectl -n kube-system create secret generic hcloud --from-literal=token=<hcloud API token> --from-literal=network=<hcloud Network_ID_or_Name>
。
kube-proxy
が IPVS モードで実行されている場合、 Service
マニフェストには、FQDN が HCloud LoadBalancer IP に解決される注釈load-balancer.hetzner.cloud/hostname
が必要です。
#212を参照
私たちは、Kubernetes の最新の 3 つのバージョンをサポートすることを目指しています。 Kubernetes バージョンがEnd Of Lifeとしてマークされると、そのバージョンのサポートが終了し、CI テストからそのバージョンが削除されます。これは、必ずしも Cloud Controller Manager がこのバージョンでまだ動作しないことを意味するわけではありません。サポートされていないバージョンのみに関連するバグは修正されません。
現在の Kubernetes リリース: https://kubernetes.io/releases/
Kubernetes | クラウドコントローラーマネージャー | 展開ファイル |
---|---|---|
1.31 | 最新 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.30 | 最新 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.29 | 最新 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.28 | 最新 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml |
1.27 | v1.20.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.20.0/ccm-networks.yaml |
1.26 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm-networks.yaml |
1.25 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm-networks.yaml |
1.24 | v1.17.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.17.2/ccm-networks.yaml |
1.23 | v1.13.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.13.2/ccm-networks.yaml |
Kubernetes | クラウドコントローラーマネージャー | 展開ファイル |
---|---|---|
1.31 | 最新 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.30 | 最新 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.29 | 最新 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.28 | 最新 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml |
1.27 | v1.20.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.20.0/ccm.yaml |
1.26 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm.yaml |
1.25 | v1.19.0 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.19.0/ccm.yaml |
1.24 | v1.17.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.17.2/ccm.yaml |
1.23 | v1.13.2 | https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/v1.13.2/ccm.yaml |
開発環境をセットアップするには、次のツールがインストールされていることを確認してください。
HCLOUD_TOKEN
構成します。 警告
開発環境は Hetzner Cloud サーバー上で実行されるため、コストが発生します。
make -C dev up
source dev/files/env.sh
kubectl get nodes -o wide
skaffold dev
コードを変更すると、skaffold はイメージを再構築し、再デプロイして、すべてのログを出力します。
make -C dev down
単体テストを実行するには、次のツールがインストールされていることを確認してください。
go test ./...
e2e テストを実行する前に、開発環境のセットアップの手順に従っていることを確認してください。
source dev/files/env.sh
go test ./tests/e2e -tags e2e -v
ロボットのサポートに取り組みたい場合は、上記の設定にいくつかの変更を加える必要があります。
これには、開発に使用するのと同じアカウントにロボット サーバーが必要です。サーバーは Ansible Playbook dev/robot/install.yml
を使用してセットアップし、 dev/robot/install.yml
で構成する必要があります。
export ROBOT_ENABLED=true
export ROBOT_USER= < Your Robot User >
export ROBOT_PASSWORD= < Your Robot Password >
skaffold
ステップに到達するまで、環境セットアップを続けます。代わりにskaffold dev --profile=robot
実行してください。
ロボット用の別のテストスイートがあります。これらは次のように実行できます。
go test ./tests/e2e -tags e2e,robot -v
Apache ライセンス、バージョン 2.0