kubernetes dashboard 二次开发环境配置

简介: 前言 kubernetes的dashboard可以用来显示集群的状态,通过dashboard可以很方便的管理集群、管理容器等。我们可以对官方的dashboard进行二次开发,部署有特色的dashboard应用。

前言


kubernetes的dashboard可以用来显示集群的状态,通过dashboard可以很方便的管理集群、管理容器等。我们可以对官方的dashboard进行二次开发,部署有特色的dashboard应用。本文作者在实际配置过程中大部分情况使用的是一般账户,偶尔因为需要权限会使用root账户,请读者在阅读的时候注意一下。本文作者使用集群外独立的机器配置,配置时需要保证机器能和集群通信。本文基于CentOS 7.0,kubernetes 1.8,dashboard 1.8.3配置。

一、安装docker1.12

在配置dashboard开发环境前需要安装docker,本文基于的docker版本为docker1.12。安装docker有很多方法,本文不在赘述,

二、安装go

  • 下载# wget -c https://golang.google.cn/dl/go1.10.2.linux-amd64.tar.gz
  • 解压# tar -C /usr/lib -xzf go1.10.2.linux-amd64.tar.gz
  • 修改环境变量

# vi ~/.bash_profile

添加 export GOROOT=/usr/lib/go

添加export PATH=$PATH: $GOROOT/bin :$GOPATH/bin

添加export GOPATH=$HOME/goworkspace

# source ~/.bash_profile

  • 测试# go version

三、安装 node8.5 和 npm5.3

  • 下载# wget -c https://npm.taobao.org/mirrors/node/v8.5.0/node-v8.5.0-linux-x64.tar.gz
  • 解压$ sudo tar -C /usr/lib -xzf node-v8.5.0-linux-x64.tar.gz
  • 测试版本号$ /usr/lib/node-v8.5.0-linux-x64/bin/node –v
  • 创建链接# ln -s /usr/lib/node-v8.5.0-linux-x64/bin/npm /usr/local/bin/npm
  • 创建链接# ln -s /usr/lib/node-v8.5.0-linux-x64/bin/node /usr/local/bin/node
  • 创建链接# ln -s /usr/local/bin/node /usr/bin/node
  • 创建链接# ln -s /usr/local/bin/npm /usr/bin/npm
  • 测试命令$ node –v
  • 测试命令$ npm –v

四、安装Gulp.js 3.9+

  • 安装$ sudo npm install –global gulp-cli

显示CLI version 2.0.1,先不用在意。

  • 测试版本号$ /usr/lib/node-v8.5.0-linux-x64/bin/gulp –v
  • 创建链接$ sudo ln -s /usr/lib/node-v8.5.0-linux-x64/bin/gulp /usr/local/bin/gulp
  • 创建链接$ ln -s /usr/local/bin/gulp /usr/bin/gulp
  • 测试命令$ gulp –v

五、设置dashboard开发环境

1. 获取源码

  • 创建文件夹$HOME/goworkspace/src/github.com/kubernetes/
  • 进入目录$ cd $HOME/goworkspace/src/github.com/kubernetes/
  • 下载1.8.3版本$ wget -c https://github.com/kubernetes/dashboard/archive/v1.8.3.tar.gz
  • 解压$ tar -zvxf v1.8.3.tar.gz
  • 修改目录名称$ mv dashboard-1.8.3 dashboard
  • 进入目录$ cd dashboard

2. 其他配置

  • 下载依赖库$ npm i –unsafe-perm

发现本地版本是3.9.1,全局是2.0.1。没关系,继续往下配置。

  • 修改环境变量

$ vi ~/.bash_profile

添加export KUBE_DASHBOARD_KUBECONFIG=”$HOME/.kube/webconfig”

$ source ~/.bash_profile

  • 将集群的kubeconfig文件放到$HOME/.kube/目录中
  • 修改build/serve.js

找到target: conf.frontend.serveHttps

将https://localhost:${conf.backend.secureDevServerPort}和http://localhost:${conf.backend.devServerPort}中的localhost修改为127.0.0.1

  • 启动服务$ gulp serve
  • 在浏览器中输入ip:9090进行访问。

