1. 情况说明

使用一台VMWare Workstation虚拟机,4核8G内存,50G磁盘

已安装KubeSphere 2.1 版本,已经按照官方文档的入门必读,示例一创建好相应的账号信息等

KubeSphere 文档地址:https://kubesphere.com.cn/docs/v2.1/zh-CN/introduction/intro/

2. 实现的效果

kubeapps官方文档地址:https://github.com/kubeapps/kubeapps

想使用kubeapps,通过helm管理部署在k8s集群的应用,部署,升级,回退版本等

同时可以在KubeSphere中查看部署的应用等

3. 步骤

(1).要求

  • k8s集群版本:1.8+
  • Helm版本:2.14.0+
  • 已安装kubectl

KubeSphere 2.1 版本安装的k8s集群是1.15.5版本,helm版本是2.14.3,已安装kubectl,符合上述要求

[root@ks-allinone ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.5", GitCommit:"20c265fef0741dd71a66480e35bd69f18351daea", GitTreeState:"clean", BuildDate:"2019-10-15T19:07:57Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.5", GitCommit:"20c265fef0741dd71a66480e35bd69f18351daea", GitTreeState:"clean", BuildDate:"2019-10-15T19:07:57Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
[root@ks-allinone ~]# helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}

(2) 安装kubeapps

# 查看helm仓库
[root@ks-allinone ~]# helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com
local http://127.0.0.1:8879/charts # 添加helm仓库
[root@ks-allinone ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories # 再次查看helm仓库
[root@ks-allinone ~]# helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com
local http://127.0.0.1:8879/charts
bitnami https://charts.bitnami.com/bitnami # 开始安装,使用单独的命名空间
[root@ks-allinone ~]# helm install --name kubeapps --namespace kubeapps bitnami/kubeapps
NAME: kubeapps
LAST DEPLOYED: Tue Nov 19 15:32:55 2019
NAMESPACE: kubeapps
STATUS: DEPLOYED RESOURCES:
==> v1/ConfigMap
NAME DATA AGE
kubeapps-frontend-config 1 5s
kubeapps-internal-dashboard-config 2 5s ==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
kubeapps 0/2 2 0 5s
kubeapps-internal-apprepository-controller 0/1 1 0 5s
kubeapps-internal-chartsvc 0/2 2 0 5s
kubeapps-internal-dashboard 0/2 2 0 5s
kubeapps-internal-tiller-proxy 0/2 2 0 4s
kubeapps-mongodb 0/1 1 0 5s ==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
kubeapps-76bfb9557f-97f2g 0/1 ContainerCreating 0 4s
kubeapps-76bfb9557f-gj8nl 0/1 Pending 0 4s
kubeapps-internal-apprepository-controller-6764b79b6b-tv76f 0/1 ContainerCreating 0 4s
kubeapps-internal-chartsvc-677b745bb9-nqw4j 0/1 ContainerCreating 0 4s
kubeapps-internal-chartsvc-677b745bb9-wwdrl 0/1 ContainerCreating 0 4s
kubeapps-internal-dashboard-87f979fd7-chwsr 0/1 ContainerCreating 0 4s
kubeapps-internal-dashboard-87f979fd7-jl76k 0/1 ContainerCreating 0 4s
kubeapps-internal-tiller-proxy-57c4d9c6dd-2gwwq 0/1 ContainerCreating 0 4s
kubeapps-internal-tiller-proxy-57c4d9c6dd-tg2n8 0/1 ContainerCreating 0 4s
kubeapps-mongodb-788ff89fd9-wp8dq 0/1 ContainerCreating 0 4s ==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubeapps ClusterIP 10.233.32.3 <none> 80/TCP 5s
kubeapps-internal-chartsvc ClusterIP 10.233.33.159 <none> 8080/TCP 5s
kubeapps-internal-dashboard ClusterIP 10.233.16.70 <none> 8080/TCP 5s
kubeapps-internal-tiller-proxy ClusterIP 10.233.4.189 <none> 8080/TCP 5s
kubeapps-mongodb ClusterIP 10.233.30.14 <none> 27017/TCP 5s ==> v1/ServiceAccount
NAME SECRETS AGE
kubeapps-internal-apprepository-controller 1 5s
kubeapps-internal-tiller-proxy 1 5s ==> v1beta1/Role
NAME AGE
kubeapps-internal-apprepository-controller 5s
kubeapps-internal-tiller-proxy 5s
kubeapps-repositories-read 5s
kubeapps-repositories-write 5s ==> v1beta1/RoleBinding
NAME AGE
kubeapps-internal-apprepository-controller 5s
kubeapps-internal-tiller-proxy 5s NOTES:
** Please be patient while the chart is being deployed ** Tip: Watch the deployment status using the command: kubectl get pods -w --namespace kubeapps Kubeapps can be accessed via port 80 on the following DNS name from within your cluster: kubeapps.kubeapps.svc.cluster.local To access Kubeapps from outside your K8s cluster, follow the steps below: 1. Get the Kubeapps URL by running these commands:
echo "Kubeapps URL: http://127.0.0.1:8080"
export POD_NAME=$(kubectl get pods --namespace kubeapps -l "app=kubeapps" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace kubeapps $POD_NAME 8080:8080 2. Open a browser and access Kubeapps using the obtained URL. # 然后操作步骤如下:
export POD_NAME=$(kubectl get pods --namespace kubeapps -l "app=kubeapps" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace kubeapps $POD_NAME 8080:8080 # 查看kubeapps命名空间的pod情况,需要等所有的pod状态是running或Completed才行
[root@ks-allinone ~]# kubectl get pods --namespace kubeapps
NAME READY STATUS RESTARTS AGE
apprepo-sync-bitnami-1574149200-glnhg 0/1 ContainerCreating 0 10s
apprepo-sync-bitnami-fqhnh-jx7g9 1/1 Running 3 3m51s
apprepo-sync-incubator-1574149200-lbdjz 0/1 ContainerCreating 0 10s
apprepo-sync-incubator-5glkx-v8w5l 0/1 Completed 3 3m51s
apprepo-sync-stable-1574149200-bjfnh 0/1 ContainerCreating 0 10s
apprepo-sync-stable-z2vlh-4f2kv 1/1 Running 0 3m51s
apprepo-sync-svc-cat-1574149200-5kmj7 0/1 ContainerCreating 0 10s
apprepo-sync-svc-cat-274bp-5b2zd 0/1 Completed 0 3m51s
kubeapps-76bfb9557f-97f2g 1/1 Running 0 7m20s
kubeapps-76bfb9557f-gj8nl 1/1 Running 0 7m20s
kubeapps-internal-apprepository-controller-6764b79b6b-tv76f 1/1 Running 0 7m20s
kubeapps-internal-chartsvc-677b745bb9-nqw4j 1/1 Running 0 7m20s
kubeapps-internal-chartsvc-677b745bb9-wwdrl 1/1 Running 0 7m20s
kubeapps-internal-dashboard-87f979fd7-chwsr 1/1 Running 0 7m20s
kubeapps-internal-dashboard-87f979fd7-jl76k 1/1 Running 0 7m20s
kubeapps-internal-tiller-proxy-57c4d9c6dd-2gwwq 1/1 Running 0 7m20s
kubeapps-internal-tiller-proxy-57c4d9c6dd-tg2n8 1/1 Running 0 7m20s
kubeapps-mongodb-788ff89fd9-wp8dq 1/1 Running 0 7m20s

(3) 设置kubeapps访问k8s集群权限

[root@ks-allinone ~]# kubectl create serviceaccount kubeapps-operator
serviceaccount/kubeapps-operator created [root@ks-allinone ~]# kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator
clusterrolebinding.rbac.authorization.k8s.io/kubeapps-operator created # 获取访问k8s api的token
[root@ks-allinone ~]# kubectl get secret $(kubectl get serviceaccount kubeapps-operator -o jsonpath='{range .secrets[*]}{.name}{"\n"}{end}' | grep kubeapps-operator-token) -o jsonpath='{.data.token}' -o go-template='{{.data.token | base64decode}}' && echo
# 记住这个token,访问dashboard界面登陆时需要用
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuLTZ3aGJnIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZjAzYzUxMWYtNThhZi00YTNjLWE5NzctMzE2YmRkMDA1MTZiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.xmLLkX3x91HKUilTLnVEyblnAQ0HwW-J__6geg0KOrkB35_gRkKMGp8ftl7vT5KEWRyW8fyAIJHc2LEo8uLGSbsQDzvuUxEBnvUzcgsrOR03Idh8cTdsgpynNnyhlLGCqEq-fBn-8HUCap4B4c00NXImD3BhtkJ6PCy0CfrnQyua1qXR6RqqRH0epIedxsNAGGvFgKmeYO2Eq_04BKsmEMRkcBbGXx848O_6izBW7kHc9lfSEUfFwvrCs1YXBWJk7UGrh9lmlt1U-3BjFAXg-7hC74kx-G1Mj_Z2cxhnJ4W6XckphxE5NPBeoDow0GcD7jx4C4QkzX7fQXrKaKyYPQ

(4) 在KubeSphere中设置kubeapps等

  1. 使用集群管理员账号登陆,在工作台界面会查看到有一个项目,名称是kubeapps,但是没有分配企业空间。

    创建名称是kubeapps的企业空间,然后再返回到该界面,点击右边的三个竖点,分配企业空间,把项目kubeapps分配到企业空间kubeapps
  2. 点击项目名称kubeapps,进入项目详情界面。

    先在项目设置,高级设置中开启外放访问,使用NodePort。

    然后在应用负载的服务界面,点击kubeapps,更多操作,编辑外网访问,访问方式是NodePort。此时右边会出现"点击访问"按钮,点击这个开始访问kubeapps的dashboard web界面,输入上一步的token值即可登陆进去

4. 使用kubeapps

  • 可以添加仓库地址,点击"Configuration"中的App Repositories
  • 在Applications界面,选择不同的NAMESPACE,可以显示安装的应用
  • 选择"Catalog"可以查看仓库中的应用,直接部署到k8s中进行使用,同时可以在KubeSphere中查看管理

在KubeSphere中部署Kubeapps的更多相关文章

  1. 容器化 | 在 KubeSphere 中部署 MySQL 集群

    程润科 数据库研发工程师,目前从事 RadonDB MySQL Kubernetes 研发,热衷于研究数据库内核.K8s 相关技术. 张莉梅 高级文档工程师,目前负责数据库产品文档开发.维护和管理工作 ...

  2. 【续集】在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题

    dudu 的一篇博文:在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题 针对 IIS 部署 ASP.NET 5 应用程序的问题,在上面博文中主要采用两种方式尝试: VS2015 的 Publ ...

  3. Intellij IDEA 创建Web项目并在Tomcat中部署运行(不使用maven)【转载】

    原文链接:http://www.thinksaas.cn/topics/0/350/350000.html 一.创建Web项目 1.File -> New Module,进入创建项目窗口 2.选 ...

  4. Eclipse中部署hadoop2.3.0

    1 eclipse中hadoop环境部署概览 eclipse 中部署hadoop包括两大部分:hdfs环境部署和mapreduce任务执行环境部署.一般hdfs环境部署比较简单,部署后就 可以在ecl ...

  5. 【转】Tomcat中部署java web应用程序

    http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...

  6. Intellij IDEA 创建Web项目并在Tomcat中部署运行

      一.创建Web项目 1.File -> New Module,进入创建项目窗口 2.选择Java类型,在 Module name 处输入项目名,点击Next 3.勾选 Web Applica ...

  7. 在Tomcat中部署Java Web应用程序

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  8. 在net安装程序中部署oracle客户端全攻略

    在net安装程序中部署oracle客户端全攻略 主要的是要做三件工作: 打包文件,写注册表,注册环境变量说明:我的oracle版本为9, 在2000 advanced server 上测试通过,可以正 ...

  9. 如何在IIS6,7中部署ASP.NET网站

    http://www.cnblogs.com/fish-li/archive/2012/02/26/2368989.html 阅读目录 开始 查看web.config文件 在IIS中创建网站 IIS6 ...

随机推荐

  1. LOJ6609 无意识的石子堆【加强版】【容斥原理,计数】

    题目描述:在一个\(n\times m\)的网格中,放\(2n\)个棋子,使每一行和每一列都不超过两个棋子.求方案数\(\mathrm{mod} \ 943718401\). 数据范围:\(n\le ...

  2. 【luoguP1414]】又是毕业季II

    题目链接 \(solution\) 暴力求每个数有多少个倍数,从大到小,数\(i\)的倍数有\(f_i\)个,那么选\(1\)~\(f_i\)个同学的答案可以为\(i\),取第一次更新的答案最大 #i ...

  3. Linux查看当前操作系统版本信息

    .Linux查看当前操作系统版本信息 cat /proc/version Linux version -.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gc ...

  4. MySQL的ROUND函数

    ROUND(X) ROUND(X,D) 返回参数X, 其值接近于最近似的整数.在有两个参数的情况下,返回 X ,其值保留到小数点后D位,而第D位的保留方式为四舍五入.若要接保留X值小数点左边的D 位, ...

  5. CentOS7 通过systemd 添加开机重启服务

    现在越来越多的环境采用 CentOS 7 作为基础配置,特别是 Hadoop生态 如果要测试或部署环境需要启动很多组件(zookeeper.kafka.redis等等),如下内容是在操作系统层实现开机 ...

  6. 数据仓库DW、ODS、DM概念及其区别

    整体结构 在具体分析数据仓库之前先看下一下数据中心的整体架构以及数据流向   数据中心整体架构.png DB 是现有的数据来源,可以为mysql.SQLserver.文件日志等,为数据仓库提供数据来源 ...

  7. tomcat启动报错java.lang.OutOfMemoryError:PermGen space解决办法

    tomcat启动错误提示: 严重: Error waiting for multi-thread deployment of WAR files to completejava.util.concur ...

  8. Oracle定时任务执行存储过程备份日志记录表

    写在前面 需求 1.备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T_S_LOG_BAK作为备份表 ...

  9. elementUI 的el-dialog作为子组件,父组件如何控制其关闭的按钮

    这里有三点需要说明: 1. 使用:before-close="closeHandle" 将其 $emit() 出去 2. 取消按钮 也需要$emeit出去 3. 控制对话框显示隐藏 ...

  10. 基于EasyNVR摄像机无插件直播方案二次开发实现自己的摄像机IPC-NVR无插件化直播解决方案

    背景介绍 在之前的博客中<基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控>,对EasyNVR所实现的功能我们已经有较多描述,这些也在方案地址:http://ww ...