kubernetes(3):Centos7 安装 kubernetes admin 版本

来源:互联网 发布:ubuntu pyqt 安装 编辑:程序博客网 时间:2024/05/21 22:42

1,k8s admin dashboard


项目地址:
https://github.com/kubernetes/dashboard

项目使用的是golang 作为后端,然后使用angular 作为前段框架的。
项目依赖kubernetes 的api服务,不能单独跑起来。
参考之前写的 centos 安装 kubernetes 1.5 :
http://blog.csdn.net/freewebsys/article/details/70159228

2,启动项目


beego 是个好东西,可将任何main 函数入口的都带起来并且可以实时的检查变化。
然后自动重启。我在使用beego 开发的时候手动启动的次数就很少。
非常的方便。

项目main函数在:
$GOPATH/src/github.com/kubernetes/dashboard/src/app/backend
doc 下面有很多的文档,讲如何将dashboard 启动起来。
启动的时候需要增加环境变量:

export KUBERNETES_SERVICE_HOST=127.0.0.1export KUBERNETES_SERVICE_PORT=8080go run dashboard.go 

报错:

open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory

需要配置 ssl 调用kubernetes ,要有个密钥,同时需要token。
想想算了。还是使用http链接得了,反正也是个测试环境。
启用测试没有找到直接使用 http 链接:

func InClusterConfig() (*Config, error) {    host, port := os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT")    if len(host) == 0 || len(port) == 0 {        return nil, fmt.Errorf("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined")    }    token, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountTokenKey)    if err != nil {        return nil, err    }    tlsClientConfig := TLSClientConfig{}    rootCAFile := "/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountRootCAKey    if _, err := certutil.NewPool(rootCAFile); err != nil {        glog.Errorf("Expected to load root CA config from %s, but got err: %v", rootCAFile, err)    } else {        tlsClientConfig.CAFile = rootCAFile    }    return &Config{        // TODO: switch to using cluster DNS.        Host:            "https://" + net.JoinHostPort(host, port),        BearerToken:     string(token),        TLSClientConfig: tlsClientConfig,    }, nil}

修改成:

func InClusterConfig() (*Config, error) {    host, port := os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT")    if len(host) == 0 || len(port) == 0 {        return nil, fmt.Errorf("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined")    }    _, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountTokenKey)    if err != nil {        fmt.Println("read file err: ", err)    }    tlsClientConfig := TLSClientConfig{}    rootCAFile := "/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountRootCAKey    if _, err := certutil.NewPool(rootCAFile); err != nil {        glog.Errorf("Expected to load root CA config from %s, but got err: %v", rootCAFile, err, tlsClientConfig)    }    return &Config{        // TODO: switch to using cluster DNS.        Host: "http://" + net.JoinHostPort(host, port),    }, nil}

修改成http 即可。然后就可以启动了。

cd $GOPATH/src/github.com/kubernetes/dashboard/src/app/backend go run dashboard.go Using HTTP port: 9090Creating API server client for http://127.0.0.1:8080Successful initial request to the apiserver, version: v1.5.2Creating in-cluster Heapster clientUsing service account token for csrf signing

查看 namespace :

 curl 127.0.0.1:9090/api/v1/namespace{  "listMeta": {   "totalItems": 2  },  "namespaces": [   {    "objectMeta": {     "name": "default",     "creationTimestamp": "2017-04-14T00:07:27Z"    },    "typeMeta": {     "kind": "namespace"    },    "phase": "Active"   },   {    "objectMeta": {     "name": "kube-system",     "creationTimestamp": "2017-04-14T00:07:27Z"    },    "typeMeta": {     "kind": "namespace"    },    "phase": "Active"   }  ] }

这个只是后端的部分,没有前端,前段是nodejs,不会。

3,项目的意义


admin dashboard 是一个非常好的demo。讲述如何调用kubernetes的 api。
如果一个企业需要使用 kubernetes 需要自己定制开发的话。
直接使用 kubernetes 的api 就行了。其实最重要的就是 直接调研 API。
都是做应用的底层的东西度没有时间经历去修改。
只能在外围做些定制化的开发。
但是看了代码才发现项目拆分的非常细。模块拆分的非常多。
而且前后端拆分的非常洗。

4,代码分析


入口就是 dashboard.go
首先查看环境变量,或者是配置文件,查找 kubernetes api 地址。然后:
apiserverClient, config, err := client.CreateApiserverClient(*argApiserverHost, *argKubeConfigFile)
只有全部启动正确之后才行,否则会报错。

handler/apihandler.go
是主要的函数,路由配置。讲请求转换成 kubernetes client 接口调用。

剩下的就是最重要的各种资源:

clustercommonconfigconfigmapcontainerdaemonsetdataselectdeploymentdiscoveryeventhorizontalpodautoscaleringressjoblimitrangelogsmetricnamespacenodeownerpersistentvolumepersistentvolumeclaimpodrbacrolebindingsrbacrolesreplicasetreplicationcontrollerresourcequotasecretservicestatefulsetstorageclassthirdpartyresourceworkload

这些资源都是使用 kubernetes 客户端进行调用的。同时都汇总到 apihandler.go 这个类当中。
返回给前端页面进行展示。

前端的入口是 index.html,然后加载资源,也是一堆的资源,每一个一个文件夹。
基本上和后端的资源都对齐了。前端使用 Angular module 将模块拆分成一个一个的。
按照模块化进行开发了。
真的是非常的细致。可惜看不到全局,整体的东西了。

BrowserSync (9090) —> Dashboard backend (9091) —> Kubernetes API server (8080)

前端的技术比较复杂,使用的SASS,ES6,Angular,最后都编译成一个单页面的ajax 应用。
作为我一个后端hold 不住了。只会点jquery。

4,总结


本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/51089323 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

kubernetes 真的是一个非常好的项目。
kubernetes自带的dashboard 使用的前后端拆分。后端有简单的业务逻辑。
前端使用nodejs 开发,用gulp 编译。使用ES6,+angular 开发。
要搭建一个简单的paas 平台的话,需要研究 kubernetes api。
底层的东西修改的很少主要是做应用写自己的业务逻辑。

0 0
原创粉丝点击