From 6514e8d60eb3a75c23bc83acfdf8de97494984a3 Mon Sep 17 00:00:00 2001 From: Gregory Giguashvili Date: Tue, 14 Oct 2025 11:43:05 +0300 Subject: [PATCH 1/4] Remove flannel and kube-proxy assets --- assets/optional/flannel/00-namespace.yaml | 15 --- .../optional/flannel/01-service-account.yaml | 5 - assets/optional/flannel/02-cluster-role.yaml | 116 ----------------- .../flannel/03-cluster-role-binding.yaml | 12 -- assets/optional/flannel/04-configmap.yaml | 38 ------ assets/optional/flannel/05-daemonset.yaml | 118 ------------------ .../flannel/kustomization.aarch64.yaml | 8 -- .../flannel/kustomization.x86_64.yaml | 8 -- assets/optional/flannel/kustomization.yaml | 9 -- .../flannel/release-flannel-aarch64.json | 9 -- .../flannel/release-flannel-x86_64.json | 9 -- assets/optional/kube-proxy/00-namespace.yaml | 15 --- .../kube-proxy/01-service-account.yaml | 7 -- .../optional/kube-proxy/02-cluster-role.yaml | 23 ---- .../kube-proxy/03-cluster-role-binding.yaml | 12 -- assets/optional/kube-proxy/04-configmap.yaml | 22 ---- assets/optional/kube-proxy/05-daemonset.yaml | 52 -------- .../kube-proxy/kustomization.aarch64.yaml | 5 - .../kube-proxy/kustomization.x86_64.yaml | 5 - assets/optional/kube-proxy/kustomization.yaml | 9 -- .../release-kube-proxy-aarch64.json | 8 -- .../kube-proxy/release-kube-proxy-x86_64.json | 8 -- 22 files changed, 513 deletions(-) delete mode 100644 assets/optional/flannel/00-namespace.yaml delete mode 100644 assets/optional/flannel/01-service-account.yaml delete mode 100644 assets/optional/flannel/02-cluster-role.yaml delete mode 100644 assets/optional/flannel/03-cluster-role-binding.yaml delete mode 100644 assets/optional/flannel/04-configmap.yaml delete mode 100644 assets/optional/flannel/05-daemonset.yaml delete mode 100644 assets/optional/flannel/kustomization.aarch64.yaml delete mode 100644 assets/optional/flannel/kustomization.x86_64.yaml delete mode 100644 assets/optional/flannel/kustomization.yaml delete mode 100644 assets/optional/flannel/release-flannel-aarch64.json delete mode 100644 assets/optional/flannel/release-flannel-x86_64.json delete mode 100644 assets/optional/kube-proxy/00-namespace.yaml delete mode 100644 assets/optional/kube-proxy/01-service-account.yaml delete mode 100644 assets/optional/kube-proxy/02-cluster-role.yaml delete mode 100644 assets/optional/kube-proxy/03-cluster-role-binding.yaml delete mode 100644 assets/optional/kube-proxy/04-configmap.yaml delete mode 100644 assets/optional/kube-proxy/05-daemonset.yaml delete mode 100644 assets/optional/kube-proxy/kustomization.aarch64.yaml delete mode 100644 assets/optional/kube-proxy/kustomization.x86_64.yaml delete mode 100644 assets/optional/kube-proxy/kustomization.yaml delete mode 100644 assets/optional/kube-proxy/release-kube-proxy-aarch64.json delete mode 100644 assets/optional/kube-proxy/release-kube-proxy-x86_64.json diff --git a/assets/optional/flannel/00-namespace.yaml b/assets/optional/flannel/00-namespace.yaml deleted file mode 100644 index 98e3ef029f..0000000000 --- a/assets/optional/flannel/00-namespace.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: kube-flannel - labels: - name: kube-flannel - openshift.io/run-level: "0" - openshift.io/cluster-monitoring: "true" - pod-security.kubernetes.io/enforce: privileged - pod-security.kubernetes.io/audit: privileged - pod-security.kubernetes.io/warn: privileged - annotations: - openshift.io/node-selector: "" - openshift.io/description: "flannel Kubernetes components" - workload.openshift.io/allowed: "management" diff --git a/assets/optional/flannel/01-service-account.yaml b/assets/optional/flannel/01-service-account.yaml deleted file mode 100644 index 98ecb76d31..0000000000 --- a/assets/optional/flannel/01-service-account.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: flannel - namespace: kube-flannel \ No newline at end of file diff --git a/assets/optional/flannel/02-cluster-role.yaml b/assets/optional/flannel/02-cluster-role.yaml deleted file mode 100644 index a47a3f6ab2..0000000000 --- a/assets/optional/flannel/02-cluster-role.yaml +++ /dev/null @@ -1,116 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: flannel -rules: - - apiGroups: [""] - resources: - - namespaces - - nodes - - pods - verbs: - - get - - list - - patch - - watch - - update - - apiGroups: [""] - resources: - - pods - verbs: - - get - - list - - patch - - watch - - delete - - apiGroups: [""] - resources: - - configmaps - verbs: - - get - - create - - update - - patch - - apiGroups: [""] - resources: - - services - - endpoints - verbs: - - get - - list - - watch - - apiGroups: - - discovery.k8s.io - resources: - - endpointslices - verbs: - - list - - watch - - apiGroups: ["networking.k8s.io"] - resources: - - networkpolicies - verbs: - - get - - list - - watch - - apiGroups: ["", "events.k8s.io"] - resources: - - events - verbs: - - create - - patch - - update - - apiGroups: ["security.openshift.io"] - resources: - - securitycontextconstraints - verbs: - - use - resourceNames: - - privileged - - apiGroups: [""] - resources: - - "nodes/status" - verbs: - - patch - - update - - apiGroups: ["k8s.ovn.org"] - resources: - - egressfirewalls - - egressips - - egressqoses - - adminpolicybasedexternalroutes - verbs: - - get - - list - - watch - - update - - patch - - apiGroups: - - k8s.ovn.org - resources: - - adminpolicybasedexternalroutes/status - verbs: [ "update"] - - apiGroups: ["cloud.network.openshift.io"] - resources: - - cloudprivateipconfigs - verbs: - - create - - patch - - update - - delete - - get - - list - - watch - - apiGroups: ["apiextensions.k8s.io"] - resources: - - customresourcedefinitions - verbs: - - get - - list - - watch - - apiGroups: ['authentication.k8s.io'] - resources: ['tokenreviews'] - verbs: ['create'] - - apiGroups: ['authorization.k8s.io'] - resources: ['subjectaccessreviews'] - verbs: ['create'] \ No newline at end of file diff --git a/assets/optional/flannel/03-cluster-role-binding.yaml b/assets/optional/flannel/03-cluster-role-binding.yaml deleted file mode 100644 index a484da31a4..0000000000 --- a/assets/optional/flannel/03-cluster-role-binding.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: flannel -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: flannel -subjects: - - kind: ServiceAccount - name: flannel - namespace: kube-flannel \ No newline at end of file diff --git a/assets/optional/flannel/04-configmap.yaml b/assets/optional/flannel/04-configmap.yaml deleted file mode 100644 index 30708ed449..0000000000 --- a/assets/optional/flannel/04-configmap.yaml +++ /dev/null @@ -1,38 +0,0 @@ -apiVersion: v1 -data: - cni-conf.json: | - { - "name": "ovn-kubernetes", - "cniVersion": "0.4.0", - "plugins": [ - { - "type": "flannel", - "delegate": { - "hairpinMode": true, - "isDefaultGateway": true - } - }, - { - "type": "portmap", - "capabilities": { - "portMappings": true - } - } - ] - } - net-conf.json: | - { - "Network": "10.42.0.0/24", - "EnableNFTables": false, - "Backend": { - "Type": "vxlan" - } - } -kind: ConfigMap -metadata: - labels: - app: flannel - k8s-app: flannel - tier: node - name: kube-flannel-cfg - namespace: kube-flannel \ No newline at end of file diff --git a/assets/optional/flannel/05-daemonset.yaml b/assets/optional/flannel/05-daemonset.yaml deleted file mode 100644 index f0f99b48d7..0000000000 --- a/assets/optional/flannel/05-daemonset.yaml +++ /dev/null @@ -1,118 +0,0 @@ -apiVersion: apps/v1 -kind: DaemonSet -metadata: - labels: - app: flannel - k8s-app: flannel - tier: node - name: kube-flannel-ds - namespace: kube-flannel -spec: - selector: - matchLabels: - app: flannel - k8s-app: flannel - template: - metadata: - labels: - app: flannel - k8s-app: flannel - tier: node - spec: - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: kubernetes.io/os - operator: In - values: - - linux - containers: - - args: - - --ip-masq - - --kube-subnet-mgr - command: - - /opt/bin/flanneld - env: - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: EVENT_QUEUE_DEPTH - value: "5000" - image: flannel - imagePullPolicy: IfNotPresent - name: kube-flannel - resources: - requests: - cpu: 100m - memory: 50Mi - securityContext: - capabilities: - add: - - NET_ADMIN - - NET_RAW - privileged: false - volumeMounts: - - mountPath: /run/flannel - name: run - - mountPath: /etc/kube-flannel/ - name: flannel-cfg - - mountPath: /run/xtables.lock - name: xtables-lock - hostNetwork: true - initContainers: - - args: - - -f - - /flannel - - /run/cni/bin - command: - - cp - image: flannel-plugin - imagePullPolicy: IfNotPresent - name: install-cni-plugin - volumeMounts: - - mountPath: /run/cni/bin - name: cni-plugin - - args: - - -f - - /etc/kube-flannel/cni-conf.json - - /etc/cni/net.d/10-flannel.conflist - command: - - cp - image: flannel - imagePullPolicy: IfNotPresent - name: install-cni - volumeMounts: - - mountPath: /etc/cni/net.d - name: cni - - mountPath: /etc/kube-flannel/ - name: flannel-cfg - priorityClassName: system-node-critical - serviceAccountName: flannel - tolerations: - - effect: NoSchedule - operator: Exists - volumes: - - hostPath: - path: /run/flannel - name: run - - hostPath: - path: /run/cni/bin - type: DirectoryOrCreate - name: cni-plugin - - hostPath: - path: /etc/cni/net.d - name: cni - - configMap: - name: kube-flannel-cfg - name: flannel-cfg - - hostPath: - path: /run/xtables.lock - type: FileOrCreate - name: xtables-lock \ No newline at end of file diff --git a/assets/optional/flannel/kustomization.aarch64.yaml b/assets/optional/flannel/kustomization.aarch64.yaml deleted file mode 100644 index 781f3357aa..0000000000 --- a/assets/optional/flannel/kustomization.aarch64.yaml +++ /dev/null @@ -1,8 +0,0 @@ - -images: - - name: flannel - newName: docker.io/flannel/flannel - digest: sha256:16fc8a9bc02163d9c02056ec6ac649d47f6f9a5e3adb5c1f2e93b547dba1315f - - name: flannel-plugin - newName: docker.io/flannel/flannel-cni-plugin - digest: sha256:2a6ed38c6f14402aec3433ca0613a3a0e54993d3fa59124687dd94cb39fb59cb \ No newline at end of file diff --git a/assets/optional/flannel/kustomization.x86_64.yaml b/assets/optional/flannel/kustomization.x86_64.yaml deleted file mode 100644 index e0f1d5ce66..0000000000 --- a/assets/optional/flannel/kustomization.x86_64.yaml +++ /dev/null @@ -1,8 +0,0 @@ - -images: - - name: flannel - newName: docker.io/flannel/flannel - digest: sha256:9e0e9170ed1f82029ccc4cf20fb20f6325456ab7a00f0544dc23275f11f8bb1c - - name: flannel-plugin - newName: docker.io/flannel/flannel-cni-plugin - digest: sha256:6e700d30d2c9316b4f54f9d0b1423a2d15290bf082f5d1fbd87f9f25173a374c \ No newline at end of file diff --git a/assets/optional/flannel/kustomization.yaml b/assets/optional/flannel/kustomization.yaml deleted file mode 100644 index 67a36b8090..0000000000 --- a/assets/optional/flannel/kustomization.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -resources: - - 00-namespace.yaml - - 01-service-account.yaml - - 02-cluster-role.yaml - - 03-cluster-role-binding.yaml - - 04-configmap.yaml - - 05-daemonset.yaml diff --git a/assets/optional/flannel/release-flannel-aarch64.json b/assets/optional/flannel/release-flannel-aarch64.json deleted file mode 100644 index 8f04e8f68c..0000000000 --- a/assets/optional/flannel/release-flannel-aarch64.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "release": { - "base": "4.18.0-0.nightly-arm64-2024-08-29-120159" - }, - "images": { - "flannel": "docker.io/flannel/flannel@sha256:16fc8a9bc02163d9c02056ec6ac649d47f6f9a5e3adb5c1f2e93b547dba1315f", - "flannel-plugin": "docker.io/flannel/flannel-cni-plugin@sha256:2a6ed38c6f14402aec3433ca0613a3a0e54993d3fa59124687dd94cb39fb59cb" - } -} diff --git a/assets/optional/flannel/release-flannel-x86_64.json b/assets/optional/flannel/release-flannel-x86_64.json deleted file mode 100644 index eb6df07684..0000000000 --- a/assets/optional/flannel/release-flannel-x86_64.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "release": { - "base": "4.18.0-0.nightly-2024-08-29-020346" - }, - "images": { - "flannel": "docker.io/flannel/flannel@sha256:9e0e9170ed1f82029ccc4cf20fb20f6325456ab7a00f0544dc23275f11f8bb1c", - "flannel-plugin": "docker.io/flannel/flannel-cni-plugin@sha256:6e700d30d2c9316b4f54f9d0b1423a2d15290bf082f5d1fbd87f9f25173a374c" - } -} diff --git a/assets/optional/kube-proxy/00-namespace.yaml b/assets/optional/kube-proxy/00-namespace.yaml deleted file mode 100644 index 99263ff302..0000000000 --- a/assets/optional/kube-proxy/00-namespace.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: kube-proxy - labels: - name: kube-flannel - openshift.io/run-level: "0" - openshift.io/cluster-monitoring: "true" - pod-security.kubernetes.io/enforce: privileged - pod-security.kubernetes.io/audit: privileged - pod-security.kubernetes.io/warn: privileged - annotations: - openshift.io/node-selector: "" - openshift.io/description: "kube-proxy Kubernetes components" - workload.openshift.io/allowed: "management" \ No newline at end of file diff --git a/assets/optional/kube-proxy/01-service-account.yaml b/assets/optional/kube-proxy/01-service-account.yaml deleted file mode 100644 index 9b118afada..0000000000 --- a/assets/optional/kube-proxy/01-service-account.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - k8s-app: kube-proxy - name: kube-proxy - namespace: kube-proxy \ No newline at end of file diff --git a/assets/optional/kube-proxy/02-cluster-role.yaml b/assets/optional/kube-proxy/02-cluster-role.yaml deleted file mode 100644 index ae9c2bb2fc..0000000000 --- a/assets/optional/kube-proxy/02-cluster-role.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: system:kube-proxy -rules: - - apiGroups: - - "" - resources: - - services - - endpoints - - nodes - - configmaps - verbs: - - list - - watch - - get - - apiGroups: ["discovery.k8s.io"] - resources: - - endpointslices - verbs: - - list - - watch - - get \ No newline at end of file diff --git a/assets/optional/kube-proxy/03-cluster-role-binding.yaml b/assets/optional/kube-proxy/03-cluster-role-binding.yaml deleted file mode 100644 index 2edc2f198c..0000000000 --- a/assets/optional/kube-proxy/03-cluster-role-binding.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: system:kube-proxy -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: system:kube-proxy -subjects: - - kind: ServiceAccount - name: kube-proxy - namespace: kube-proxy \ No newline at end of file diff --git a/assets/optional/kube-proxy/04-configmap.yaml b/assets/optional/kube-proxy/04-configmap.yaml deleted file mode 100644 index 0ef2a1b683..0000000000 --- a/assets/optional/kube-proxy/04-configmap.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: v1 -data: - config.conf: | - apiVersion: kubeproxy.config.k8s.io/v1alpha1 - kind: KubeProxyConfiguration - clusterCIDR: 10.42.0.0/16 - mode: iptables - clientConnection: - kubeconfig: /var/lib/kubeconfig - iptables: - masqueradeAll: true - conntrack: - maxPerCore: 0 - featureGates: - AllAlpha: false -kind: ConfigMap -metadata: - labels: - app: kube-proxy - k8s-app: kube-proxy - name: kube-proxy - namespace: kube-proxy \ No newline at end of file diff --git a/assets/optional/kube-proxy/05-daemonset.yaml b/assets/optional/kube-proxy/05-daemonset.yaml deleted file mode 100644 index cf8bdaa0e1..0000000000 --- a/assets/optional/kube-proxy/05-daemonset.yaml +++ /dev/null @@ -1,52 +0,0 @@ -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: kube-proxy - namespace: kube-proxy -spec: - selector: - matchLabels: - k8s-app: kube-proxy - template: - metadata: - labels: - k8s-app: kube-proxy - spec: - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: kubernetes.io/os - operator: In - values: - - linux - serviceAccountName: kube-proxy # Reference the Service Account here - containers: - - name: kube-proxy - image: kube-proxy - command: - - /usr/bin/kube-proxy - - --config=/var/lib/kube-proxy/config.conf - volumeMounts: - - name: config - mountPath: /var/lib/kube-proxy/ - readOnly: true - - name: kubeconfig - mountPath: /var/lib/kubeconfig - readOnly: true - securityContext: - privileged: true - hostNetwork: true # Allows the pod to use the host network - dnsPolicy: ClusterFirstWithHostNet - tolerations: - - effect: NoSchedule - operator: Exists - volumes: - - name: config - configMap: - name: kube-proxy - - hostPath: - path: /var/lib/microshift/resources/kubeadmin/kubeconfig - type: FileOrCreate - name: kubeconfig \ No newline at end of file diff --git a/assets/optional/kube-proxy/kustomization.aarch64.yaml b/assets/optional/kube-proxy/kustomization.aarch64.yaml deleted file mode 100644 index d344a75559..0000000000 --- a/assets/optional/kube-proxy/kustomization.aarch64.yaml +++ /dev/null @@ -1,5 +0,0 @@ - -images: - - name: kube-proxy - newName: quay.io/openshift-release-dev/ocp-v4.0-art-dev - digest: sha256:d905190fda655103fda2ebbf983178e44825ea03897178df61ce3ef3f1b2acba \ No newline at end of file diff --git a/assets/optional/kube-proxy/kustomization.x86_64.yaml b/assets/optional/kube-proxy/kustomization.x86_64.yaml deleted file mode 100644 index 5b5badbec2..0000000000 --- a/assets/optional/kube-proxy/kustomization.x86_64.yaml +++ /dev/null @@ -1,5 +0,0 @@ - -images: - - name: kube-proxy - newName: quay.io/openshift-release-dev/ocp-v4.0-art-dev - digest: sha256:f49a7ed4d131447243e717e250b0a148b4aabea75a6ded5b011db4fde8a714d2 \ No newline at end of file diff --git a/assets/optional/kube-proxy/kustomization.yaml b/assets/optional/kube-proxy/kustomization.yaml deleted file mode 100644 index 67a36b8090..0000000000 --- a/assets/optional/kube-proxy/kustomization.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -resources: - - 00-namespace.yaml - - 01-service-account.yaml - - 02-cluster-role.yaml - - 03-cluster-role-binding.yaml - - 04-configmap.yaml - - 05-daemonset.yaml diff --git a/assets/optional/kube-proxy/release-kube-proxy-aarch64.json b/assets/optional/kube-proxy/release-kube-proxy-aarch64.json deleted file mode 100644 index 7147f3ac74..0000000000 --- a/assets/optional/kube-proxy/release-kube-proxy-aarch64.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "release": { - "base": "4.18.0-0.nightly-arm64-2024-08-29-120159" - }, - "images": { - "kube-proxy": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:d905190fda655103fda2ebbf983178e44825ea03897178df61ce3ef3f1b2acba" - } -} \ No newline at end of file diff --git a/assets/optional/kube-proxy/release-kube-proxy-x86_64.json b/assets/optional/kube-proxy/release-kube-proxy-x86_64.json deleted file mode 100644 index 182c1c9beb..0000000000 --- a/assets/optional/kube-proxy/release-kube-proxy-x86_64.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "release": { - "base": "4.18.0-0.nightly-arm64-2024-08-29-120159" - }, - "images": { - "kube-proxy": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:f49a7ed4d131447243e717e250b0a148b4aabea75a6ded5b011db4fde8a714d2" - } -} From 30c655bd3b8e1412366277229fbf14ae8192e108 Mon Sep 17 00:00:00 2001 From: Gregory Giguashvili Date: Tue, 14 Oct 2025 11:43:22 +0300 Subject: [PATCH 2/4] Remove okd sources --- okd/src/README.md | 68 --------------- okd/src/configure.sh | 8 -- okd/src/create_repos.sh | 27 ------ .../microshift-okd-multi-build.Containerfile | 77 ----------------- okd/src/use_okd_assets.sh | 86 ------------------- 5 files changed, 266 deletions(-) delete mode 100644 okd/src/README.md delete mode 100644 okd/src/configure.sh delete mode 100644 okd/src/create_repos.sh delete mode 100644 okd/src/microshift-okd-multi-build.Containerfile delete mode 100755 okd/src/use_okd_assets.sh diff --git a/okd/src/README.md b/okd/src/README.md deleted file mode 100644 index 4b6723e3c9..0000000000 --- a/okd/src/README.md +++ /dev/null @@ -1,68 +0,0 @@ -## Build and Run Microshift upstream without subscription/pull-secret - -- building the container with podman multistage build : - ```bash - git clone https://github.com/openshift/microshift.git ~/microshift - ``` - To use OVN-K as CNI - ```bash - cd ~/microshift && sudo podman build -f okd/src/microshift-okd-multi-build.Containerfile . -t microshift-okd - ``` - To use flannel as CNI - ```bash - cd ~/microshift && sudo podman build --env WITH_FLANNEL=1 -f okd/src/microshift-okd-multi-build.Containerfile . -t microshift-okd - ``` - To embed all component images - ```bash - cd ~/microshift && sudo podman build --env EMBED_CONTAINER_IMAGES=1 -f okd/src/microshift-okd-multi-build.Containerfile . -t microshift-okd - ``` - - build runnable container based on current source: - 1. replace microshift assets images to OKD upstream images - 1. will build microshift RPMs and repo based on current sources. - 1. will build micrsoshift_okd bootc container based on `centos-bootc:stream9` - 1. apply upstream customization (see below) - -- running the container with ovn-kubernetes - - make sure to load the openvswitch kernel module : - > `sudo modprobe openvswitch` - - - run the container : - > `sudo podman run --privileged --rm --name microshift-okd -d microshift-okd` - -- connect to the container - > `sudo podman exec -ti microshift-okd /bin/bash` - -- verify everything is working: - ```bash - export KUBECONFIG=/var/lib/microshift/resources/kubeadmin/kubeconfig - > oc get nodes - NAME STATUS ROLES AGE VERSION - d2877aa41787 Ready control-plane,master,worker 7m39s v1.30.3 - - > oc get pods - NAMESPACE NAME READY STATUS RESTARTS AGE - kube-system csi-snapshot-controller-7d6c78bc58-5p7tb 1/1 Running 0 8m52s - openshift-dns dns-default-2q89q 2/2 Running 0 7m34s - openshift-dns node-resolver-k2c5h 1/1 Running 0 8m54s - openshift-ingress router-default-db4b598b9-x8lvb 1/1 Running 0 8m52s - openshift-ovn-kubernetes ovnkube-master-c75c7 4/4 Running 1 (7m36s ago) 8m54s - openshift-ovn-kubernetes ovnkube-node-jfx86 1/1 Running 0 8m54s - openshift-service-ca service-ca-68d58669f8-rns2p 1/1 Running 0 8m51s - - - ``` - -## configuration customization -1. storage driver disabled (there is no lvms images upstream) - will be added in the stage of the project. - -## current state -- storage driver is disabled , will be added in the stage of the project. -- TODO: create rebase automation from OKD sources - -## known Issues -- when running `podman build` without sudo - ``` - make: *** [/src/vendor/github.com/openshift/build-machinery-go/make/targets/golang/build.mk:16: build] Error 1 - Error: building at STEP "RUN make build": while running runtime: exit status 2 - ``` - diff --git a/okd/src/configure.sh b/okd/src/configure.sh deleted file mode 100644 index 248ebece24..0000000000 --- a/okd/src/configure.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - - cat > /etc/microshift/config.yaml < "${USHIFT_LOCAL_REPO_FILE}" < "${OCP_MIRROR_REPO_FILE}" </etc/sudoers.d/microshift && \ - chmod 0640 /etc/shadow -COPY . /src -RUN chown -R microshift:microshift /microshift /src - -USER 1000:1000 -WORKDIR /src -# Preparing for the build -RUN echo '{"auths":{"fake":{"auth":"aWQ6cGFzcwo="}}}' > /tmp/.pull-secret && \ - /src/scripts/devenv-builder/configure-vm.sh --no-build --no-set-release-version --skip-dnf-update /tmp/.pull-secret && \ - /src/okd/src/use_okd_assets.sh --replace ${OKD_REPO} ${OKD_VERSION_TAG} - -# Building Microshift RPMs and local repo -RUN make build && \ - make rpm && \ - createrepo ${REPO_DIR} - -# Building microshift container from local rpms -FROM quay.io/centos-bootc/centos-bootc:stream9 -ARG REPO_CONFIG_SCRIPT=/tmp/create_repos.sh -ARG OKD_CONFIG_SCRIPT=/tmp/configure.sh -ARG USHIFT_RPM_REPO_NAME=microshift-local -ARG USHIFT_RPM_REPO_PATH=/tmp/rpm-repo - -ENV KUBECONFIG=/var/lib/microshift/resources/kubeadmin/kubeconfig -COPY --chmod=755 ./okd/src/create_repos.sh ${REPO_CONFIG_SCRIPT} -COPY --chmod=755 ./okd/src/configure.sh ${OKD_CONFIG_SCRIPT} -COPY --from=builder /src/_output/rpmbuild/RPMS ${USHIFT_RPM_REPO_PATH} - -# Installing MicroShift and cleanup -# In case of flannel we don't need openvswitch service which is by default enabled as part -# once microshift is installed so better to disable it because it cause issue when required -# module is not enabled. -RUN ${REPO_CONFIG_SCRIPT} ${USHIFT_RPM_REPO_PATH} && \ - dnf install -y microshift microshift-release-info && \ - if [ "$WITH_FLANNEL" -eq 1 ]; then \ - dnf install -y microshift-flannel; \ - systemctl disable openvswitch; \ - fi && \ - ${REPO_CONFIG_SCRIPT} -delete && \ - rm -f ${REPO_CONFIG_SCRIPT} && \ - rm -rf $USHIFT_RPM_REPO_PATH && \ - dnf clean all - -RUN ${OKD_CONFIG_SCRIPT} && rm -rf ${OKD_CONFIG_SCRIPT} - -# If the EMBED_CONTAINER_IMAGES environment variable is set to 1: -# 1. Temporarily configure user namespace UID and GID mappings by writing to /etc/subuid and /etc/subgid and clean it later -# - This allows the skopeo command to operate properly which requires user namespace support. -# - Without it following error occur during image build -# - FATA[0129] copying system image from manifest list:[...]unpacking failed (error: exit status 1; output: potentially insufficient UIDs or GIDs available[...] -# 2. Extract the list of image URLs from a JSON file (`release-$(uname -m).json`) while excluding the "lvms_operator" image. -# - `lvms_operator` image is excluded because it is not available upstream -RUN if [ "$EMBED_CONTAINER_IMAGES" -eq 1 ]; then \ - echo "root:100000:65536" > /etc/subuid; \ - echo "root:100000:65536" > /etc/subgid; \ - jq -r '.images | to_entries | map(select(.key != "lvms_operator")) | .[].value' /usr/share/microshift/release/release-$(uname -m).json | xargs -n 1 -I {} skopeo copy docker://{} containers-storage:{}; \ - rm -f /etc/subuid /etc/subgid; \ - fi - -# Create a systemd unit to recursively make the root filesystem subtree -# shared as required by OVN images -COPY ./packaging/imagemode/systemd/microshift-make-rshared.service /etc/systemd/system/microshift-make-rshared.service -RUN systemctl enable microshift-make-rshared.service diff --git a/okd/src/use_okd_assets.sh b/okd/src/use_okd_assets.sh deleted file mode 100755 index c8d67e1c82..0000000000 --- a/okd/src/use_okd_assets.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -set -eo pipefail - -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -MICROSHIFT_ROOT="${SCRIPTDIR}/../.." - -declare -A UNAME_TO_GOARCH_MAP=( ["x86_64"]="amd64" ["aarch64"]="arm64" ) - - -verify(){ - local -r okd_url=$1 - local -r okd_releaseTag=$2 - - #stdout=$(oc adm release info "${okd_url}:${okd_releaseTag}" 2>&1) - if ! stdout=$(oc adm release info "${okd_url}:${okd_releaseTag}" 2>&1) ; then - echo -e "error verifying okd release (URL: ${okd_url} , TAG: ${okd_releaseTag}) \nERROR: ${stdout}" - exit 1 - fi -} - -replace_assets(){ - local -r okd_url=$1 - local -r okd_releaseTag=$2 - local -r arch=$(uname -m) - local -r temp_release_json=$(mktemp "/tmp/release-${arch}.XXXXX.json") - - oc adm release info --image-for="${op}" "${okd_url}:${okd_releaseTag}" - - # replace Microshift images with upstream (from OKD release) - for op in $(jq -e -r '.images | keys []' "${MICROSHIFT_ROOT}/assets/release/release-${arch}.json") - do - local image - image=$(oc adm release info --image-for="${op}" "${okd_url}:${okd_releaseTag}" || true) - if [ -n "${image}" ] ; then - echo "${op} ${image}" - jq --arg a "${op}" --arg b "${image}" '.images[$a] = $b' "${MICROSHIFT_ROOT}/assets/release/release-${arch}.json" >"${temp_release_json}" - mv "${temp_release_json}" "${MICROSHIFT_ROOT}/assets/release/release-${arch}.json" - fi - done - - pod_image=$(oc adm release info --image-for=pod "${okd_url}:${okd_releaseTag}" || true) - # update the infra pods for crio - sed -i 's,pause_image .*,pause_image = '"\"${pod_image}\""',' "packaging/crio.conf.d/10-microshift_${UNAME_TO_GOARCH_MAP[${arch}]}.conf" - - # kube proxy is required for flannel - kube_proxy_okd_image_with_hash=$(oc adm release info --image-for="kube-proxy" "${okd_url}:${okd_releaseTag}") - echo "kube-proxy ${kube_proxy_okd_image_with_hash}" - # The OKD image we retrieve is in the format quay.io/okd/scos-content@sha256:, - # where the image name and digest (hash) are combined in a single string. - # However, in the kustomization.${arch}.yaml file, we need the image name (newName) and - # the digest in separate fields. To achieve this, we first extract the image name and digest - # using parameter expansion, then use the yq command to insert these values into the - # appropriate places within the YAML file. - kube_proxy_okd_image_name="${kube_proxy_okd_image_with_hash%%@*}" - kube_proxy_okd_image_hash="${kube_proxy_okd_image_with_hash##*@}" - # install yq tool to update the image and hash - "${MICROSHIFT_ROOT}"/scripts/fetch_tools.sh yq - "${MICROSHIFT_ROOT}"/_output/bin/yq eval ".images[] |= select(.name == \"kube-proxy\") |= (.newName = \"${kube_proxy_okd_image_name}\" | .digest = \"${kube_proxy_okd_image_hash}\")" -i "${MICROSHIFT_ROOT}/assets/optional/kube-proxy/kustomization.${arch}.yaml" -} - -usage() { - echo "Usage:" - echo "$(basename "$0") --verify OKD_URL RELEASE_TAG verify upstream release" - echo "$(basename "$0") --replace OKD_URL RELEASE_TAG replace microshift assets with upstream images" - exit 1 -} - -if [ $# -eq 3 ] ; then - case "$1" in - --replace) - verify "$2" "$3" - replace_assets "$2" "$3" - ;; - --verify) - verify "$2" "$3" - ;; - *) - usage - ;; - esac -else - usage -fi - - From 0164b903eb4dc2eb8072e79c8853382bd3d26ead Mon Sep 17 00:00:00 2001 From: Gregory Giguashvili Date: Tue, 14 Oct 2025 11:43:52 +0300 Subject: [PATCH 3/4] Remove flannel and kube-proxy from auto-rebase --- scripts/auto-rebase/assets.yaml | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/scripts/auto-rebase/assets.yaml b/scripts/auto-rebase/assets.yaml index 8df9848874..54023678c9 100644 --- a/scripts/auto-rebase/assets.yaml +++ b/scripts/auto-rebase/assets.yaml @@ -265,33 +265,3 @@ assets: - file: 07-daemonset-dhcp.yaml - file: release-multus-aarch64.json - file: release-multus-x86_64.json - - - dir: optional/flannel/ - ignore: "they don't exist in upstream repository - only in microshift" - files: - - file: kustomization.yaml - - file: kustomization.aarch64.yaml - - file: kustomization.x86_64.yaml - - file: 00-namespace.yaml - - file: 01-service-account.yaml - - file: 02-cluster-role.yaml - - file: 03-cluster-role-binding.yaml - - file: 04-configmap.yaml - - file: 05-daemonset.yaml - - file: release-flannel-aarch64.json - - file: release-flannel-x86_64.json - - - dir: optional/kube-proxy/ - ignore: "they don't exist in upstream repository - only in microshift" - files: - - file: kustomization.yaml - - file: kustomization.aarch64.yaml - - file: kustomization.x86_64.yaml - - file: 00-namespace.yaml - - file: 01-service-account.yaml - - file: 02-cluster-role.yaml - - file: 03-cluster-role-binding.yaml - - file: 04-configmap.yaml - - file: 05-daemonset.yaml - - file: release-kube-proxy-aarch64.json - - file: release-kube-proxy-x86_64.json From 009c88bb933f079cb4d705dcdfa577ab8dc5df54 Mon Sep 17 00:00:00 2001 From: Gregory Giguashvili Date: Tue, 14 Oct 2025 11:44:20 +0300 Subject: [PATCH 4/4] Remove flannel and kube-proxy from build and packaging procedures --- Makefile | 4 - packaging/flannel/00-disableDefaultCNI.yaml | 7 -- packaging/flannel/microshift-flannel.service | 28 ------- packaging/rpm/make-rpm.sh | 4 +- packaging/rpm/microshift.spec | 80 -------------------- test/bin/ci_phase_iso_build.sh | 2 +- 6 files changed, 3 insertions(+), 122 deletions(-) delete mode 100644 packaging/flannel/00-disableDefaultCNI.yaml delete mode 100644 packaging/flannel/microshift-flannel.service diff --git a/Makefile b/Makefile index aa42e898f8..3b54d3b59a 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,6 @@ PATCH := $(shell echo $(SOURCE_GIT_TAG) | awk -F'[._~-]' '{print $$3}') SRC_ROOT :=$(shell pwd) -WITH_FLANNEL ?= 0 OUTPUT_DIR :=_output RPM_BUILD_DIR :=$(OUTPUT_DIR)/rpmbuild CROSS_BUILD_BINDIR :=$(OUTPUT_DIR)/bin @@ -274,7 +273,6 @@ rpm: SOURCE_GIT_TAG=${SOURCE_GIT_TAG} \ SOURCE_GIT_COMMIT=${SOURCE_GIT_COMMIT} \ SOURCE_GIT_TREE_STATE=${SOURCE_GIT_TREE_STATE} \ - WITH_FLANNEL=${WITH_FLANNEL} \ ./packaging/rpm/make-rpm.sh rpm local .PHONY: rpm @@ -284,7 +282,6 @@ srpm: SOURCE_GIT_TAG=${SOURCE_GIT_TAG} \ SOURCE_GIT_COMMIT=${SOURCE_GIT_COMMIT} \ SOURCE_GIT_TREE_STATE=${SOURCE_GIT_TREE_STATE} \ - WITH_FLANNEL=${WITH_FLANNEL} \ ./packaging/rpm/make-rpm.sh srpm local .PHONY: srpm @@ -301,7 +298,6 @@ rpm-podman: --rm -i \ --volume $$(pwd):/opt/microshift:z \ --env TARGET_ARCH=$(TARGET_ARCH) \ - --env WITH_FLANNEL=$(WITH_FLANNEL) \ microshift-builder:$(RPM_BUILDER_IMAGE_TAG) \ bash -ilc 'cd /opt/microshift && make rpm & pid=$$! ; \ trap "echo Killing make PID $${pid}; kill $${pid}" INT ; \ diff --git a/packaging/flannel/00-disableDefaultCNI.yaml b/packaging/flannel/00-disableDefaultCNI.yaml deleted file mode 100644 index e368f3a88d..0000000000 --- a/packaging/flannel/00-disableDefaultCNI.yaml +++ /dev/null @@ -1,7 +0,0 @@ -network: - # CNIPlugin is a user defined string value matching one of the above CNI values. MicroShift uses this - # value to decide whether to deploy the OVN-K as default CNI. An unset field defaults to "" during yaml parsing, and thus - # could mean that the cluster has been upgraded. In order to support the existing out-of-box behavior, MicroShift - # assumes an empty string to mean the OVN-K should be deployed. - # Allowed values are: unset or one of ["", "ovnk", "none"] - cniPlugin: "none" diff --git a/packaging/flannel/microshift-flannel.service b/packaging/flannel/microshift-flannel.service deleted file mode 100644 index a33b5a3ae8..0000000000 --- a/packaging/flannel/microshift-flannel.service +++ /dev/null @@ -1,28 +0,0 @@ -[Unit] -Description=MicroShift -Wants=network-online.target crio.service -After=network-online.target crio.service - -# Control shutdown order by declaring this service to start Before the kubepods.slice -# transient systemd unit; this makes system shutdown delay MicroShift shutdown until -# all the pod containers are down. This is important because some services need to talk -# to the MicroShift API during shutdown (i.e. releasing leader election locks or cleaning -# up other resources) MicroShift restart or manual stop will not stop the kubepods. -Before=kubepods.slice - -[Service] -WorkingDirectory=/usr/bin/ -ExecStart=microshift run -Restart=always -User=root -Type=notify -Delegate=yes -CPUAccounting=yes -BlockIOAccounting=yes -MemoryAccounting=yes -LimitNOFILE=1048576 -TimeoutStartSec=4m - -[Install] -WantedBy=multi-user.target -Also=microshift-cleanup-kubelet.service diff --git a/packaging/rpm/make-rpm.sh b/packaging/rpm/make-rpm.sh index 65022ebd77..f28b670ba1 100755 --- a/packaging/rpm/make-rpm.sh +++ b/packaging/rpm/make-rpm.sh @@ -2,7 +2,7 @@ set -e -o pipefail # must be passed down to this script from Makefile -ENV_VARS="MICROSHIFT_VERSION RPM_RELEASE SOURCE_GIT_TAG SOURCE_GIT_TREE_STATE WITH_FLANNEL" +ENV_VARS="MICROSHIFT_VERSION RPM_RELEASE SOURCE_GIT_TAG SOURCE_GIT_TREE_STATE" for env in ${ENV_VARS} ; do if [[ -z "${!env}" ]] ; then echo "Error: Mandatory environment variable '${env}' is missing" @@ -68,7 +68,7 @@ EOF # algorithm. # shellcheck disable=SC2086 # We want word splitting to happen with RPMBUILD_OPT for flags to be interpreted correctly - rpmbuild --quiet ${RPMBUILD_OPT} --define "_topdir ${RPMBUILD_DIR}" --define "_binary_payload w19T8.zstdio" --define "with_flannel ${WITH_FLANNEL}" "${RPMBUILD_DIR}"SPECS/microshift.spec + rpmbuild --quiet ${RPMBUILD_OPT} --define "_topdir ${RPMBUILD_DIR}" --define "_binary_payload w19T8.zstdio" "${RPMBUILD_DIR}"SPECS/microshift.spec } print_info() { diff --git a/packaging/rpm/microshift.spec b/packaging/rpm/microshift.spec index 2df94f88fc..b11ee65df4 100644 --- a/packaging/rpm/microshift.spec +++ b/packaging/rpm/microshift.spec @@ -35,9 +35,6 @@ # Git related details %global shortcommit %(c=%{commit}; echo ${c:0:7}) -# Don't build flannel subpackage by default -%{!?with_flannel: %global with_flannel 0} - Name: microshift Version: %{version} Release: %{release}%{dist} @@ -170,28 +167,6 @@ The microshift-multus-release-info package provides release information files fo release. These files contain the list of container image references used by the Multus CNI for MicroShift and can be used to embed those images into osbuilder blueprints. -%if %{with_flannel} -%package flannel -Summary: flannel CNI for MicroShift -ExclusiveArch: x86_64 aarch64 -Requires: microshift = %{version} - -%description flannel -The microshift-flannel package provides the required manifests for the flannel CNI and the dependent -kube-proxy to be installed on MicroShift. - -%package flannel-release-info -Summary: Release information for flannel CNI for MicroShift -BuildArch: noarch -Requires: microshift-release-info = %{version} - -%description flannel-release-info -The microshift-flannel-release-info package provides release information files for this -release. These files contain the list of container image references used by the flannel CNI -with the dependent kube-proxy for MicroShift and can be used to embed those images -into osbuilder blueprints. -%endif - %package low-latency Summary: Baseline configuration for running low latency workload on MicroShift BuildArch: noarch @@ -406,47 +381,6 @@ cat assets/optional/multus/kustomization.x86_64.yaml >> %{buildroot}/%{_prefix}/ mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release install -p -m644 assets/optional/multus/release-multus-{x86_64,aarch64}.json %{buildroot}%{_datadir}/microshift/release/ -%if %{with_flannel} -# kube-proxy -install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy -# Copy all the manifests except the arch specific ones -install -p -m644 assets/optional/kube-proxy/0* %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy -install -p -m644 assets/optional/kube-proxy/kustomization.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy - -%ifarch %{arm} aarch64 -cat assets/optional/kube-proxy/kustomization.aarch64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy/kustomization.yaml -%endif - -%ifarch x86_64 -cat assets/optional/kube-proxy/kustomization.x86_64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy/kustomization.yaml -%endif - -# kube-proxy-release-info -mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release -install -p -m644 assets/optional/kube-proxy/release-kube-proxy-{x86_64,aarch64}.json %{buildroot}%{_datadir}/microshift/release/ - -# flannel -install -d -m755 %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel -install -d -m755 %{buildroot}%{_sysconfdir}/systemd/system -# Copy all the manifests except the arch specific ones -install -p -m644 assets/optional/flannel/0* %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel -install -p -m644 assets/optional/flannel/kustomization.yaml %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel -install -p -m644 packaging/flannel/00-disableDefaultCNI.yaml %{buildroot}%{_sysconfdir}/microshift/config.d/00-disableDefaultCNI.yaml -install -p -m644 packaging/flannel/microshift-flannel.service %{buildroot}%{_sysconfdir}/systemd/system/microshift.service - -%ifarch %{arm} aarch64 -cat assets/optional/flannel/kustomization.aarch64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel/kustomization.yaml -%endif - -%ifarch x86_64 -cat assets/optional/flannel/kustomization.x86_64.yaml >> %{buildroot}/%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel/kustomization.yaml -%endif - -# flannel-release-info -mkdir -p -m755 %{buildroot}%{_datadir}/microshift/release -install -p -m644 assets/optional/flannel/release-flannel-{x86_64,aarch64}.json %{buildroot}%{_datadir}/microshift/release/ -%endif - # cleanup kubelet install -p -m644 packaging/tuned/microshift-cleanup-kubelet.service %{buildroot}%{_unitdir}/microshift-cleanup-kubelet.service @@ -617,20 +551,6 @@ fi %files multus-release-info %{_datadir}/microshift/release/release-multus-{x86_64,aarch64}.json -%if %{with_flannel} -%files flannel -%dir %{_prefix}/lib/microshift/manifests.d/000-microshift-flannel -%dir %{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy -%{_prefix}/lib/microshift/manifests.d/000-microshift-flannel/* -%{_prefix}/lib/microshift/manifests.d/000-microshift-kube-proxy/* -%config(noreplace) %{_sysconfdir}/microshift/config.d/00-disableDefaultCNI.yaml -%{_sysconfdir}/systemd/system/microshift.service - -%files flannel-release-info -%{_datadir}/microshift/release/release-flannel-{x86_64,aarch64}.json -%{_datadir}/microshift/release/release-kube-proxy-{x86_64,aarch64}.json -%endif - %files low-latency %{_prefix}/lib/tuned/microshift-baseline %config(noreplace) %{_sysconfdir}/tuned/microshift-baseline-variables.conf diff --git a/test/bin/ci_phase_iso_build.sh b/test/bin/ci_phase_iso_build.sh index f9b2bea77c..ba07d1b68f 100755 --- a/test/bin/ci_phase_iso_build.sh +++ b/test/bin/ci_phase_iso_build.sh @@ -125,7 +125,7 @@ cd "${ROOTDIR}/test/" source "${SCRIPTDIR}/common.sh" # Re-build from source. -$(dry_run) env WITH_FLANNEL=1 bash -x ./bin/build_rpms.sh +$(dry_run) bash -x ./bin/build_rpms.sh if ${COMPOSER_CLI_BUILDS} ; then # Determine and create the ideal number of workers