Skip to content

Commit c0fd522

Browse files
authored
Merge pull request #91 from kubeflow-onprem/install-ccm-and-kube-vip
Install ccm and kube vip
2 parents d0f67b7 + 342a35e commit c0fd522

19 files changed

+327
-68
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.terraform/*
1+
**/.terraform/*
22
*.tfstate
33
*.tfstate.backup
44
*.tfvars

.terraform.lock.hcl

Lines changed: 52 additions & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kubernetes-controller-pool.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,6 @@ module "controllers" {
5454
skip_workloads = var.skip_workloads
5555
control_plane_node_count = var.control_plane_node_count
5656
ssh_private_key_path = local_file.cluster_private_key_pem.filename
57+
ccm_enabled = var.ccm_enabled
58+
loadbalancer_type = var.loadbalancer_type
5759
}

kubernetes-node-pool.tf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ module "node_pool_blue" {
1313
controller_address = module.controllers.controller_addresses
1414
project_id = var.metal_create_project ? metal_project.new_project[0].id : var.project_id
1515
storage = var.storage
16+
ccm_enabled = var.ccm_enabled
17+
1618
}
1719

1820
module "node_pool_gpu_green" {
@@ -28,4 +30,5 @@ module "node_pool_gpu_green" {
2830
controller_address = module.controllers.controller_addresses
2931
project_id = var.metal_create_project ? metal_project.new_project[0].id : var.project_id
3032
storage = var.storage
33+
ccm_enabled = var.ccm_enabled
3134
}

modules/controller_pool/.terraform.lock.hcl

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

modules/controller_pool/controller-primary.tpl

Lines changed: 59 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,14 @@ function gpu_config {
8282
}
8383

8484
function metal_lb {
85-
echo "Configuring MetalLB for ${metal_network_cidr}..." && \
85+
echo "Configuring MetalLB for ${metal_network_cidr}..." && \
8686
cd $HOME/kube ; \
8787
cat << EOF > metal_lb.yaml
8888
apiVersion: v1
8989
kind: ConfigMap
9090
metadata:
91-
namespace: metallb-system
92-
name: config
91+
namespace: ${metallb_namespace}
92+
name: ${metallb_configmap}
9393
data:
9494
config: |
9595
address-pools:
@@ -98,6 +98,27 @@ data:
9898
addresses:
9999
- ${metal_network_cidr}
100100
EOF
101+
102+
echo "Applying MetalLB manifests..." && \
103+
cd $HOME/kube && \
104+
kubectl --kubeconfig=/etc/kubernetes/admin.conf apply -f $(cat $HOME/workloads.json | jq .metallb_namespace) && \
105+
kubectl --kubeconfig=/etc/kubernetes/admin.conf apply -f $(cat $HOME/workloads.json | jq .metallb_release) && \
106+
kubectl --kubeconfig=/etc/kubernetes/admin.conf create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)" && \
107+
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f metal_lb.yaml
108+
}
109+
110+
function kube_vip {
111+
kubectl apply -f https://kube-vip.io/manifests/rbac.yaml
112+
GATEWAY_IP=$(curl https://metadata.platformequinix.com/metadata | jq -r ".network.addresses[] | select(.public == false) | .gateway");
113+
ip route add 169.254.255.1 via $GATEWAY_IP
114+
ip route add 169.254.255.2 via $GATEWAY_IP
115+
alias kube-vip="docker run --network host --rm ghcr.io/kube-vip/kube-vip:v0.3.8"
116+
kube-vip manifest daemonset \
117+
--interface lo \
118+
--services \
119+
--bgp \
120+
--annotations metal.equinix.com \
121+
--inCluster | kubectl apply -f -
101122
}
102123

103124
function ceph_pre_check {
@@ -107,7 +128,7 @@ function ceph_pre_check {
107128

108129
function ceph_rook_basic {
109130
cd $HOME/kube ; \
110-
mkdir ceph ;\
131+
mkdir ceph ;\
111132
echo "Pulled Manifest for Ceph-Rook..." && \
112133
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f $(cat $HOME/workloads.json | jq .ceph_common) ; \
113134
sleep 30 ; \
@@ -177,15 +198,6 @@ acert="/etc/kubernetes/pki/etcd/ca.crt" get /registry/secrets/default/personal-s
177198
sed -i 's| volumeMounts:| volumeMounts:\n - mountPath: /etc/kubernetes/secrets.conf\n name: secretconfig\n readOnly: true|g' /etc/kubernetes/manifests/kube-apiserver.yaml
178199
}
179200

180-
function apply_workloads {
181-
echo "Applying workloads..." && \
182-
cd $HOME/kube && \
183-
kubectl --kubeconfig=/etc/kubernetes/admin.conf apply -f $(cat $HOME/workloads.json | jq .metallb_namespace) && \
184-
kubectl --kubeconfig=/etc/kubernetes/admin.conf apply -f $(cat $HOME/workloads.json | jq .metallb_release) && \
185-
kubectl --kubeconfig=/etc/kubernetes/admin.conf create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)" && \
186-
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f metal_lb.yaml
187-
}
188-
189201
function apply_extra {
190202
workload_manifests=$(cat $HOME/workloads.json | jq .extra | sed "s/^\([\"']\)\(.*\)\1\$/\2/g" | tr , '\n') && \
191203
if [ "$workload_manifests" == "" ]; then
@@ -197,11 +209,35 @@ function apply_extra {
197209
fi
198210
}
199211

212+
function install_ccm {
213+
cat << EOF > $HOME/kube/equinix-ccm-config.yaml
214+
apiVersion: v1
215+
kind: Secret
216+
metadata:
217+
name: metal-cloud-config
218+
namespace: kube-system
219+
stringData:
220+
cloud-sa.json: |
221+
{
222+
"apiKey": "${equinix_api_key}",
223+
"projectID": "${equinix_project_id}",
224+
"loadbalancer": "${loadbalancer}"
225+
}
226+
EOF
227+
228+
kubectl --kubeconfig=/etc/kubernetes/admin.conf apply -f $HOME/kube/equinix-ccm-config.yaml
229+
RELEASE=${ccm_version}
230+
kubectl --kubeconfig=/etc/kubernetes/admin.conf apply -f https://github.com/equinix/cloud-provider-equinix-metal/releases/download/$RELEASE/deployment.yaml
231+
}
232+
200233
install_docker && \
201234
enable_docker && \
202235
load_workloads && \
203236
install_kube_tools && \
204237
sleep 30 && \
238+
if [ "${ccm_enabled}" = "true" ]; then
239+
echo KUBELET_EXTRA_ARGS=\"--cloud-provider=external\" > /etc/default/kubelet
240+
fi
205241
if [ "${control_plane_node_count}" = "0" ]; then
206242
echo "No control plane nodes provisioned, initializing single master..." ; \
207243
init_cluster
@@ -212,8 +248,16 @@ fi
212248

213249
sleep 180 && \
214250
configure_network
215-
metal_lb && \
216-
apply_workloads
251+
if [ "${ccm_enabled}" = "true" ]; then
252+
install_ccm
253+
sleep 30 # The CCM will probably take a while to reconcile
254+
fi
255+
if [ "${loadbalancer_type}" = "metallb" ]; then
256+
metal_lb
257+
fi
258+
if [ "${loadbalancer_type}" = "kube-vip" ]; then
259+
kube_vip
260+
fi
217261
if [ "${count_gpu}" = "0" ]; then
218262
echo "Skipping GPU enable..."
219263
else

modules/controller_pool/controller-standby.tpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ enable_docker && \
3939
install_kube_tools && \
4040
sleep 180 ; \
4141
backoff_count=`echo $((5 + RANDOM % 100))` ; \
42-
sleep $backoff_count
42+
sleep $backoff_count # Shouldn't there be a kubeadm join command somewhere? Looks like we just install tools and do nothing else

modules/controller_pool/locals.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
locals {
2+
// Only support MetalLB and Kube-VIP
3+
loadbalancer_config = var.loadbalancer_type == "metallb" ? "metallb:///${var.metallb_namespace}/${var.metallb_configmap}" : "kube-vip://"
4+
}

modules/controller_pool/main.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ data "template_file" "controller-primary" {
1515
skip_workloads = var.skip_workloads ? "yes" : "no"
1616
workloads = jsonencode(var.workloads)
1717
control_plane_node_count = var.control_plane_node_count
18+
equinix_api_key = var.auth_token
19+
equinix_project_id = var.project_id
20+
loadbalancer = local.loadbalancer_config
21+
loadbalancer_type = var.loadbalancer_type
22+
ccm_version = var.ccm_version
23+
ccm_enabled = var.ccm_enabled
24+
metallb_namespace = var.metallb_namespace
25+
metallb_configmap = var.metallb_configmap
1826
}
1927
}
2028

0 commit comments

Comments
 (0)