pcm-kubernetes/internal/pkg/pause.go

40 lines
1.3 KiB
Go

package pkg
import (
"context"
"github.com/sirupsen/logrus"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/dynamic"
kubernetes2 "k8s.io/client-go/kubernetes"
)
func Pause(name, namespace, kind string, clientSet *kubernetes2.Clientset, dynamicClient dynamic.Interface) {
// 缩放副本数量为0
rs := int32(0)
switch kind {
case "Deployment":
deployment, err := clientSet.AppsV1().Deployments(namespace).Get(context.Background(), name, metav1.GetOptions{})
if err == nil {
deployment.Spec.Replicas = &rs
annotations := deployment.GetAnnotations()
annotations["deploy.cloud.sealos.io/pause"] = `{"target":"","value":""}`
_, err = clientSet.AppsV1().Deployments(namespace).Update(context.Background(), deployment, metav1.UpdateOptions{})
if err != nil {
logrus.Error(err)
}
}
case "StatefulSet":
sts, err := clientSet.AppsV1().StatefulSets(namespace).Get(context.Background(), name, metav1.GetOptions{})
if err == nil {
sts.Spec.Replicas = &rs
annotations := sts.GetAnnotations()
annotations["deploy.cloud.sealos.io/pause"] = `{"target":"","value":""}`
_, err = clientSet.AppsV1().StatefulSets(namespace).Update(context.Background(), sts, metav1.UpdateOptions{})
if err != nil {
logrus.Error(err)
}
}
}
}