Skip to content

Commit cc3ba17

Browse files
authored
Merge pull request #40 from sp-yduck/ccm
support clusterctl init & ccm in crs
2 parents bdd43c8 + 1323c9c commit cc3ba17

File tree

5 files changed

+168
-25
lines changed

5 files changed

+168
-25
lines changed

README.md

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,33 @@ You’ll need a Kubernetes cluster to run against. You can use [KIND](https://si
1515
for more information : https://cluster-api.sigs.k8s.io/user/quick-start.html#initialize-the-management-cluster
1616

1717
```sh
18-
# install cluster-api crd including controlplane provider & bootstrap provider
19-
clusterctl init
20-
21-
# install cluster-api-provider-proxmox crd & controller
22-
make deploy
18+
# install cluster-api components
19+
export EXP_CLUSTER_RESOURCE_SET=true
20+
clusterctl init --infrastructure=proxmox:v0.2.2 --config https://raw.githubusercontent.com/sp-yduck/cluster-api-provider-proxmox/main/clusterctl.yaml
2321
```
2422
**Note:** container images are available at [here](https://hub.docker.com/r/spyduck/cluster-api-provider-proxmox/tags)
2523

2624
2. Create your first workload cluster
2725
```sh
2826
# export env variables
29-
export CONTROLPLANE_HOST=X.X.X.X
27+
export CONTROLPLANE_HOST=X.X.X.X # for control-plane node
28+
export GATEWAY_ADDRESS=X.X.X.X # for control-plane node
29+
export NAMESERVER_ADDRESS=X.X.X.X # for contro-lplane node
3030
export PROXMOX_URL=X.X.X.X:8006
31-
export GATEWAY_ADDRESS=X.X.X.X
32-
export NAMESERVER_ADDRESS=X.X.X.X
33-
export PROXMOX_PASSWORD_BASE64=$(echo -n <password> | base64)
34-
export PROXMOX_USER_BASE64=$(echo -n <user@pam> | base64)
35-
export NODE_URL_BASE64=$(echo -n <node.ssh.url:22> | base64)
36-
export NODE_USER_BASE64=$(echo -n <node-ssh-user> | base64)
37-
export NODE_PASSWORD_BASE64=$(echo -n <node-ssh-password> | base64)
38-
39-
make create-workload-cluster
31+
export PROXMOX_PASSWORD=password
32+
export PROXMOX_USER=user@pam
33+
export NODE_URL=node.ssh.url:22
34+
export NODE_USER=node-ssh-user
35+
export NODE_PASSWORD=node-ssh-password
36+
37+
# generate manifests
38+
clusterctl generate cluster cappx-test --infrastructure=proxmox:v0.2.3 --config https://raw.githubusercontent.com/sp-yduck/cluster-api-provider-proxmox/main/clusterctl.yaml > cappx-test.yaml
39+
40+
# inspect and edit
41+
vi cappx-test.yaml
42+
43+
# apply manifests
44+
kubectl apply -f cappx-test.yaml
4045
```
4146

4247
3. Access your first workload cluster !!
@@ -52,7 +57,7 @@ kubectl --kubeconfig=kubeconfig.yaml get node
5257

5358
4. Tear down your workload cluster
5459
```sh
55-
make delete-workload-cluster
60+
kubectl delete cluster cappx-test
5661
```
5762

5863
## Fetures

clusterctl.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
providers:
2+
- name: proxmox
3+
url: https://github.com/sp-yduck/cluster-api-provider-proxmox/releases/latest/infrastructure-components.yaml
4+
type: InfrastructureProvider

examples/machine_deployment/metal3-ubuntu2204-k8s127.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ metadata:
2929
name: ${CLUSTER_NAME}-md-2
3030
spec:
3131
template:
32-
spec: {}
32+
spec:
33+
joinConfiguration:
34+
nodeRegistration:
35+
kubeletExtraArgs:
36+
cloud-provider: external
3337

3438
---
3539

examples/machine_deployment/ubuntu2204.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ metadata:
2929
name: ${CLUSTER_NAME}-md-1
3030
spec:
3131
template:
32-
spec: {}
32+
spec:
33+
joinConfiguration:
34+
nodeRegistration:
35+
kubeletExtraArgs:
36+
cloud-provider: external
3337

3438
---
3539

templates/cluster-template.yaml

Lines changed: 133 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ apiVersion: cluster.x-k8s.io/v1beta1
22
kind: Cluster
33
metadata:
44
name: "${CLUSTER_NAME}"
5+
namespace: "${NAMESPACE}"
56
spec:
67
infrastructureRef:
78
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
@@ -21,6 +22,7 @@ apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
2122
kind: ProxmoxCluster
2223
metadata:
2324
name: "${CLUSTER_NAME}"
25+
namespace: "${NAMESPACE}"
2426
spec:
2527
controlPlaneEndpoint:
2628
host: "${CONTROLPLANE_HOST}"
@@ -43,9 +45,16 @@ apiVersion: controlplane.cluster.x-k8s.io/v1beta1
4345
kind: KubeadmControlPlane
4446
metadata:
4547
name: "${CLUSTER_NAME}"
48+
namespace: "${NAMESPACE}"
4649
spec:
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
@@ -59,6 +68,8 @@ spec:
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
7889
kind: ProxmoxMachineTemplate
7990
metadata:
8091
name: ${CLUSTER_NAME}-controlplane
92+
namespace: "${NAMESPACE}"
8193
spec:
8294
template:
8395
spec:
@@ -140,13 +152,127 @@ spec:
140152
---
141153

142154
apiVersion: 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}
149161
kind: Secret
150162
metadata:
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

Comments
 (0)