PS:开发模式访问如果出现空白考虑使用其他浏览器访问,本文使用火狐不能访问但是chrome可以,开发模式只有英语没有国际化。

附录:

A. 安装heapster组件

如果集群中没有Heapster组件,dashboard后台会提示缺少Heapster组件,但不影响使用。Heapster组件用来使得dashboard能够显示图表。

$ vi influxdb.yaml

将image那行修改成image: docker.io/wanghkkk/heapster-influxdb-amd64-v1.3.3:v1.3.3或者自己找到的镜像地址

$ vi grafana.yaml

将image那行修改成image: docker.io/wanghkkk/heapster-grafana-amd64-v4.4.3:v4.4.3或者自己找到的镜像地址

$ vi heapster.yaml

将image那行修改成image: docker.io/wanghkkk/heapster-amd64-v1.4.0:v1.4.0或者自己找到的镜像地址

  • 创建组件

$ kubectl create -f heapster.yaml

$ kubectl create -f influxdb.yaml

$ kubectl create -f grafana.yaml

B. 打包成镜像

在dashboard目录中执行$ gulp docker-image:head就打包成kubernetes/kubernetes-dashboard-amd64:head镜像。该镜像可以部署到集群中使用。

C. 安装go开发插件

虽然vim可以编辑go文件,但是vim本身不具有go的开发工具,go开发的时候比较难于控制,所以为了方便go的开发,需要安装一些vim的go开发插件。我们使用vundle来作为vim的插件管理工具。

1. 升级vim到8.0

其中最后一行添加alias vi=’vim’

  • 使设置生效 # source /etc/bashrc

PS:卸载vim-minimal是因为升级过程中可能会冲突,并且vim-minimal和vim的版本也不同,但这也会导致卸载sudo。安装 sudo # yum install sudo,这也会安装新版本的vim-minimal,如果此时已经退出了管理员账户可以使用 $ pkexec yum install sudo。

2. 安装vundle.vim

  • 创建文件夹 ~/.vim/bundle
  • 下载vim $ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
  • 创建并配置文件$ vi ~/.vimrc

set nocompatible ” be iMproved, required
filetype off ” required
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin ‘VundleVim/Vundle.vim’
Plugin ‘fatih/vim-go’
call vundle#end() ” required
filetype plugin indent on ” required

3. 安装vim-go

  • 运行命令$ vim +PluginInstall +qall

4. 安装 go.tools Binaries 二进制工具

  • 创建文件夹$GOPATH\src\golang.org\x\
  • 进入目录$ cd $GOPATH\src\golang.org\x\
  • 下载源码$ git clone https://github.com/golang/tools.git tools
  • 下载源码$ git clone https://github.com/golang/lint.git lint
  • 安装插件在vim下输入:GoInstallBinaries

PS:插件支持特性参考https://github.com/fatih/vim-go/blob/master/doc/vim-go.txt

问题i. vim 退格键(backspace)不能用

  • 编辑~/.vimrc加入下面2行:$ vi ~/.vimrc

set nocompatible

set backspace=indent,eol,start

D. delve调试方法

dashboard后台go代码的调试不同于普通go程序的调试,因为它是长时间驻在后台的服务,因而是一个长期不间断运行的程序。详细调试命令请参考https://github.com/derekparker/delve/blob/master/Documentation/cli/README.md。

1. 普通go程序调试

  • 编写go文件test-debug.go
  • 用调试器启动程序$ dlv debug test-debug.go
  • 设置断点(dlv) break main.main
  • 让程序运行到设置断点的地方(dlv) continue
  • 程序停在断点的地方之后就可以开始调试了。
  • 不断(dlv) continue,程序会正常退出。

2. Attach到已经运行的程序调试

