diff --git a/.travis.yml b/.travis.yml index 87ca354eb..a542922cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,3 +24,9 @@ before_script: script: - make fmt-check && make build + +deploy: + provider: script + script: bash install/scripts/docker_push + on: + branch: master diff --git a/Makefile b/Makefile index b0612bd0e..9f6faa1b6 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,8 @@ # Use of this source code is governed by a Apache license # that can be found in the LICENSE file. -TRAG.Name:=kubesphere-apiserver +TRAG.Org:=kubesphere +TRAG.Name:=ks-apiserver TRAG.Gopkg:=kubesphere.io/kubesphere TRAG.Version:=$(TRAG.Gopkg)/pkg/version @@ -91,7 +92,7 @@ build: fmt $(call get_build_flags) $(RUN_IN_DOCKER) time go install -ldflags '$(BUILD_FLAG)' $(TRAG.Gopkg)/cmd/... mv ./tmp/bin/cmd ./tmp/bin/$(TRAG.Name) - @docker build -t $(TRAG.Name) -f ./Dockerfile.dev ./tmp + @docker build -t $(TRAG.Org)/$(TRAG.Name) -f ./Dockerfile.dev ./tmp @docker image prune -f 1>/dev/null 2>&1 @echo "build done" diff --git a/install/ingress-controller/9.1-static-ip-svc.yaml b/install/ingress-controller/ingress-controller-svc.yaml similarity index 75% rename from install/ingress-controller/9.1-static-ip-svc.yaml rename to install/ingress-controller/ingress-controller-svc.yaml index 88c42808c..d7b9e8028 100644 --- a/install/ingress-controller/9.1-static-ip-svc.yaml +++ b/install/ingress-controller/ingress-controller-svc.yaml @@ -5,10 +5,13 @@ metadata: namespace: kubesphere-router-system labels: app: kubesphere - component: kubesphere-router + component: ks-router + tier: backend spec: selector: - app: + app: kubesphere + component: ks-router + tier: backend type: LoadBalancer ports: - name: http diff --git a/install/ingress-controller/9-with-rbac.yaml b/install/ingress-controller/ingress-controller.yaml similarity index 91% rename from install/ingress-controller/9-with-rbac.yaml rename to install/ingress-controller/ingress-controller.yaml index 0d6941310..2effe4cfb 100644 --- a/install/ingress-controller/9-with-rbac.yaml +++ b/install/ingress-controller/ingress-controller.yaml @@ -1,17 +1,21 @@ apiVersion: extensions/v1beta1 kind: Deployment metadata: - name: kubesphere-router + name: ks-router namespace: kubesphere-router-system spec: replicas: 1 selector: matchLabels: - app: kubesphere-router + app: kubesphere + component: ks-router + tier: backend template: metadata: labels: - app: kubesphere-router + app: kubesphere + component: ks-router + tier: backend annotations: prometheus.io/port: '10254' prometheus.io/scrape: 'true' diff --git a/install/scripts/docker_push b/install/scripts/docker_push new file mode 100644 index 000000000..966d8460c --- /dev/null +++ b/install/scripts/docker_push @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin +docker push kubesphere/ks-apiserver:latest \ No newline at end of file diff --git a/pkg/models/controllers/namespaces.go b/pkg/models/controllers/namespaces.go index 0bb83401d..a3d425e9d 100644 --- a/pkg/models/controllers/namespaces.go +++ b/pkg/models/controllers/namespaces.go @@ -79,9 +79,8 @@ func makeHttpRequest(method, url, data string) ([]byte, error) { } body, err := ioutil.ReadAll(resp.Body) - glog.Error(string(body)) defer resp.Body.Close() - return body, nil + return body, err } func (ctl *NamespaceCtl) getKubeConfig(user string) (string, error) { @@ -203,23 +202,28 @@ func (ctl *NamespaceCtl) createRoleAndRuntime(item v1.Namespace) { err = ctl.createDefaultRoleBinding(ns, user) if err != nil { + glog.Error(err) return } resp, err := ctl.createOpRuntime(ns, user) if err != nil { - glog.Error(resp) + glog.Error(err) return } var runtime runTime err = json.Unmarshal(resp, &runtime) if err != nil { + glog.Error(err) return } item.Annotations[openpitrix_runtime] = runtime.RuntimeId - ctl.K8sClient.CoreV1().Namespaces().Update(&item) + _, err = ctl.K8sClient.CoreV1().Namespaces().Update(&item) + if err != nil { + glog.Error(err) + } } } diff --git a/pkg/models/controllers/pods.go b/pkg/models/controllers/pods.go index fd929ad4b..c4341d8df 100644 --- a/pkg/models/controllers/pods.go +++ b/pkg/models/controllers/pods.go @@ -27,9 +27,11 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/informers" "k8s.io/client-go/tools/cache" + + "kubesphere.io/kubesphere/pkg/models/metrics" ) -const inUse = "in_use_pods" +const inUse = "kubesphere.io/in_use_pods" func (ctl *PodCtl) addAnnotationToPvc(item v1.Pod) { volumes := item.Spec.Volumes @@ -264,6 +266,22 @@ func (ctl *PodCtl) ListWithConditions(conditions string, paging *Paging) (int, i listWithConditions(ctl.DB, &total, &object, &list, conditions, paging, order) + ch := make(chan metrics.PodMetrics) + + for index, _ := range list { + go metrics.GetSinglePodMetrics(list[index].Namespace, list[index].Name, ch) + } + + var resultMetrics = make(map[string]metrics.PodMetrics) + for range list { + podMetric := <-ch + resultMetrics[podMetric.PodName] = podMetric + } + + for index, _ := range list { + list[index].Metrics = resultMetrics[list[index].Name] + } + return total, list, nil } diff --git a/pkg/models/controllers/types.go b/pkg/models/controllers/types.go index 4c924ad25..9ddce4762 100644 --- a/pkg/models/controllers/types.go +++ b/pkg/models/controllers/types.go @@ -33,6 +33,7 @@ import ( const ( resyncCircle = 180 Stopped = "stopped" + PvcPending = "Pending" Running = "running" Updating = "updating" tablePods = "pods" diff --git a/pkg/models/resources.go b/pkg/models/resources.go index 1d80a69b6..1080b52d7 100644 --- a/pkg/models/resources.go +++ b/pkg/models/resources.go @@ -140,15 +140,18 @@ type workLoadStatus struct { } func GetNamespacesResourceStatus(namespace string) (*workLoadStatus, error) { - res := workLoadStatus{Count: make(map[string]int), NameSpace: namespace, Items: make(map[string]interface{})} var status *ResourceList var err error - for _, resource := range []string{controllers.Deployments, controllers.Statefulsets, controllers.Daemonsets} { + for _, resource := range []string{controllers.Deployments, controllers.Statefulsets, controllers.Daemonsets, controllers.PersistentVolumeClaim} { + resourceStatus := controllers.Updating + if resource == controllers.PersistentVolumeClaim { + resourceStatus = controllers.PvcPending + } if len(namespace) > 0 { - status, err = ListResource(resource, fmt.Sprintf("status=%s,namespace=%s", controllers.Updating, namespace), "") + status, err = ListResource(resource, fmt.Sprintf("status=%s,namespace=%s", resourceStatus, namespace), "") } else { - status, err = ListResource(resource, fmt.Sprintf("status=%s", controllers.Updating), "") + status, err = ListResource(resource, fmt.Sprintf("status=%s", resourceStatus), "") } if err != nil { diff --git a/pkg/models/routes.go b/pkg/models/routes.go index f82c59de8..781fa5b97 100644 --- a/pkg/models/routes.go +++ b/pkg/models/routes.go @@ -34,7 +34,7 @@ func GetAllRouters() ([]coreV1.Service, error) { k8sClient := client.NewK8sClient() opts := metaV1.ListOptions{ - LabelSelector: "app=kubesphere,component=kubesphere-router-gateway", + LabelSelector: "app=kubesphere,component=ks-router,tier=backend", } services, err := k8sClient.CoreV1().Services(constants.IngressControllerNamespace).List(opts) @@ -56,7 +56,7 @@ func GetRouter(namespace string) (*coreV1.Service, error) { serviceName := constants.IngressControllerPrefix + namespace opts := metaV1.ListOptions{ - LabelSelector: "app=kubesphere,component=kubesphere-router-gateway", + LabelSelector: "app=kubesphere,component=ks-router,tier=backend,project=" + namespace, FieldSelector: "metadata.name=" + serviceName, } @@ -129,6 +129,9 @@ func CreateRouter(namespace string, routerType coreV1.ServiceType, annotations m service.Spec.Type = routerType service.Name = constants.IngressControllerPrefix + namespace + // Add project selector + service.Spec.Selector["project"] = namespace + service, err := k8sClient.CoreV1().Services(constants.IngressControllerNamespace).Create(service) if err != nil { glog.Error(err) @@ -140,6 +143,10 @@ func CreateRouter(namespace string, routerType coreV1.ServiceType, annotations m case *extensionsV1beta1.Deployment: deployment := obj.(*extensionsV1beta1.Deployment) deployment.Name = constants.IngressControllerPrefix + namespace + + // Add project label + deployment.Labels["project"] = namespace + deployment.Spec.Template.Spec.Containers[0].Args = append(deployment.Spec.Template.Spec.Containers[0].Args, "--watch-namespace="+namespace) glog.Info(deployment.Spec.Template.Spec.Containers[0].Args) deployment, err := k8sClient.ExtensionsV1beta1().Deployments(constants.IngressControllerNamespace).Create(deployment) @@ -171,7 +178,7 @@ func DeleteRouter(namespace string) (*coreV1.Service, error) { deleteOptions := metaV1.DeleteOptions{} listOptions := metaV1.ListOptions{ - LabelSelector: "app=kubesphere,component=kubesphere-router-gateway", + LabelSelector: "app=kubesphere,component=ks-router,tier=backend,project=" + namespace, FieldSelector: "metadata.name=" + serviceName} serviceList, err := k8sClient.CoreV1().Services(constants.IngressControllerNamespace).List(listOptions) diff --git a/pkg/models/terminal.go b/pkg/models/terminal.go index 95c0d1f99..3f565708a 100644 --- a/pkg/models/terminal.go +++ b/pkg/models/terminal.go @@ -271,7 +271,7 @@ func WaitForTerminal(k8sClient kubernetes.Interface, cfg *rest.Config, request * close(terminalSessions[sessionId].bound) var err error - validShells := []string{"bash", "sh"} + validShells := []string{"sh", "bash"} if isValidShell(validShells, shell) { cmd := []string{shell} diff --git a/pkg/options/options.go b/pkg/options/options.go index fde3ab611..8bcf68a7b 100644 --- a/pkg/options/options.go +++ b/pkg/options/options.go @@ -107,7 +107,7 @@ func (s *ServerRunOptions) addFlags(fs *pflag.FlagSet) { fs.StringVar(&s.mysqlPasswd, "mysql-password", "123456", "Password of mysql") - fs.StringVar(&s.mysqlUser, "mysql-user", "mysql", + fs.StringVar(&s.mysqlUser, "mysql-user", "root", "User of mysql.") fs.StringVar(&s.opAddress, "openpitrix-address", "http://openpitrix-api-gateway.openpitrix-system.svc",