diff --git a/images/virt-artifact/werf.inc.yaml b/images/virt-artifact/werf.inc.yaml index 50ef78fb33..bc91d72a54 100644 --- a/images/virt-artifact/werf.inc.yaml +++ b/images/virt-artifact/werf.inc.yaml @@ -2,7 +2,7 @@ # Source https://github.com/kubevirt/kubevirt/blob/v1.3.1/hack/dockerized#L15 {{- $gitRepoName := "3p-kubevirt" }} {{- $gitRepoUrl := (printf "%s/%s" "deckhouse" $gitRepoName) }} -{{- $tag := get $.Core $gitRepoName }} +{{- $tag := "feat/core/virt-launcher-quota-exclude" }} {{- $version := (split "-" $tag)._0 }} --- @@ -13,8 +13,10 @@ secrets: - id: SOURCE_REPO value: {{ $.SOURCE_REPO }} shell: + installCacheVersion: "{{ now | date "Mon Jan 2 15:04:05 MST 2006" }}" install: - | + echo "$date" echo "Git clone {{ $gitRepoName }} repository..." git clone --depth=1 $(cat /run/secrets/SOURCE_REPO)/{{ $gitRepoUrl }} --branch {{ $tag }} /src/kubevirt diff --git a/images/virtualization-artifact/pkg/common/annotations/annotations.go b/images/virtualization-artifact/pkg/common/annotations/annotations.go index 64af0ead86..420f530e5c 100644 --- a/images/virtualization-artifact/pkg/common/annotations/annotations.go +++ b/images/virtualization-artifact/pkg/common/annotations/annotations.go @@ -175,6 +175,10 @@ const ( QuotaExcludeValue = "true" // QuotaExcludeLabel provides a constant for exclude quota label. QuotaExcludeLabel = "resource-quota-overrides.deckhouse.io/ignore" + // QuotaDiscountCPU provides a constant for discount CPU from quota annotation. + QuotaDiscountCPU = "resource-quota-overrides.deckhouse.io/discount-cpu" + // QuotaDiscountMemory provides a constant for discount Memory from quota annotation. + QuotaDiscountMemory = "resource-quota-overrides.deckhouse.io/discount-memory" // InhibitNodeShutdownLabel is a label to prevent node shutdown is Pod with label is present. InhibitNodeShutdownLabel = "pod.deckhouse.io/inhibit-node-shutdown" diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/migrating.go b/images/virtualization-artifact/pkg/controller/vm/internal/migrating.go index 310c8b58f7..71f11fab3f 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/migrating.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/migrating.go @@ -26,8 +26,11 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" virtv1 "kubevirt.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/reconcile" + "github.com/deckhouse/deckhouse/pkg/log" + "github.com/deckhouse/virtualization-controller/pkg/common/annotations" commonvmop "github.com/deckhouse/virtualization-controller/pkg/common/vmop" "github.com/deckhouse/virtualization-controller/pkg/controller/conditions" "github.com/deckhouse/virtualization-controller/pkg/controller/service" @@ -46,11 +49,13 @@ type migratingVolumesService interface { GetVirtualDiskNamesWithUnreadyTarget(ctx context.Context, s state.VirtualMachineState) ([]string, error) } type MigratingHandler struct { + client client.Client migratingVolumesService migratingVolumesService } -func NewMigratingHandler(migratingVolumesService migratingVolumesService) *MigratingHandler { +func NewMigratingHandler(client client.Client, migratingVolumesService migratingVolumesService) *MigratingHandler { return &MigratingHandler{ + client: client, migratingVolumesService: migratingVolumesService, } } @@ -260,6 +265,25 @@ func (h *MigratingHandler) syncMigrating(ctx context.Context, s state.VirtualMac if liveMigrationSucceeded(vm.Status.MigrationState) { conditions.RemoveCondition(vmcondition.TypeMigrating, &vm.Status.Conditions) + + pod, err := s.Pod(ctx) + if err != nil { + return err + } + + if pod.Name != vm.Status.MigrationState.Target.Pod { + log.Error("Migration target pod is not the same as the pod from status") + return nil + } + + if pod != nil { + delete(pod.Labels, annotations.QuotaExcludeLabel) + err = h.client.Update(ctx, pod) + if err != nil { + return err + } + } + return nil } diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/migrating_test.go b/images/virtualization-artifact/pkg/controller/vm/internal/migrating_test.go index e412ad68c2..7771439ffb 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/migrating_test.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/migrating_test.go @@ -92,7 +92,7 @@ var _ = Describe("MigratingHandler", func() { } reconcile := func() { - h := NewMigratingHandler(vmservice.NewMigrationVolumesService(fakeClient, MakeKVVMFromVMSpec, 10*time.Second)) + h := NewMigratingHandler(fakeClient, vmservice.NewMigrationVolumesService(fakeClient, MakeKVVMFromVMSpec, 10*time.Second)) _, err := h.Handle(ctx, vmState) Expect(err).NotTo(HaveOccurred()) err = resource.Update(context.Background()) diff --git a/images/virtualization-artifact/pkg/controller/vm/internal/sync_metadata.go b/images/virtualization-artifact/pkg/controller/vm/internal/sync_metadata.go index 7c2cb40094..f0d8b73642 100644 --- a/images/virtualization-artifact/pkg/controller/vm/internal/sync_metadata.go +++ b/images/virtualization-artifact/pkg/controller/vm/internal/sync_metadata.go @@ -165,6 +165,8 @@ func PropagateVMMetadata(vm *v1alpha2.VirtualMachine, kvvm *virtv1.VirtualMachin vm.GetLabels(), map[string]string{ annotations.InhibitNodeShutdownLabel: "", + annotations.QuotaDiscountCPU: vm.Status.Resources.CPU.RuntimeOverhead.String(), + annotations.QuotaDiscountMemory: vm.Status.Resources.Memory.RuntimeOverhead.String(), }, ) newLabels, labelsChanged := merger.ApplyMapChanges(destObj.GetLabels(), lastPropagatedLabels, propagateLabels) diff --git a/images/virtualization-artifact/pkg/controller/vm/vm_controller.go b/images/virtualization-artifact/pkg/controller/vm/vm_controller.go index 1cd2ad4433..5567c91944 100644 --- a/images/virtualization-artifact/pkg/controller/vm/vm_controller.go +++ b/images/virtualization-artifact/pkg/controller/vm/vm_controller.go @@ -76,7 +76,7 @@ func SetupController( internal.NewSyncPowerStateHandler(client, recorder), internal.NewSyncMetadataHandler(client), internal.NewLifeCycleHandler(client, recorder), - internal.NewMigratingHandler(migrateVolumesService), + internal.NewMigratingHandler(client, migrateVolumesService), internal.NewFirmwareHandler(firmwareImage), internal.NewEvictHandler(), internal.NewStatisticHandler(client),