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

简介: 1,k8s admin dashboard项目地址: https://github.com/kubernetes/dashboard项目使用的是golang 作为后端,然后使用angular 作为前段框架的。 项目依赖kubernetes 的api服务,不能单独跑起来。 参考之前写的 centos 安装 kubernetes 1.5 : http://blog.

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.1
export KUBERNETES_SERVICE_PORT=8080
go 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: 9090
Creating API server client for http://127.0.0.1:8080
Successful initial request to the apiserver, version: v1.5.2
Creating in-cluster Heapster client
Using 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 接口调用。

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

cluster
common
config
configmap
container
daemonset
dataselect
deployment
discovery
event
horizontalpodautoscaler
ingress
job
limitrange
logs
metric
namespace
node
owner
persistentvolume
persistentvolumeclaim
pod
rbacrolebindings
rbacroles
replicaset
replicationcontroller
resourcequota
secret
service
statefulset
storageclass
thirdpartyresource
workload

这些资源都是使用 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。
底层的东西修改的很少主要是做应用写自己的业务逻辑。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4小时前
|
前端开发 jenkins 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
17 1
|
4小时前
|
jenkins 网络安全 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
13 3
|
4小时前
|
NoSQL Linux Redis
在CentOS上安装和配置Redis
在CentOS上安装和配置Redis
14 0
|
4小时前
|
安全 Linux 测试技术
在CentOS上安装Elasticsearch和Kibana
在CentOS上安装Elasticsearch和Kibana
7 0
|
4小时前
|
运维 Kubernetes 监控
本地CentOS安装轻量级容器PaaS平台KubeSphere并实现无公网IP远程访问
本地CentOS安装轻量级容器PaaS平台KubeSphere并实现无公网IP远程访问
4 0
|
4小时前
|
Kubernetes Docker 容器
Docker 安装 Portainer
Portainer Community Edition是一个针对容器化应用程序的轻量级服务交付平台,可用于管理 Docker、Swarm、Kubernetes 和 ACI 环境。它的设计理念是部署和使用都简单,该应用程序允许您通过“智能”GUI 和/或广泛的 API 管理所有编排器资源。
40 3
|
4小时前
|
Java 开发工具 git
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
11 4
|
4小时前
|
Oracle jenkins 持续交付
新的centos7.9安装jenkins(二)
新的centos7.9安装jenkins(二)
|
4小时前
|
jenkins Java 持续交付
新的centos7.9安装jenkins—(一)
新的centos7.9安装jenkins—(一)
10 0
|
4小时前
|
网络安全 Docker 容器
测试开发环境下centos7.9下安装docker的minio
测试开发环境下centos7.9下安装docker的minio
12 1

热门文章

最新文章