Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .werf/consts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
{{- $versions := dict }}
{{- $_ := set $versions "UTIL_LINUX" "v2.39.3" }}
{{- $_ := set $versions "DRBD" "9.2.13" }}
{{- $_ := set $versions "DRBD_9_2_14" "9.2.14" }}
{{- $_ := set $versions "DRBD_REACTOR" "1.8.0" }}
{{- $_ := set $versions "DRBD_UTILS" "9.30.0" }}
{{- $_ := set $versions "LINSTOR_AFFINITY_CONTROLLER" "0.3.0" }}
Expand Down
18 changes: 18 additions & 0 deletions images/drbd-9-2-14/scripts/install
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash
# Copyright 2023 Flant JSC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

rm -rf /opt/deckhouse/drbd
cp -r drbd /opt/deckhouse/

17 changes: 17 additions & 0 deletions images/drbd-9-2-14/scripts/uninstall
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash
# Copyright 2023 Flant JSC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

rm -rf /opt/deckhouse/drbd

57 changes: 57 additions & 0 deletions images/drbd-9-2-14/werf.inc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
image: {{ $.ImageName }}-artifact
fromImage: builder/alt
final: false
git:
- add: /images/{{ $.ImageName }}/scripts
to: /scripts
stageDependencies:
beforeSetup:
- "**/*"
shell:
beforeInstall:
- export DEBIAN_FRONTEND=noninteractive
- |
apt-get update \
&& apt-get -y install {{ $.Root.BUILD_PACKAGES }} \
&& apt-get -y install ca-certificates \
&& update-ca-trust
- {{ $.Root.ALT_CLEANUP_CMD }}
- git config --global user.email "builder@deckhouse.io"
- git config --global user.name "deckhouse"
install:
{{- $ctx := dict }}
{{- include "utils:prepare-rpm-build" $ctx | nindent 2 }}
beforeSetup:
- mv /scripts/* /
- chmod +x /install
- chmod +x /uninstall
setup:
- git clone --depth 1 --branch drbd-{{ $.Versions.DRBD_9_2_14 }} {{ $.Root.SOURCE_REPO }}/LINBIT/drbd.git /drbd
- cd /drbd
- git submodule update --init --recursive
- sed -e "s/\<curl\>/d8-curl -k/g" -i /drbd/drbd/drbd-kernel-compat/gen_compat_patch.sh
- git commit -am 'd8-curl'
# tarball required by spaas image
- make tarball
# disable use of local spatch (see /drbd/drbd/drbd-kernel-compat/gen_compat_patch.sh)
- rm -rf .git
---
image: {{ $.ImageName }}
fromImage: base/distroless

import:
- image: {{ $.ImageName }}-artifact
add: /
to: /
includePaths:
- drbd
- install
- uninstall
before: setup
docker:
LABEL:
distro: all
version: all
drbd: {{ $.Versions.DRBD_9_2_14 }}

68 changes: 24 additions & 44 deletions templates/nodegroupconfiguration-drbd-install-altlinux-like.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,42 +25,33 @@ spec:
# data nodes checksum to force bashible execution on nodes list change
# {{ $.Values.sdsReplicatedVolume.internal.dataNodesChecksum }}

# Unpack package from module image and run install script
# bb-rp-from-module-image-install package:digest registry_auth scheme registry_address registry_path
bb-rp-from-module-image-install() {
local MODULE_PACKAGE=$1
local REGISTRY_AUTH=$2
local SCHEME=$3
local REGISTRY_ADDRESS=$4
local REGISTRY_PATH=$5

bb-rp-install $MODULE_PACKAGE
}

kubeconfig="/etc/kubernetes/kubelet.conf"

kernel_version_in_use="$(uname -r)"
# Extract major.minor.patch from kernel version (e.g., "6.14.0-generic" -> "6.14.0")
kernel_version_semver="$(echo "$kernel_version_in_use" | grep -oE '^[0-9]+\.[0-9]+\.[0-9]+')"

CLUSTER_DNS="{{ .Values.global.discovery.clusterDNSAddress }}"
SPAAS_FQDN="spaas.d8-{{ .Chart.Name }}.svc.{{ .Values.global.discovery.clusterDomain }}"

MODULE_REGISTRY_AUTH="$(echo {{ .Values.sdsReplicatedVolume.registry.dockercfg }} | base64 -d | jq -r '.auths[].auth // ""' | base64 -d)"
{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.58" .Values.global.deckhouseVersion) }}
MODULE_SCHEME="{{ .Values.sdsReplicatedVolume.registry.scheme }}"
{{- else }}
MODULE_SCHEME="{{ .Values.sdsReplicatedVolume.registryScheme }}"
{{- end }}
MODULE_REGISTRY_ADDRESS=$(echo {{ .Values.sdsReplicatedVolume.registry.base }} | cut -f 1 -d '/')
MODULE_REGISTRY_PATH="/"$(echo {{ .Values.sdsReplicatedVolume.registry.base }} | cut -f 2- -d '/')"/sds-replicated-volume"
MODULE_REPOSITORY="{{ .Values.sdsReplicatedVolume.registry.base }}"

# Install semver tool for version comparisons
bb-package-module-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"

# Select DRBD version based on kernel version
# Kernel >= 6.14 requires DRBD 9.2.14, otherwise use 9.2.13
if [ "$(d8-semver compare $kernel_version_semver 6.14.0)" != "-1" ]; then
DRBD_IMAGE_NAME="drbd9214"
DRBD_DESIRED_VERSION="9.2.14"
else
DRBD_IMAGE_NAME="drbd"
DRBD_DESIRED_VERSION="{{ $.Values.sdsReplicatedVolume.internal.drbdVersion }}"
fi

is_master=$(bb-kubectl --kubeconfig $kubeconfig get node "$(hostname)" -o json | jq -c '.metadata.labels | contains({"node-role.kubernetes.io/control-plane": ""})')
if [ $is_master == "true" ]; then
{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.63" .Values.global.deckhouseVersion) }}
bb-package-module-install "serviceScripts:{{ include "helm_lib_module_image_digest" (list . "serviceScripts" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
{{- else }}
bb-rp-from-module-image-install "serviceScripts:{{ include "helm_lib_module_image_digest" (list . "serviceScripts" "sdsReplicatedVolume") }}" "$MODULE_REGISTRY_AUTH" "$MODULE_SCHEME" "$MODULE_REGISTRY_ADDRESS" "$MODULE_REGISTRY_PATH"
{{- end }}
fi

is_linstor_data_node=$(bb-kubectl --kubeconfig $kubeconfig get node "$(hostname)" -o json | jq -c '.metadata.labels | contains({"storage.deckhouse.io/sds-replicated-volume-node":""})')
Expand Down Expand Up @@ -103,7 +94,7 @@ spec:
# DRBD check version

current_version="$(cat /proc/drbd | grep 'version:' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
desired_version="{{ $.Values.sdsReplicatedVolume.internal.drbdVersion }}"
desired_version="$DRBD_DESIRED_VERSION"

# We expect the loaded DRBD module to be version 9.
# If version 8 is loaded, it means that for some reason, the in-tree kernel module has been automatically loaded.
Expand All @@ -115,12 +106,6 @@ spec:
rmmod drbd || true
fi

{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.63" .Values.global.deckhouseVersion) }}
bb-package-module-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
{{- else }}
bb-rp-from-module-image-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REGISTRY_AUTH" "$MODULE_SCHEME" "$MODULE_REGISTRY_ADDRESS" "$MODULE_REGISTRY_PATH"
{{- end }}

if [ "$(d8-semver compare $current_version $desired_version)" == "-1" ]; then
bb-log-info "DRBD needs to be rebuilt"
else
Expand All @@ -140,15 +125,16 @@ spec:
apt-get -y install make gcc bind-utils patch mokutil
check_sb_state="$(mokutil --sb-state || echo "Not supported")"
if [[ "$check_sb_state" == "SecureBoot enabled" ]]; then
bb-log-info "SecureBoot is enabled. Please manually install DRBD version {{ $.Values.sdsReplicatedVolume.internal.drbdVersion }} or higher."
bb-log-info "SecureBoot is enabled. Please manually install DRBD version $DRBD_DESIRED_VERSION or higher."
exit 0
fi

{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.63" .Values.global.deckhouseVersion) }}
bb-package-module-install "drbd:{{ include "helm_lib_module_image_digest" (list . "drbd" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
{{- else }}
bb-rp-from-module-image-install "drbd:{{ include "helm_lib_module_image_digest" (list . "drbd" "sdsReplicatedVolume") }}" "$MODULE_REGISTRY_AUTH" "$MODULE_SCHEME" "$MODULE_REGISTRY_ADDRESS" "$MODULE_REGISTRY_PATH"
{{- end }}
# Install appropriate DRBD image based on kernel version
if [ "$DRBD_IMAGE_NAME" == "drbd9214" ]; then
bb-package-module-install "drbd9214:{{ include "helm_lib_module_image_digest" (list . "drbd9214" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
else
bb-package-module-install "drbd:{{ include "helm_lib_module_image_digest" (list . "drbd" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
fi

attempt=0
until SPAAS_IP="$(host -t A "$SPAAS_FQDN" "$CLUSTER_DNS" | awk '/has address/ { print $4 }')"
Expand Down Expand Up @@ -198,13 +184,7 @@ spec:

if [ -e "/proc/drbd" ]; then
current_version="$(cat /proc/drbd | grep 'version:' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
desired_version="{{ $.Values.sdsReplicatedVolume.internal.drbdVersion }}"

{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.63" .Values.global.deckhouseVersion) }}
bb-package-module-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
{{- else }}
bb-rp-from-module-image-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REGISTRY_AUTH" "$MODULE_SCHEME" "$MODULE_REGISTRY_ADDRESS" "$MODULE_REGISTRY_PATH"
{{- end }}
desired_version="$DRBD_DESIRED_VERSION"

if [ "$(d8-semver compare $current_version $desired_version)" == "-1" ]; then
bb-log-info "Non-actual version of drbd is loaded (now "$current_version", desired minimum "$desired_version"), setting reboot flag"
Expand Down
68 changes: 24 additions & 44 deletions templates/nodegroupconfiguration-drbd-install-centos-like.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,42 +25,33 @@ spec:
# data nodes checksum to force bashible execution on nodes list change
# {{ $.Values.sdsReplicatedVolume.internal.dataNodesChecksum }}

# Unpack package from module image and run install script
# bb-rp-from-module-image-install package:digest registry_auth scheme registry_address registry_path
bb-rp-from-module-image-install() {
local MODULE_PACKAGE=$1
local REGISTRY_AUTH=$2
local SCHEME=$3
local REGISTRY_ADDRESS=$4
local REGISTRY_PATH=$5

bb-rp-install $MODULE_PACKAGE
}

kubeconfig="/etc/kubernetes/kubelet.conf"

kernel_version_in_use="$(uname -r)"
# Extract major.minor.patch from kernel version (e.g., "6.14.0-generic" -> "6.14.0")
kernel_version_semver="$(echo "$kernel_version_in_use" | grep -oE '^[0-9]+\.[0-9]+\.[0-9]+')"

CLUSTER_DNS="{{ .Values.global.discovery.clusterDNSAddress }}"
SPAAS_FQDN="spaas.d8-{{ .Chart.Name }}.svc.{{ .Values.global.discovery.clusterDomain }}"

MODULE_REGISTRY_AUTH="$(echo {{ .Values.sdsReplicatedVolume.registry.dockercfg }} | base64 -d | jq -r '.auths[].auth // ""' | base64 -d)"
{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.58" .Values.global.deckhouseVersion) }}
MODULE_SCHEME="{{ .Values.sdsReplicatedVolume.registry.scheme }}"
{{- else }}
MODULE_SCHEME="{{ .Values.sdsReplicatedVolume.registryScheme }}"
{{- end }}
MODULE_REGISTRY_ADDRESS=$(echo {{ .Values.sdsReplicatedVolume.registry.base }} | cut -f 1 -d '/')
MODULE_REGISTRY_PATH="/"$(echo {{ .Values.sdsReplicatedVolume.registry.base }} | cut -f 2- -d '/')"/sds-replicated-volume"
MODULE_REPOSITORY="{{ .Values.sdsReplicatedVolume.registry.base }}"

# Install semver tool for version comparisons
bb-package-module-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"

# Select DRBD version based on kernel version
# Kernel >= 6.14 requires DRBD 9.2.14, otherwise use 9.2.13
if [ "$(d8-semver compare $kernel_version_semver 6.14.0)" != "-1" ]; then
DRBD_IMAGE_NAME="drbd9214"
DRBD_DESIRED_VERSION="9.2.14"
else
DRBD_IMAGE_NAME="drbd"
DRBD_DESIRED_VERSION="{{ $.Values.sdsReplicatedVolume.internal.drbdVersion }}"
fi

is_master=$(bb-kubectl --kubeconfig $kubeconfig get node "$(hostname)" -o json | jq -c '.metadata.labels | contains({"node-role.kubernetes.io/control-plane": ""})')
if [ $is_master == "true" ]; then
{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.63" .Values.global.deckhouseVersion) }}
bb-package-module-install "serviceScripts:{{ include "helm_lib_module_image_digest" (list . "serviceScripts" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
{{- else }}
bb-rp-from-module-image-install "serviceScripts:{{ include "helm_lib_module_image_digest" (list . "serviceScripts" "sdsReplicatedVolume") }}" "$MODULE_REGISTRY_AUTH" "$MODULE_SCHEME" "$MODULE_REGISTRY_ADDRESS" "$MODULE_REGISTRY_PATH"
{{- end }}
fi

is_linstor_data_node=$(bb-kubectl --kubeconfig $kubeconfig get node "$(hostname)" -o json | jq -c '.metadata.labels | contains({"storage.deckhouse.io/sds-replicated-volume-node":""})')
Expand Down Expand Up @@ -107,7 +98,7 @@ spec:
# DRBD check version

current_version="$(cat /proc/drbd | grep 'version:' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
desired_version="{{ $.Values.sdsReplicatedVolume.internal.drbdVersion }}"
desired_version="$DRBD_DESIRED_VERSION"

# We expect the loaded DRBD module to be version 9.
# If version 8 is loaded, it means that for some reason, the in-tree kernel module has been automatically loaded.
Expand All @@ -119,12 +110,6 @@ spec:
rmmod drbd || true
fi

{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.63" .Values.global.deckhouseVersion) }}
bb-package-module-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
{{- else }}
bb-rp-from-module-image-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REGISTRY_AUTH" "$MODULE_SCHEME" "$MODULE_REGISTRY_ADDRESS" "$MODULE_REGISTRY_PATH"
{{- end }}

if [ "$(d8-semver compare $current_version $desired_version)" == "-1" ]; then
bb-log-info "DRBD needs to be rebuilt"
else
Expand All @@ -143,15 +128,16 @@ spec:
bb-dnf-install make gcc bind-utils patch mokutil
check_sb_state="$(mokutil --sb-state || echo "Not supported")"
if [[ "$check_sb_state" == "SecureBoot enabled" ]]; then
bb-log-info "SecureBoot is enabled. Please manually install DRBD version {{ $.Values.sdsReplicatedVolume.internal.drbdVersion }} or higher."
bb-log-info "SecureBoot is enabled. Please manually install DRBD version $DRBD_DESIRED_VERSION or higher."
exit 0
fi

{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.63" .Values.global.deckhouseVersion) }}
bb-package-module-install "drbd:{{ include "helm_lib_module_image_digest" (list . "drbd" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
{{- else }}
bb-rp-from-module-image-install "drbd:{{ include "helm_lib_module_image_digest" (list . "drbd" "sdsReplicatedVolume") }}" "$MODULE_REGISTRY_AUTH" "$MODULE_SCHEME" "$MODULE_REGISTRY_ADDRESS" "$MODULE_REGISTRY_PATH"
{{- end }}
# Install appropriate DRBD image based on kernel version
if [ "$DRBD_IMAGE_NAME" == "drbd9214" ]; then
bb-package-module-install "drbd9214:{{ include "helm_lib_module_image_digest" (list . "drbd9214" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
else
bb-package-module-install "drbd:{{ include "helm_lib_module_image_digest" (list . "drbd" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
fi

attempt=0
until SPAAS_IP="$(host -t A "$SPAAS_FQDN" "$CLUSTER_DNS" | awk '/has address/ { print $4 }')"
Expand Down Expand Up @@ -201,13 +187,7 @@ spec:

if [ -e "/proc/drbd" ]; then
current_version="$(cat /proc/drbd | grep 'version:' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
desired_version="{{ $.Values.sdsReplicatedVolume.internal.drbdVersion }}"

{{- if or (hasPrefix "dev" .Values.global.deckhouseVersion) (hasSuffix "dev" .Values.global.deckhouseVersion) (semverCompare ">=1.63" .Values.global.deckhouseVersion) }}
bb-package-module-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REPOSITORY" "sds-replicated-volume"
{{- else }}
bb-rp-from-module-image-install "semver:{{ include "helm_lib_module_image_digest" (list . "semver" "sdsReplicatedVolume") }}" "$MODULE_REGISTRY_AUTH" "$MODULE_SCHEME" "$MODULE_REGISTRY_ADDRESS" "$MODULE_REGISTRY_PATH"
{{- end }}
desired_version="$DRBD_DESIRED_VERSION"

if [ "$(d8-semver compare $current_version $desired_version)" == "-1" ]; then
bb-log-info "Non-actual version of drbd is loaded (now "$current_version", desired minimum "$desired_version"), setting reboot flag"
Expand Down
Loading
Loading