Skip to content

Commit f03d71e

Browse files
committed
Added workaround for calico after quick installation procedure
1 parent db25bf8 commit f03d71e

File tree

4 files changed

+150
-28
lines changed

4 files changed

+150
-28
lines changed

OCNE/.env

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,7 @@
6262
# OCNE_ENV_NAME="ocne-env"
6363
# OCNE_CLUSTER_NAME="ocne-cluster"
6464

65-
# Pod networking technology: flannel, calico, none. Note: flannel is deprecated.
66-
# POD_NETWORK=calico
67-
68-
# Deploy Calico networking module? Sets POD_NETWORK=none. Place your config file in the current directory named: calico-config.yaml
65+
# Deploy Calico networking module? Place your config file in the current directory named: calico-config.yaml
6966
# DEPLOY_CALICO=false
7067
# CALICO_MODULE_NAME="ocne-calico"
7168

OCNE/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ At least one worker node is required.
128128
Kubernetes Dashboard from a browser on your host.
129129
__Note__: you only need this if you want to expose the kubectl proxy to other
130130
hosts in your network.
131-
- `POD_NETWORK` (default: `calico`): deploys the Calico networking module with default configuration. Can be set to [`calico`, `flannel`, `none`].
132131
- `DEPLOY_CALICO` (default: `false`): deploys the Calico networking module with custom configuration `calico-config.yaml`.
133132
- `DEPLOY_MULTUS` (default: `false`): deploys the Multus networking module with custom configuration `multus-config.yaml`.
134133
- `DEPLOY_HELM` (default: `false`): deploys the Helm module (deprecated).

OCNE/Vagrantfile

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,6 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
112112
# Deploy Multus networking module?
113113
DEPLOY_MULTUS = default_b('DEPLOY_MULTUS', false)
114114

115-
# Pod networking technology: flannel, calico, none. Note: flannel is deprecated.
116-
if DEPLOY_CALICO
117-
POD_NETWORK = 'none'
118-
else
119-
POD_NETWORK = default_s('POD_NETWORK', 'calico')
120-
end
121-
122115
# Deploy Istio?
123116
DEPLOY_ISTIO = default_b('DEPLOY_ISTIO', false)
124117

@@ -178,7 +171,6 @@ def provision_vm(vm, vm_args)
178171
args.push("--multi-control-plane") if MULTI_CONTROL_PLANE
179172
args.push("--repo", YUM_REPO) unless YUM_REPO == ""
180173
args.push("--ocne-dev") if OCNE_DEV
181-
args.push("--pod-network", POD_NETWORK) if POD_NETWORK
182174
args.push("--with-calico") if DEPLOY_CALICO
183175
args.push("--calico-module-name", CALICO_MODULE_NAME) if DEPLOY_CALICO
184176
args.push("--with-multus") if DEPLOY_MULTUS

OCNE/scripts/provision.sh

Lines changed: 149 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ parse_args() {
7575
OCNE_CLUSTER_NAME='' OCNE_ENV_NAME='' OCNE_DEV=0 REGISTRY_OCNE=''
7676
OPERATOR=0 MULTI_CONTROL_PLANE=0 CONTROL_PLANE=0 CONTROL_PLANES='' WORKER=0 WORKERS=''
7777
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=''
7979
DEPLOY_HELM=0 HELM_MODULE_NAME='' DEPLOY_ISTIO=0 ISTIO_MODULE_NAME=''
8080
DEPLOY_METALLB=0 METALLB_MODULE_NAME='' DEPLOY_GLUSTER=0 GLUSTER_MODULE_NAME=''
8181

@@ -149,15 +149,6 @@ parse_args() {
149149
WORKERS="$2"
150150
shift; shift
151151
;;
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-
161152
"--with-calico")
162153
DEPLOY_CALICO=1
163154
shift
@@ -252,7 +243,6 @@ parse_args() {
252243
readonly OCNE_CLUSTER_NAME OCNE_ENV_NAME OCNE_DEV REGISTRY_OCNE
253244
readonly OPERATOR MULTI_CONTROL_PLANE CONTROL_PLANE CONTROL_PLANES WORKER WORKERS
254245
readonly VERBOSE EXTRA_REPO
255-
readonly POD_NETWORK
256246
readonly DEPLOY_CALICO CALICO_MODULE_NAME
257247
readonly DEPLOY_MULTUS MULTUS_MODULE_NAME
258248
readonly DEPLOY_HELM HELM_MODULE_NAME
@@ -300,7 +290,77 @@ setup_repos() {
300290
# None
301291
#######################################
302292
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+
304364

305365
}
306366

@@ -430,13 +490,63 @@ quick_install_ocne() {
430490
# None
431491
#######################################
432492
deploy_modules() {
433-
local node
493+
local node control_plane_nodes worker_nodes
434494

435495
msg "Deploying additional modules"
436496

437497
# Calico networking module
438498
if [[ ${DEPLOY_CALICO} == 1 ]]; then
439499

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+
440550
# Create the Calico networking module
441551
msg "Creating the Calico networking module: ${CALICO_MODULE_NAME}"
442552
echo_do olcnectl module create \
@@ -462,6 +572,26 @@ deploy_modules() {
462572
# Multus networking module
463573
if [[ ${DEPLOY_MULTUS} == 1 ]]; then
464574

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
465595
# Create the Multus networking module
466596
msg "Creating the Multus networking module: ${MULTUS_MODULE_NAME}"
467597
echo_do olcnectl module create \
@@ -544,7 +674,7 @@ deploy_modules() {
544674
protocol: layer2
545675
addresses:
546676
- ${SUBNET}.240-${SUBNET}.250
547-
EOF"
677+
EOF"
548678

549679
# Create the MetalLB module
550680
msg "Creating the MetalLB module: ${METALLB_MODULE_NAME}"
@@ -779,11 +909,15 @@ ready() {
779909
api_server=$(ip -f inet addr show eth1| sed -En -e 's/.*inet ([0-9.]+).*/\1/p')
780910
fi
781911

912+
node=${CONTROL_PLANES//,*/}
913+
782914
msg "OCNE Modules deployed in this environment."
783915
olcnectl module instances --api-server "${api_server}:8091" --environment-name "${OCNE_ENV_NAME}"
784916

917+
msg "OCNE Pods deployed in this environment."
918+
ssh vagrant@"${node}" kubectl get pods -A
919+
785920
msg "Your Oracle Cloud Native Environment is operational."
786-
node=${CONTROL_PLANES//,*/}
787921
ssh vagrant@"${node}" kubectl get nodes -o=wide
788922
}
789923

0 commit comments

Comments
 (0)