其实很多时候,我们调试的代码可能是daemon程序或者需要实现编译好在不同机器运行的程序。这就需要我们attach到一个已经在运行中的程序上。

  • 编译程序为二进制文件$ go build test-debug.go
  • 运行程序$ ./test-debug
  • 查看当前运行程序的进程号$ ps –aux|grep test-debug
  • 显示的第二列数字N是进程号,attach上$ dlv attach N
  • 设置断点(dlv) break dostuff (dlv) break dostuff:3
  • 让程序运行到设置断点的地方(dlv) continue
  • 程序停在断点的地方之后就可以开始调试了。
  • 不断(dlv) continue,程序会正常退出。

3. Dashboard调试

Dashboard也需要在attach之后进行调试,但是因为它是常驻服务,在人为退出之前程序不会结束,所以continue之后会一直等待,直到程序会停在断点处。

  • 参照上述方法启动服务 $ gulp serve
  • 查看当前运行程序的进程号$ ps –aux|grep dashboard
  • 显示的第二列数字N是进程号,attach上$ dlv attach N
  • 设置断点(dlv) break b github.com/kubernetes/dashboard/src/app/backend/auth.AuthHandler.handleLogin:2
  • 让程序运行(dlv) continue,这时程序会一直停住等待。
  • 在网页上选择完kubeconfig文件执行登录操作,这时程序会停在断点处。这时就可以进行调试了。
  • 调试完之后(dlv) continue程序会继续停住等待,直到下次在网页上操作程序会停在断点处。

PS:Dashboard的main函数因为是在启动服务时就运行的,因而在服务启动后没有办法调试,在服务启动进行时,可以attach到程序设置断点应该可以调试main函数,可以在main数中增加time.Sleep函数增加启动时间进行调试,其他启动服务时运行的函数也可以照此方法进行调试。

结语

本文作者参考了官方dashboard开发的配置方法https://github.com/kubernetes/dashboard/wiki/Getting-started。虽然官方dashboard的前后端代码都是放在一起的,但是前端与后端的代码是可以分离的,前端是angular的单页应用,后端采用go的restful框架,通过rest服务进行通信,部署时用gulp对前后端统一进行打包。在开发过程中,如果团队比较大可以采用前后端分开开发和部署的模式,前端只编写和部署angular代码而后端只编写和部署go代码。这样前端和后端的开发人员可以在自己熟悉的平台和开发环境中进行开发和单元测试。部署时可以参考官方的gulp文件编写自己的gulp文件。

本文转自中文社区-kubernetes dashboard 二次开发环境配置

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Kubernetes 数据可视化 容器
k8s安装Dashboard
k8s安装Dashboard
307 0
|
3月前
|
Kubernetes 容器
Kubernetes附加组件Dashboard部署实战篇
关于如何在Kubernetes集群中部署和配置Dashboard组件的详细实战指南,涵盖了从创建证书、部署Dashboard、设置服务访问到登录认证的完整流程。
413 0
Kubernetes附加组件Dashboard部署实战篇
|
4月前
|
Kubernetes 监控 Docker
[kubernetes]安装dashboard
[kubernetes]安装dashboard
237 0
|
6月前
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
130 5
|
7月前
|
Web App开发 Kubernetes 数据可视化
Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
134 0
|
6月前
|
Kubernetes 容器 Perl
019.Kubernetes二进制部署插件dashboard
019.Kubernetes二进制部署插件dashboard
|
7月前
|
Kubernetes 监控 安全
百度搜索:蓝易云【【k8s系列】搭建MicroK8s Dashboard教程。】
完成以上步骤后,你就成功搭建了MicroK8s Dashboard,并可以通过Web界面管理和监控你的MicroK8s集群。请确保根据实际需求进行适当的安全配置和访问控制,以保护你的集群和数据安全。
123 2
|
7月前
|
运维 Kubernetes 监控
Kubernetes—DashBoard
Kubernetes—DashBoard
79 0
|
7月前
|
Kubernetes API 容器
|
7月前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|本地存储hostpath-provisioner部署以及无token密码方式登陆dashboard的部署
云原生|kubernetes|本地存储hostpath-provisioner部署以及无token密码方式登陆dashboard的部署
127 0
下一篇
无影云桌面