@@ -75,7 +75,7 @@ parse_args() {
75
75
OCNE_CLUSTER_NAME=' ' OCNE_ENV_NAME=' ' OCNE_DEV=0 REGISTRY_OCNE=' '
76
76
OPERATOR=0 MULTI_CONTROL_PLANE=0 CONTROL_PLANE=0 CONTROL_PLANES=' ' WORKER=0 WORKERS=' '
77
77
VERBOSE=0 SUBNET=' ' EXTRA_REPO=' '
78
- POD_NETWORK=calico DEPLOY_CALICO=0 CALICO_MODULE_NAME=' ' DEPLOY_MULTUS=0 MULTUS_MODULE_NAME=' '
78
+ DEPLOY_CALICO=0 CALICO_MODULE_NAME=' ' DEPLOY_MULTUS=0 MULTUS_MODULE_NAME=' '
79
79
DEPLOY_HELM=0 HELM_MODULE_NAME=' ' DEPLOY_ISTIO=0 ISTIO_MODULE_NAME=' '
80
80
DEPLOY_METALLB=0 METALLB_MODULE_NAME=' ' DEPLOY_GLUSTER=0 GLUSTER_MODULE_NAME=' '
81
81
@@ -149,15 +149,6 @@ parse_args() {
149
149
WORKERS=" $2 "
150
150
shift ; shift
151
151
;;
152
- " --pod-network" )
153
- if [[ $# -lt 2 ]]; then
154
- echo " Missing parameter for --pod-network" >&2
155
- exit 1
156
- fi
157
- POD_NETWORK=" $2 "
158
- shift ; shift
159
- ;;
160
-
161
152
" --with-calico" )
162
153
DEPLOY_CALICO=1
163
154
shift
@@ -252,7 +243,6 @@ parse_args() {
252
243
readonly OCNE_CLUSTER_NAME OCNE_ENV_NAME OCNE_DEV REGISTRY_OCNE
253
244
readonly OPERATOR MULTI_CONTROL_PLANE CONTROL_PLANE CONTROL_PLANES WORKER WORKERS
254
245
readonly VERBOSE EXTRA_REPO
255
- readonly POD_NETWORK
256
246
readonly DEPLOY_CALICO CALICO_MODULE_NAME
257
247
readonly DEPLOY_MULTUS MULTUS_MODULE_NAME
258
248
readonly DEPLOY_HELM HELM_MODULE_NAME
@@ -300,7 +290,77 @@ setup_repos() {
300
290
# None
301
291
# ######################################
302
292
prerequisites () {
303
- msg " Configure prerequisites such as firewall, etc.."
293
+
294
+ if [[ ${DEPLOY_CALICO} == 1 ]]; then
295
+ msg " Installing kernel-uek-modules for calico"
296
+ echo_do sudo dnf install -y kernel-uek-modules-$( uname -r)
297
+ fi
298
+
299
+ if [[ ${DEPLOY_GLUSTER} == 1 ]]; then
300
+ if [[ ${WORKER} == 1 ]]; then
301
+ msg " Installing the GlusterFS Server on Worker node"
302
+ echo_do sudo dnf install -y oracle-gluster-release-el8
303
+ echo_do sudo dnf config-manager --enable ol8_gluster_appstream
304
+ echo_do sudo dnf module enable -y glusterfs
305
+ echo_do sudo dnf install -y @glusterfs/server
306
+ # Enable TLS / Management Encryption
307
+ # https://docs.oracle.com/en/operating-systems/oracle-linux/gluster-storage/gluster-install-upgrade.html#gluster-tls
308
+ msg " Enable GlusterFS Transport Layer Security (TLS) for Management Encryption"
309
+ echo_do sudo openssl genrsa -out /etc/ssl/glusterfs.key 2048
310
+ echo_do sudo openssl req -new -x509 -days 365 -key /etc/ssl/glusterfs.key -out /etc/ssl/glusterfs.pem -subj ' /CN=`hostname -f`'
311
+ echo_do eval " cat /etc/ssl/glusterfs.pem >> /vagrant/glusterfs.ca"
312
+ echo_do sudo touch /var/lib/glusterd/secure-access
313
+ echo_do sudo systemctl enable --now glusterd.service
314
+ echo_do sudo firewall-cmd --add-service=glusterfs --permanent
315
+ fi
316
+
317
+ if [[ ${OPERATOR} == 1 ]]; then
318
+ if [[ -f " /vagrant/glusterfs.ca" ]]; then
319
+ msg " Distributing GlusterFS Certificate Authority's (CA) certificates"
320
+ for node in ${WORKERS// ,/ } ; do
321
+ echo_do ssh -i /vagrant/id_rsa -o " UserKnownHostsFile=/vagrant/known_hosts" " ${node} " " sudo cp /vagrant/glusterfs.ca /etc/ssl/glusterfs.ca"
322
+ done
323
+ echo_do " rm -f /vagrant/glusterfs.ca"
324
+ fi
325
+
326
+ msg " Installing the Heketi Server & CLI on Operator node"
327
+ echo_do sudo dnf install -y oracle-gluster-release-el8
328
+ echo_do sudo dnf config-manager --enable ol8_gluster_appstream
329
+ echo_do sudo dnf module enable -y glusterfs
330
+ echo_do sudo dnf install -y heketi heketi-client
331
+ if [[ ${MASTER} == 0 ]]; then
332
+ # Standalone operator
333
+ echo_do sudo firewall-cmd --add-port=8080/tcp --permanent
334
+ fi
335
+ msg " Modifying the default /etc/heketi/heketi.json onto /vagrant/heketi.json"
336
+ echo_do sudo dnf install -y jq
337
+ contents=" $( jq ' .use_auth=true|.jwt.admin.key="secret"|.glusterfs.executor="ssh"|.glusterfs.sshexec.keyfile="/etc/heketi/vagrant_key"|.glusterfs.sshexec.user="vagrant"|.glusterfs.sshexec.sudo=true|del(.glusterfs.sshexec.port)|del(.glusterfs.sshexec.fstab)|.glusterfs.loglevel="info"' /etc/heketi/heketi.json) " && echo -E " ${contents} " > /vagrant/heketi.json
338
+ echo_do sudo cp /vagrant/heketi.json /etc/heketi/heketi.json
339
+ echo_do rm -f /vagrant/heketi.json
340
+ # SSH Key *MUST* be in PEM format! Heketi would reject it otherwise.
341
+ msg " Copying the Vagrant SSH Key. Must be in PEM format!"
342
+ echo_do sudo cp /vagrant/id_rsa /etc/heketi/vagrant_key
343
+ # Fix default permission which exposes the secret /etc/heketi/heketi.json
344
+ echo_do sudo chmod 0600 /etc/heketi/vagrant_key /etc/heketi/heketi.json
345
+ echo_do sudo chown -R heketi: /etc/heketi
346
+ # Enable Heketi
347
+ echo_do sudo systemctl enable --now heketi.service
348
+ # Test Heketi
349
+ msg " Waiting to Heketi service to become ready"
350
+ echo_do curl --retry-connrefused --retry 10 --retry-delay 5 127.0.0.1:8080/hello
351
+ # Heketi ready
352
+ msg " Creating Gluster Topology file /etc/heketi/topology-ocne.json"
353
+ # https://github.com/heketi/heketi/blob/master/docs/admin/topology.md
354
+ jq -R ' {clusters:[{nodes:(./","|map({node:{hostnames:{manage:[.],storage:[.]},zone:1},devices:[{name:"/dev/sdb",destroydata:false}]}))}]}' <<< " ${WORKERS}" > /vagrant/topology-ocne.json
355
+ echo_do sudo cp /vagrant/topology-ocne.json /etc/heketi/topology-ocne.json
356
+ echo_do sudo chown heketi: /etc/heketi/topology-ocne.json
357
+ msg " Loading Gluster Cluster Topology with Heketi"
358
+ # export HEKETI_CLI_USER=admin; export HEKETI_CLI_KEY=secret
359
+ echo_do heketi-cli --user=admin --secret=secret topology load --json=/etc/heketi/topology-ocne.json
360
+ echo_do rm -f /vagrant/topology-ocne.json
361
+ fi
362
+ fi
363
+
304
364
305
365
}
306
366
@@ -430,13 +490,63 @@ quick_install_ocne() {
430
490
# None
431
491
# ######################################
432
492
deploy_modules () {
433
- local node
493
+ local node control_plane_nodes worker_nodes
434
494
435
495
msg " Deploying additional modules"
436
496
437
497
# Calico networking module
438
498
if [[ ${DEPLOY_CALICO} == 1 ]]; then
439
499
500
+ # BEGIN WORKAROUND: recreate Kubernetes module until calico can be installed
501
+ # with olcnectl provision quick installation
502
+
503
+ msg " Workaround: recreate Kubernetes module for Calico pod-network"
504
+
505
+ control_plane_nodes=" ${CONTROL_PLANES// ,/: 8090,} :8090"
506
+ worker_nodes=" ${WORKERS// ,/: 8090,} :8090"
507
+
508
+ echo_do olcnectl module uninstall \
509
+ --environment-name " ${OCNE_ENV_NAME} " \
510
+ --name " ${OCNE_CLUSTER_NAME} "
511
+
512
+ echo_do olcnectl module create --module kubernetes \
513
+ --environment-name " ${OCNE_ENV_NAME} " \
514
+ --name " ${OCNE_CLUSTER_NAME} " \
515
+ --container-registry " ${REGISTRY_OCNE} " \
516
+ --control-plane-nodes " ${control_plane_nodes} " \
517
+ --worker-nodes " ${worker_nodes} " \
518
+ --selinux enforcing \
519
+ --pod-network none \
520
+ --pod-network-iface eth1 \
521
+ --restrict-service-externalip false
522
+
523
+ echo_do olcnectl module validate \
524
+ --environment-name " ${OCNE_ENV_NAME} " \
525
+ --name " ${OCNE_CLUSTER_NAME} "
526
+
527
+ echo_do olcnectl module install \
528
+ --environment-name " ${OCNE_ENV_NAME} " \
529
+ --name " ${OCNE_CLUSTER_NAME} "
530
+
531
+ # END WORKAROUND
532
+
533
+ if ! [ -f /vagrant/calico-config.yaml ]; then
534
+ echo_do " cat <<-EOF | tee /vagrant/calico-config.yaml
535
+ installation:
536
+ cni:
537
+ type: Calico
538
+ calicoNetwork:
539
+ bgp: Disabled
540
+ ipPools:
541
+ - cidr: 10.244.0.0/16
542
+ encapsulation: VXLAN
543
+ nodeAddressAutodetectionV4:
544
+ interface: eth1
545
+ registry: container-registry.oracle.com
546
+ imagePath: olcne
547
+ EOF"
548
+ fi
549
+
440
550
# Create the Calico networking module
441
551
msg " Creating the Calico networking module: ${CALICO_MODULE_NAME} "
442
552
echo_do olcnectl module create \
@@ -462,6 +572,26 @@ deploy_modules() {
462
572
# Multus networking module
463
573
if [[ ${DEPLOY_MULTUS} == 1 ]]; then
464
574
575
+ if ! [ -f /vagrant/multus-config.yaml ]; then
576
+ echo_do " cat <<-EOF | tee /vagrant/multus-config.yaml
577
+ apiVersion: k8s.cni.cncf.io/v1
578
+ kind: NetworkAttachmentDefinition
579
+ metadata:
580
+ name: bridge-conf
581
+ spec:
582
+ config: '{
583
+ cniVersion: 0.3.1,
584
+ type: bridge,
585
+ bridge: mybr0,
586
+ ipam: {
587
+ type: host-local,
588
+ subnet: 192.168.12.0/24,
589
+ rangeStart: 192.168.12.10,
590
+ rangeEnd: 192.168.12.200
591
+ }
592
+ }'
593
+ EOF"
594
+ fi
465
595
# Create the Multus networking module
466
596
msg " Creating the Multus networking module: ${MULTUS_MODULE_NAME} "
467
597
echo_do olcnectl module create \
@@ -544,7 +674,7 @@ deploy_modules() {
544
674
protocol: layer2
545
675
addresses:
546
676
- ${SUBNET} .240-${SUBNET} .250
547
- EOF"
677
+ EOF"
548
678
549
679
# Create the MetalLB module
550
680
msg " Creating the MetalLB module: ${METALLB_MODULE_NAME} "
@@ -779,11 +909,15 @@ ready() {
779
909
api_server=$( ip -f inet addr show eth1| sed -En -e ' s/.*inet ([0-9.]+).*/\1/p' )
780
910
fi
781
911
912
+ node=${CONTROL_PLANES// ,*/ }
913
+
782
914
msg " OCNE Modules deployed in this environment."
783
915
olcnectl module instances --api-server " ${api_server} :8091" --environment-name " ${OCNE_ENV_NAME} "
784
916
917
+ msg " OCNE Pods deployed in this environment."
918
+ ssh vagrant@" ${node} " kubectl get pods -A
919
+
785
920
msg " Your Oracle Cloud Native Environment is operational."
786
- node=${CONTROL_PLANES// ,*/ }
787
921
ssh vagrant@" ${node} " kubectl get nodes -o=wide
788
922
}
789
923
0 commit comments