Skip to content

Commit 986e035

Browse files
author
wilhelmguo
authored
Merge pull request #344 from wilhelmguo/hotfix/fix_inaccurate_resource_statistics
Fix inaccurate resource statistics
2 parents c79facf + 8c62009 commit 986e035

7 files changed

Lines changed: 162 additions & 155 deletions

File tree

src/backend/controllers/kubernetes/deployment/deployment.go

Lines changed: 66 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
"k8s.io/api/apps/v1beta1"
99
"k8s.io/apimachinery/pkg/labels"
10-
"k8s.io/client-go/kubernetes"
1110

1211
"github.com/Qihoo360/wayne/src/backend/client"
1312
"github.com/Qihoo360/wayne/src/backend/controllers/base"
@@ -130,75 +129,42 @@ func (c *KubeDeploymentController) Deploy() {
130129
}
131130

132131
cluster := c.Ctx.Input.Param(":cluster")
133-
cli, err := client.Client(cluster)
134-
if err == nil {
135-
namespaceModel, err := models.NamespaceModel.GetNamespaceByAppId(c.AppId)
136-
if err != nil {
137-
logs.Error("get getNamespaceMetaData error.%v", err)
138-
c.HandleError(err)
139-
return
140-
}
132+
cli := c.Manager(cluster)
141133

142-
clusterModel, err := models.ClusterModel.GetParsedMetaDataByName(cluster)
143-
if err != nil {
144-
logs.Error("get cluster error.%v", err)
145-
c.HandleError(err)
146-
return
147-
}
148-
149-
deploymentModel, err := models.DeploymentModel.GetParseMetaDataById(int64(deploymentId))
150-
if err != nil {
151-
logs.Error("get deployment error.%v", err)
152-
c.HandleError(err)
153-
return
154-
}
134+
namespaceModel, err := models.NamespaceModel.GetNamespaceByAppId(c.AppId)
135+
if err != nil {
136+
logs.Error("get getNamespaceMetaData error.%v", err)
137+
c.HandleError(err)
138+
return
139+
}
155140

156-
common.DeploymentPreDeploy(&kubeDeployment, deploymentModel, clusterModel, namespaceModel)
141+
clusterModel, err := models.ClusterModel.GetParsedMetaDataByName(cluster)
142+
if err != nil {
143+
logs.Error("get cluster error.%v", err)
144+
c.HandleError(err)
145+
return
146+
}
157147

158-
publishHistory := &models.PublishHistory{
159-
Type: models.PublishTypeDeployment,
160-
ResourceId: int64(deploymentId),
161-
ResourceName: kubeDeployment.Name,
162-
TemplateId: int64(tplId),
163-
Cluster: cluster,
164-
User: c.User.Name,
165-
}
148+
deploymentModel, err := models.DeploymentModel.GetParseMetaDataById(int64(deploymentId))
149+
if err != nil {
150+
logs.Error("get deployment error.%v", err)
151+
c.HandleError(err)
152+
return
153+
}
166154

167-
defer models.PublishHistoryModel.Add(publishHistory)
155+
common.DeploymentPreDeploy(&kubeDeployment, deploymentModel, clusterModel, namespaceModel)
168156

169-
err = checkResourceAvailable(namespaceModel, cli, &kubeDeployment, cluster)
170-
if err != nil {
171-
publishHistory.Status = models.ReleaseFailure
172-
publishHistory.Message = err.Error()
173-
c.HandleError(err)
174-
return
175-
}
157+
publishHistory := &models.PublishHistory{
158+
Type: models.PublishTypeDeployment,
159+
ResourceId: int64(deploymentId),
160+
ResourceName: kubeDeployment.Name,
161+
TemplateId: int64(tplId),
162+
Cluster: cluster,
163+
User: c.User.Name,
164+
}
176165

177-
// 发布资源到k8s平台
178-
_, err = deployment.CreateOrUpdateDeployment(cli, &kubeDeployment)
179-
if err != nil {
180-
publishHistory.Status = models.ReleaseFailure
181-
publishHistory.Message = err.Error()
182-
logs.Error("deploy deployment error.%v", err)
183-
c.HandleError(err)
184-
return
185-
} else {
186-
publishHistory.Status = models.ReleaseSuccess
187-
err = models.PublishStatusModel.Add(deploymentId, tplId, cluster, models.PublishTypeDeployment)
188-
// 添加发布状态
189-
if err != nil {
190-
logs.Error("add deployment deploy status error.%v", err)
191-
c.HandleError(err)
192-
return
193-
}
194-
195-
err = models.DeploymentModel.Update(*kubeDeployment.Spec.Replicas, deploymentModel, cluster)
196-
if err != nil {
197-
logs.Error("update deployment metadata error.%v", err)
198-
c.HandleError(err)
199-
return
200-
}
201-
}
166+
defer func() {
167+
models.PublishHistoryModel.Add(publishHistory)
202168
webhook.PublishEventDeployment(c.NamespaceId, c.AppId, c.User.Name, c.Ctx.Input.IP(), webhook.UpgradeDeployment, response.Resource{
203169
Type: publishHistory.Type,
204170
ResourceId: publishHistory.ResourceId,
@@ -209,13 +175,45 @@ func (c *KubeDeploymentController) Deploy() {
209175
Message: publishHistory.Message,
210176
Object: kubeDeployment,
211177
})
212-
c.Success("ok")
213-
} else {
214-
c.AbortBadRequestFormat("Cluster")
178+
}()
179+
180+
err = checkResourceAvailable(namespaceModel, cli.KubeClient, &kubeDeployment, cluster)
181+
if err != nil {
182+
publishHistory.Status = models.ReleaseFailure
183+
publishHistory.Message = err.Error()
184+
c.HandleError(err)
185+
return
186+
}
187+
188+
// 发布资源到k8s平台
189+
_, err = deployment.CreateOrUpdateDeployment(cli.Client, &kubeDeployment)
190+
if err != nil {
191+
publishHistory.Status = models.ReleaseFailure
192+
publishHistory.Message = err.Error()
193+
logs.Error("deploy deployment error.%v", err)
194+
c.HandleError(err)
195+
return
215196
}
197+
publishHistory.Status = models.ReleaseSuccess
198+
err = models.PublishStatusModel.Add(deploymentId, tplId, cluster, models.PublishTypeDeployment)
199+
// 添加发布状态
200+
if err != nil {
201+
logs.Error("add deployment deploy status error.%v", err)
202+
c.HandleError(err)
203+
return
204+
}
205+
206+
err = models.DeploymentModel.Update(*kubeDeployment.Spec.Replicas, deploymentModel, cluster)
207+
if err != nil {
208+
logs.Error("update deployment metadata error.%v", err)
209+
c.HandleError(err)
210+
return
211+
}
212+
213+
c.Success("ok")
216214
}
217215

218-
func checkResourceAvailable(ns *models.Namespace, cli *kubernetes.Clientset, kubeDeployment *v1beta1.Deployment, cluster string) error {
216+
func checkResourceAvailable(ns *models.Namespace, cli client.ResourceHandler, kubeDeployment *v1beta1.Deployment, cluster string) error {
219217
// this namespace can't use current cluster.
220218
clusterMetas, ok := ns.MetaDataObj.ClusterMetas[cluster]
221219
if !ok {

src/backend/controllers/kubernetes/namespace/namespace.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func (c *KubeNamespaceController) Resources() {
202202
selectorMap[util.AppLabelKey] = appName
203203
}
204204
selector := labels.SelectorFromSet(selectorMap)
205-
resourceUsage, err := namespace.ResourcesUsageByNamespace(m.Client, namespaceMetaData.Namespace, selector.String())
205+
resourceUsage, err := namespace.ResourcesUsageByNamespace(m.KubeClient, namespaceMetaData.Namespace, selector.String())
206206
if err != nil {
207207
logs.Error("get (%s) k8s resource usage error. %v", m.Cluster.Name, err.Error())
208208
errs = append(errs, err)
@@ -274,7 +274,7 @@ func (c *KubeNamespaceController) Statistics() {
274274
selectorMap[util.AppLabelKey] = appName
275275
}
276276
selector := labels.SelectorFromSet(selectorMap)
277-
resourceUsage, err := namespace.ResourcesOfAppByNamespace(m.Client, namespaceMetaData.Namespace, selector.String())
277+
resourceUsage, err := namespace.ResourcesOfAppByNamespace(m.KubeClient, namespaceMetaData.Namespace, selector.String())
278278
if err != nil {
279279
logs.Error("get (%s) k8s resource usage error. %v", m.Cluster.Name, err.Error())
280280
errs = append(errs, err)

src/backend/controllers/kubernetes/statefulset/statefulset.go

Lines changed: 62 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
"k8s.io/api/apps/v1beta1"
99
"k8s.io/apimachinery/pkg/labels"
10-
"k8s.io/client-go/kubernetes"
1110

1211
"github.com/Qihoo360/wayne/src/backend/client"
1312
"github.com/Qihoo360/wayne/src/backend/controllers/base"
@@ -66,74 +65,72 @@ func (c *KubeStatefulsetController) Deploy() {
6665
}
6766

6867
cluster := c.Ctx.Input.Param(":cluster")
69-
cli, err := client.Client(cluster)
70-
if err == nil {
71-
namespaceModel, err := getNamespace(c.AppId)
72-
if err != nil {
73-
logs.Error("get getNamespaceMetaData error.%v", err)
74-
c.HandleError(err)
75-
return
76-
}
77-
clusterModel, err := models.ClusterModel.GetParsedMetaDataByName(cluster)
78-
if err != nil {
79-
logs.Error("get cluster error.%v", err)
80-
c.HandleError(err)
81-
return
82-
}
83-
statefulsetModel, err := models.StatefulsetModel.GetParseMetaDataById(int64(statefulsetId))
84-
if err != nil {
85-
logs.Error("get statefulset error.%v", err)
86-
c.HandleError(err)
87-
return
88-
}
89-
statefulsetPreDeploy(&kubeStatefulset, statefulsetModel, clusterModel, namespaceModel)
68+
cli := c.Manager(cluster)
9069

91-
publishHistory := &models.PublishHistory{
92-
Type: models.PublishTypeStatefulSet,
93-
ResourceId: int64(statefulsetId),
94-
ResourceName: kubeStatefulset.Name,
95-
TemplateId: int64(tplId),
96-
Cluster: cluster,
97-
User: c.User.Name,
98-
}
70+
namespaceModel, err := getNamespace(c.AppId)
71+
if err != nil {
72+
logs.Error("get getNamespaceMetaData error.%v", err)
73+
c.HandleError(err)
74+
return
75+
}
76+
clusterModel, err := models.ClusterModel.GetParsedMetaDataByName(cluster)
77+
if err != nil {
78+
logs.Error("get cluster error.%v", err)
79+
c.HandleError(err)
80+
return
81+
}
82+
statefulsetModel, err := models.StatefulsetModel.GetParseMetaDataById(int64(statefulsetId))
83+
if err != nil {
84+
logs.Error("get statefulset error.%v", err)
85+
c.HandleError(err)
86+
return
87+
}
88+
statefulsetPreDeploy(&kubeStatefulset, statefulsetModel, clusterModel, namespaceModel)
9989

100-
defer models.PublishHistoryModel.Add(publishHistory)
90+
publishHistory := &models.PublishHistory{
91+
Type: models.PublishTypeStatefulSet,
92+
ResourceId: int64(statefulsetId),
93+
ResourceName: kubeStatefulset.Name,
94+
TemplateId: int64(tplId),
95+
Cluster: cluster,
96+
User: c.User.Name,
97+
}
10198

102-
err = checkResourceAvailable(namespaceModel, cli, &kubeStatefulset, cluster)
103-
if err != nil {
104-
publishHistory.Status = models.ReleaseFailure
105-
publishHistory.Message = err.Error()
106-
c.HandleError(err)
107-
return
108-
}
99+
defer models.PublishHistoryModel.Add(publishHistory)
109100

110-
// 发布资源到k8s平台
111-
_, err = statefulset.CreateOrUpdateStatefulset(cli, &kubeStatefulset)
112-
if err != nil {
113-
publishHistory.Status = models.ReleaseFailure
114-
publishHistory.Message = err.Error()
115-
logs.Error("deploy statefulset error.%v", err)
116-
c.HandleError(err)
117-
return
118-
} else {
119-
publishHistory.Status = models.ReleaseSuccess
120-
err = addDeployStatus(statefulsetId, tplId, cluster)
121-
if err != nil {
122-
logs.Error("add statefulset deploy status error.%v", err)
123-
c.HandleError(err)
124-
return
125-
}
126-
err = updateMetadata(*kubeStatefulset.Spec.Replicas, statefulsetModel, cluster)
127-
if err != nil {
128-
logs.Error("update statefulset metadata error.%v", err)
129-
c.HandleError(err)
130-
return
131-
}
132-
}
133-
c.Success("ok")
134-
} else {
135-
c.AbortBadRequestFormat("Cluster")
101+
err = checkResourceAvailable(namespaceModel, cli.KubeClient, &kubeStatefulset, cluster)
102+
if err != nil {
103+
publishHistory.Status = models.ReleaseFailure
104+
publishHistory.Message = err.Error()
105+
c.HandleError(err)
106+
return
136107
}
108+
109+
// 发布资源到k8s平台
110+
_, err = statefulset.CreateOrUpdateStatefulset(cli.Client, &kubeStatefulset)
111+
if err != nil {
112+
publishHistory.Status = models.ReleaseFailure
113+
publishHistory.Message = err.Error()
114+
logs.Error("deploy statefulset error.%v", err)
115+
c.HandleError(err)
116+
return
117+
}
118+
publishHistory.Status = models.ReleaseSuccess
119+
err = addDeployStatus(statefulsetId, tplId, cluster)
120+
if err != nil {
121+
logs.Error("add statefulset deploy status error.%v", err)
122+
c.HandleError(err)
123+
return
124+
}
125+
err = updateMetadata(*kubeStatefulset.Spec.Replicas, statefulsetModel, cluster)
126+
if err != nil {
127+
logs.Error("update statefulset metadata error.%v", err)
128+
c.HandleError(err)
129+
return
130+
}
131+
132+
c.Success("ok")
133+
137134
}
138135

139136
func addDeployStatus(statefulsetId int64, tplId int64, cluster string) error {
@@ -152,7 +149,7 @@ func addDeployStatus(statefulsetId int64, tplId int64, cluster string) error {
152149
return nil
153150
}
154151

155-
func checkResourceAvailable(ns *models.Namespace, cli *kubernetes.Clientset, kubeStatefulset *v1beta1.StatefulSet, cluster string) error {
152+
func checkResourceAvailable(ns *models.Namespace, cli client.ResourceHandler, kubeStatefulset *v1beta1.StatefulSet, cluster string) error {
156153
// this namespace can't use current cluster.
157154
clusterMetas, ok := ns.MetaDataObj.ClusterMetas[cluster]
158155
if !ok {

src/backend/resources/deployment/deployment.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"k8s.io/client-go/kubernetes"
1313

1414
"github.com/Qihoo360/wayne/src/backend/client"
15+
"github.com/Qihoo360/wayne/src/backend/client/api"
1516
erroresult "github.com/Qihoo360/wayne/src/backend/models/response/errors"
1617
"github.com/Qihoo360/wayne/src/backend/resources/common"
1718
"github.com/Qihoo360/wayne/src/backend/resources/event"
@@ -37,8 +38,10 @@ func GetDeploymentList(indexer *client.CacheFactory, namespace string) ([]*v1bet
3738
return deployments, nil
3839
}
3940

40-
func GetDeploymentResource(cli *kubernetes.Clientset, deployment *v1beta1.Deployment) (*common.ResourceList, error) {
41-
old, err := cli.AppsV1beta1().Deployments(deployment.Namespace).Get(deployment.Name, metaV1.GetOptions{})
41+
// GetDeploymentResource get deployment resource statistics
42+
func GetDeploymentResource(cli client.ResourceHandler, deployment *v1beta1.Deployment) (*common.ResourceList, error) {
43+
obj, err := cli.Get(api.ResourceNameStatefulSet, deployment.Namespace, deployment.Name)
44+
old := obj.(*v1beta1.Deployment)
4245
if err != nil {
4346
if errors.IsNotFound(err) {
4447
return common.DeploymentResourceList(deployment), nil

0 commit comments

Comments
 (0)