kubesphere 后端调试

本地环境搭建

参考文档:
本地运行KubeSphere:https://github.com/kubesphere/community/blob/master/developer-guide/development/how-to-run-kubesphere-core.md
网真原理及调试:https://github.com/kubesphere/community/blob/master/developer-guide/development/how-telepresence-works.md
网真连接远程:https://github.com/kubesphere/community/blob/master/developer-guide/development/how-to-connect-remote-service.md

1.安装go环境

$ wget https://dl.google.com/go/go1.13.linux-amd64.tar.gz

$ tar -C /usr/local -zxvf go1.13.linux-amd64.tar.gz

$ vim /etc/profile # 在~/.profile中添加以下内容
PATH=”$HOME/bin:$HOME/.local/bin:$PATH”
export PATH=$PATH:/usr/local/go/bin 
export GOROOT=/usr/local/go 
export GOPATH=$HOME/go 
export PATH=$PATH:$HOME/go/bin
export GOPROXY=https://goproxy.cn,direct

$ source /etc/profile #重新加载环境变量
$ mkdir /root/go #创建go目录

2. 新建运行目录并下载kubesphere代码

$ mkdir -p $GOPATH/src/kubesphere.io/
$ cd $GOPATH/src/kubesphere.io/
$ git clone https://github.com/kubesphere/kubesphere

3. 搭建Telepresence代理运行本地调试代码

参考文档:

https://www.telepresence.io/reference/install

KubeSphere启用istio_python

Telepresence需要python3,但是平台本身有很多东西依赖于python2
所以不要随意升级,而是同时用python2和python3
如果安装pyhton3之后yum不能用了
参考

1.安装python3

# 1.安装python3
$ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
$ tar -xf Python-3.6.1.tgz 
$ cp -r Python-3.6.1 /usr/local/bin/
$ cd Python-3.6.1
$ ./configure
$ make
$ make install

# 设置默认使用python3
$ cd /usr/bin
$ mv python python.bak
$ ln -s /usr/local/bin/python3.6 /usr/bin/python
$ ln -sf /usr/local/bin/python3.6 /usr/bin/python3

#如果改完之后yum不能用了,修改不能用的这个文件#!/usr/bin/python为#!/usr/bin/python2

2.安装Telepresence需要的依赖

# 2.安装Telepresence需要的依赖
$ yum install -y sshfs conntrack torsocks socat git

出现找不到包的话,安装epel-release开启EPEL源,参考https://jpanj.com/2018/centos-install-epel-repo/

# 安装epel-release开启EPEL源
$ yum install epel-release
#或者
$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ yum install epel-release-latest-7.noarch.rpm

3.在/home/下载Telepresence的二进制文件安装

# 3.在/home/下载Telepresence的二进制文件安装
$ git clone https://github.com/telepresenceio/telepresence
$ cd telepresence

4.修改telepresence代码

# 4.修改网真源码local.py 中第59行'kubenetes.deafult'引用为'baidu',以及443端口改为80
$ vim /home/telepresence/telepresence/outbound/local.py

KubeSphere启用istio_KubeSphere启用istio_02

#执行安装
$ env PREFIX=/usr/local ./install.sh 
# 如果显示找不到python3,修改python3的配置文件

5.从集群拷贝配置文件

# 5.从k8s集群的master节点拷贝 /usr/local/bin/kubectl 与 /root/.kube/config 到本机相应目录
$ 这就不写了吧

6.设置KubeSphere核心的配置(官网参考

官网的比较全,但是你的环境安装了那些就配置那些不要放多余的,比如sonarQube、devops等等
redis不需要password就可以连接,对于需要key的,自行去集群查取secret,不要硬搬
比如:

KubeSphere启用istio_kubenetes_03

# 6.设置KubeSphere核心的配置
# 新建文件并键入如下基本配置信息,还安装了其他的,请参考官网一一添上
$ vim /etc/kubesphere.yaml

文件内容如下:

kubernetes:
  kubeconfig: "/root/.kube/config"
  master: https://[后端节点ip]:6443
  qps: 1e+06
  burst: 1000000ip
ldap:
  host: openldap.kubesphere-system.svc:389
  managerDN: cn=admin,dc=kubesphere,dc=io
  managerPassword: admin
  userSearchBase: ou=Users,dc=kubesphere,dc=io
  groupSearchBase: ou=Groups,dc=kubesphere,dc=io
monitoring:
  endpoint: http://prometheus-k8s.kubesphere-monitoring-system.svc:9090
  secondaryEndpoint: http://prometheus-k8s-system.kubesphere-monitoring-system.svc:9090
redis:
  host: redis.kubesphere-system.svc
  port: 6379
  password: ""
  db: 0

在运行telepresence之前,有个大坑提前预警

运行网真时异常退出可能会造成deployment没有正常swapping回去,以至于原来的ks-apiserver的pod丢失
正确退出方式见文末

KubeSphere启用istio_kubesphere_04


KubeSphere启用istio_python_05

# 获取生成ks-apiserver的deployment的yaml保存为ks-apiserver.yaml
$ kubectl get  deployment -n  kubesphere-system ks-apiserver -o yaml > ks-apiserver.yaml
# 赋权
$ chmod +x ks-apiserver.yaml

7.运行Telepresence(示例)

# 7.运行Telepresence
$ telepresence  --also-proxy=[ks-apiserver的svc的ip,如下] --namespace kubesphere-system --swap-deployment ks-apiserver --expose 9090:9090 --run go run ./cmd/ks-apiserver/apiserver.go

KubeSphere启用istio_github_06

4.常见问题

1.由Telepresence创出来的这个pod报错ErrImagePull 检查该pod镜像下载成功没有,集群中的每个节点都要检查 代理pod可能会调度到集群中的任意节点,一旦那个节点没有镜像又下载失败就会报错

KubeSphere启用istio_github_07

2.运行telepresence总是自动退出
首先检查telepresence.log

3.报错telepresence invalid configuration: no configuration has been provided
检查kubesphere.yaml配置全没有

4.如何退出网真代理调式 ctrl+c或者crtl+break

KubeSphere启用istio_KubeSphere启用istio_08


这样会正常删除网真起的代理pod,并且将deployment swapping回去

5.如果网真异常退出怎么办?
杀掉占用9090端口进程并手动删除网真起的代理pod
去ks-installer的pod里面找到ks-apiserver deployment的yaml文件,重新执行

后端代码调试

暂时不得空玩这个……先搁着