@@ -82,14 +82,14 @@ function gpu_config {
8282}
8383
8484function 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
8888apiVersion: v1
8989kind: ConfigMap
9090metadata:
91- namespace: metallb-system
92- name: config
91+ namespace: ${metallb_namespace}
92+ name: ${metallb_configmap}
9393data:
9494 config: |
9595 address-pools:
9898 addresses:
9999 - ${metal_network_cidr}
100100EOF
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
103124function ceph_pre_check {
@@ -107,7 +128,7 @@ function ceph_pre_check {
107128
108129function 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-
189201function 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+
200233install_docker && \
201234enable_docker && \
202235load_workloads && \
203236install_kube_tools && \
204237sleep 30 && \
238+ if [ " ${ccm_enabled} " = " true" ]; then
239+ echo KUBELET_EXTRA_ARGS=\" --cloud-provider=external\" > /etc/default/kubelet
240+ fi
205241if [ " ${control_plane_node_count} " = " 0" ]; then
206242 echo " No control plane nodes provisioned, initializing single master..." ; \
207243 init_cluster
212248
213249sleep 180 && \
214250configure_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
217261if [ " ${count_gpu} " = " 0" ]; then
218262 echo " Skipping GPU enable..."
219263else
0 commit comments