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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4月前
|
Linux 编译器 开发工具
提升CentOS 7中的gcc/G++版本
至此,你已经成功在CentOS 7中升级了gcc/G++版本。从现在开始,在终端中运行 `gcc`或 `g++`时,将会使用新版本的编译器。
432 21
|
5月前
|
Kubernetes Linux 网络安全
CentOS 7.8下使用kubeadm安装Kubernetes 1.26
这就是所有的前线报告,冒险家们,你们已经做好准备,开始在CentOS 7.8上通过Kubeadm安装Kubernetes 1.26的挑战了吗?走上这段旅程,让你的代码飞翔吧。
159 16
|
6月前
|
人工智能 运维 Kubernetes
2025 超详细!Lens Kubernetes IDE 多平台下载安装与集群管理教程
Lens 是一款企业级 Kubernetes 可视化操作平台,2025版实现了三大技术革新:AI智能运维(异常检测准确率98.7%)、多云联邦管理(支持50+集群)和实时3D拓扑展示。本文介绍其安装环境、配置流程、核心功能及高阶技巧,帮助用户快速上手并解决常见问题。适用于 Windows、macOS 和 Ubuntu 系统,需满足最低配置要求并前置依赖组件如 kubectl 和 Helm。通过 Global Cluster Hub 实现多集群管理,AI辅助故障诊断提升运维效率,自定义监控看板和插件生态扩展提供更多功能。
|
9月前
|
运维 监控 安全
CentOS 7系统 OpenSSH和OpenSSL版本升级指南
本文详细介绍如何在CentOS 7系统上升级OpenSSH和OpenSSL至最新稳定版本(OpenSSH 9.6p1和OpenSSL 1.1.1w),解决多个已知安全漏洞(如CVE-2023-51767等)。涵盖环境说明、现存漏洞、升级准备、具体步骤及故障排查,确保服务器安全。建议先在测试环境验证,再应用于生产环境。
2817 7
|
9月前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
2945 11
|
11月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
820 4
|
11月前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
1820 1
|
10月前
|
Kubernetes Ubuntu Linux
我应该如何安装Kubernetes
我应该如何安装Kubernetes
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
156 9
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。