@@ -24,3 +24,9 @@ before_script:
|
||||
|
||||
script:
|
||||
- make fmt-check && make build
|
||||
|
||||
deploy:
|
||||
provider: script
|
||||
script: bash install/scripts/docker_push
|
||||
on:
|
||||
branch: master
|
||||
|
||||
5
Makefile
5
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"
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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'
|
||||
4
install/scripts/docker_push
Normal file
4
install/scripts/docker_push
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
||||
docker push kubesphere/ks-apiserver:latest
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ import (
|
||||
const (
|
||||
resyncCircle = 180
|
||||
Stopped = "stopped"
|
||||
PvcPending = "Pending"
|
||||
Running = "running"
|
||||
Updating = "updating"
|
||||
tablePods = "pods"
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user