首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用client-go api回滚部署。

使用client-go api回滚部署。
EN

Stack Overflow用户
提问于 2017-08-11 12:04:09
回答 3查看 1.8K关注 0票数 2

我希望使用k8s的client库将部署回某个修订版(推出历史)。但到目前为止我还没有找到解决办法。我可以使用kebctl获取资源修订,但不能获取“部署修订”。

代码语言:javascript
复制
kubectl rollout history deployment/nginx_dep

下面是使用client-go api的代码:

代码语言:javascript
复制
config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)

clientset, err := kubernetes.NewForConfig(config)

dp, err := clientset.ExtensionsV1beta1Client.Deployments("default").Get("nginx-deployment", metav1.GetOptions{})

使用client的:如何获得给定部署的现有修订版。我想回过头来使用此修订版。有人能告诉我该怎么做吗??

以下是我的项目中的受抚养人列表:

代码语言:javascript
复制
[[constraint]]
  name = "k8s.io/client-go"
  version = "3.0.0"

[[override]]
  name = "k8s.io/apimachinery"
  branch = "release-1.6"

提前谢谢你

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-11 13:55:03

假设你已经看过更新示例

无论如何,这里的dp变量包含您所需的所有内容:

代码语言:javascript
复制
dp, err := clientset.ExtensionsV1beta1Client.Deployments("default").Get("nginx-deployment", metav1.GetOptions{})

因此,dp的类型是v1beta1.Deployment,它包含一个具有ResourceVersionmetav1.ObjectMeta类型的变量。

票数 1
EN

Stack Overflow用户

发布于 2018-11-06 04:34:06

代码语言:javascript
复制
clientset, err := kubernetes.NewForConfig(config)
deploymentsClient := clientset.AppsV1().Deployments("yournamespace")
result, err := deploymentsClient.Get("yourdeployment", metav1.GetOptions{})
version := result.GetObjectMeta().GetAnnotations()["deployment.kubernetes.io/revision"]
票数 0
EN

Stack Overflow用户

发布于 2020-06-16 07:56:34

试着试试https://github.com/kubernetes/kubernetes/blob/17fec00b8915dbffac40b9eb481516a66092ef3e/pkg/controller/deployment/rollback.go#L30-L69

代码语言:javascript
复制
import (
    "fmt"

    "github.com/golang/glog"

    "k8s.io/api/core/v1"
    extensions "k8s.io/api/extensions/v1beta1"
    "k8s.io/apimachinery/pkg/types"
    deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
)



func (un *Uninject) rollbackToTemplate(d *v1.Deployment, rs []v1.ReplicaSet) (bool, error) {

    sort.Slice(rs, func(i, j int) bool {
        return rs[i].CreationTimestamp.UnixNano() > rs[j].CreationTimestamp.UnixNano()

    })
    performedRollback := false
    replicaSet := v1.ReplicaSet{}
    for _, r := range rs {
        for _, initContainer := range r.Spec.Template.Spec.InitContainers {
            if initContainer.Name == "istio-init" {
                performedRollback = true
                break
            } else {
                klog.V(4).Infof("Rolling back to a revision that contains the same template as current deployment %q, skipping rollback...", d.Name)
            }
        }
        if len(r.Spec.Template.Spec.InitContainers) == 0 || !performedRollback {
            replicaSet = r
            performedRollback = true
            break
        }
    }
    if performedRollback {
        klog.V(4).Infof("Rolling back deployment %q to template spec %+v", d.Name, replicaSet.Spec.Template.Spec)
        deploymentutil.SetFromReplicaSetTemplate(d, replicaSet.Spec.Template)
        deploymentutil.SetDeploymentAnnotationsTo(d, &replicaSet)
    }
    return performedRollback, un.updateDeploymentAndClearRollbackTo(d)
}

// updateDeploymentAndClearRollbackTo sets .spec.rollbackTo to nil and update the input deployment
// It is assumed that the caller will have updated the deployment template appropriately (in case
// we want to rollback).
func (un *Uninject) updateDeploymentAndClearRollbackTo(d *v1.Deployment) error {
    klog.Infof("Cleans up rollbackTo of deployment %q", d.Name)
    _, err := un.clientSet.AppsV1().Deployments(d.Namespace).Update(context.TODO(), d, metav1.UpdateOptions{})
    return err
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45634812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档