@@ -2,6 +2,7 @@ apiVersion: cluster.x-k8s.io/v1beta1
22kind : Cluster
33metadata :
44 name : " ${CLUSTER_NAME}"
5+ namespace : " ${NAMESPACE}"
56spec :
67 infrastructureRef :
78 apiVersion : infrastructure.cluster.x-k8s.io/v1beta1
@@ -21,6 +22,7 @@ apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
2122kind : ProxmoxCluster
2223metadata :
2324 name : " ${CLUSTER_NAME}"
25+ namespace : " ${NAMESPACE}"
2426spec :
2527 controlPlaneEndpoint :
2628 host : " ${CONTROLPLANE_HOST}"
@@ -43,9 +45,16 @@ apiVersion: controlplane.cluster.x-k8s.io/v1beta1
4345kind : KubeadmControlPlane
4446metadata :
4547 name : " ${CLUSTER_NAME}"
48+ namespace : " ${NAMESPACE}"
4649spec :
4750 kubeadmConfigSpec :
4851 clusterConfiguration :
52+ apiServer :
53+ extraArgs :
54+ cloud-provider : external
55+ controllerManager :
56+ extraArgs :
57+ cloud-provider : external
4958 etcd :
5059 local :
5160 dataDir : /var/lib/etcd
5968 bindPort : 6443
6069 nodeRegistration :
6170 criSocket : unix:///var/run/containerd/containerd.sock
71+ kubeletExtraArgs :
72+ cloud-provider : external
6273 postKubeadmCommands :
6374 - " curl -L https://dl.k8s.io/release/v1.27.3/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl"
6475 - " chmod +x /usr/local/bin/kubectl"
@@ -78,6 +89,7 @@ apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
7889kind : ProxmoxMachineTemplate
7990metadata :
8091 name : ${CLUSTER_NAME}-controlplane
92+ namespace : " ${NAMESPACE}"
8193spec :
8294 template :
8395 spec :
@@ -140,13 +152,127 @@ spec:
140152---
141153
142154apiVersion : v1
143- data :
144- PROXMOX_PASSWORD : ${PROXMOX_PASSWORD_BASE64 }
145- PROXMOX_USER : ${PROXMOX_USER_BASE64 }
146- NODE_URL : ${NODE_URL_BASE64 }
147- NODE_USER : ${NODE_USER_BASE64 }
148- NODE_PASSWORD : ${NODE_PASSWORD_BASE64 }
155+ stringData :
156+ PROXMOX_PASSWORD : ${PROXMOX_PASSWORD }
157+ PROXMOX_USER : ${PROXMOX_USER }
158+ NODE_URL : ${NODE_URL }
159+ NODE_USER : ${NODE_USER }
160+ NODE_PASSWORD : ${NODE_PASSWORD }
149161kind : Secret
150162metadata :
151163 name : " ${CLUSTER_NAME}"
152- type : Opaque
164+ namespace : " ${NAMESPACE}"
165+ type : Opaque
166+
167+ ---
168+
169+ apiVersion : addons.cluster.x-k8s.io/v1beta1
170+ kind : ClusterResourceSet
171+ metadata :
172+ labels :
173+ cluster.x-k8s.io/cluster-name : ' ${CLUSTER_NAME}'
174+ name : ${CLUSTER_NAME}-crs-1
175+ namespace : " ${NAMESPACE}"
176+ spec :
177+ clusterSelector :
178+ matchLabels :
179+ cluster.x-k8s.io/cluster-name : ' ${CLUSTER_NAME}'
180+ resources :
181+ - kind : ConfigMap
182+ name : cloud-controller-manager
183+
184+ ---
185+
186+ apiVersion : v1
187+ kind : ConfigMap
188+ metadata :
189+ name : cloud-controller-manager
190+ namespace : " ${NAMESPACE}"
191+ data :
192+ cloud-controller-manager.yaml : |
193+ apiVersion: v1
194+ kind: ServiceAccount
195+ metadata:
196+ name: proxmox-cloud-controller-manager
197+ namespace: kube-system
198+ ---
199+ apiVersion: rbac.authorization.k8s.io/v1
200+ kind: ClusterRoleBinding
201+ metadata:
202+ name: system:proxmox-cloud-controller-manager
203+ roleRef:
204+ apiGroup: rbac.authorization.k8s.io
205+ kind: ClusterRole
206+ name: cluster-admin
207+ subjects:
208+ - kind: ServiceAccount
209+ name: proxmox-cloud-controller-manager
210+ namespace: kube-system
211+ ---
212+ apiVersion: apps/v1
213+ kind: DaemonSet
214+ metadata:
215+ labels:
216+ k8s-app: cloud-controller-manager
217+ name: cloud-controller-manager
218+ namespace: kube-system
219+ spec:
220+ selector:
221+ matchLabels:
222+ k8s-app: cloud-controller-manager
223+ template:
224+ metadata:
225+ labels:
226+ k8s-app: cloud-controller-manager
227+ spec:
228+ serviceAccountName: proxmox-cloud-controller-manager
229+ containers:
230+ - name: cloud-controller-manager
231+ image: spyduck/cloud-provider-proxmox:latest
232+ command:
233+ - /usr/local/bin/cloud-controller-manager
234+ - --cloud-provider=proxmox
235+ - --cloud-config=/etc/proxmox/config.yaml
236+ - --leader-elect=true
237+ - --use-service-account-credentials
238+ - --controllers=cloud-node,cloud-node-lifecycle
239+ volumeMounts:
240+ - name: cloud-config
241+ mountPath: /etc/proxmox
242+ readOnly: true
243+ livenessProbe:
244+ httpGet:
245+ path: /healthz
246+ port: 10258
247+ scheme: HTTPS
248+ initialDelaySeconds: 20
249+ periodSeconds: 30
250+ timeoutSeconds: 5
251+ volumes:
252+ - name: cloud-config
253+ secret:
254+ secretName: cloud-config
255+ tolerations:
256+ - key: node.cloudprovider.kubernetes.io/uninitialized
257+ value: "true"
258+ effect: NoSchedule
259+ - key: node-role.kubernetes.io/control-plane
260+ operator: Exists
261+ effect: NoSchedule
262+ - key: node-role.kubernetes.io/master
263+ operator: Exists
264+ effect: NoSchedule
265+ nodeSelector:
266+ node-role.kubernetes.io/control-plane: ""
267+ ---
268+ apiVersion: v1
269+ kind: Secret
270+ metadata:
271+ name: cloud-config
272+ namespace: kube-system
273+ stringData:
274+ config.yaml: |
275+ proxmox:
276+ url: ${PROXMOX_URL}
277+ user: ${PROXMOX_USER}
278+ password: ${PROXMOX_PASSWORD}
0 commit comments