云原生|kubernetes|centos下安装部署kubeapps以及简单的使用示例

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 云原生|kubernetes|centos下安装部署kubeapps以及简单的使用示例

前言:

kubeapps是Bitnami公司的一个项目,其目的是为Kubernetes的使用者们提供已经打包好的应用仪表盘,它拥有网页界面可以更方便的部署和管理k8s 原生应用。

包含绝大多数的云原生应用管理应用-部署,删除,升级以及修改配置服务目录-(Service Catalog)是一种扩展api,它能让 Kubernetes 集群中运行的应用易于使用外部托管的的软件服务,例如云供应商提供的数据仓库服务。

说了这么多,其实估计很多同学还是云山雾罩的,OK,宝塔面板大家应该都知道的吧,可以把kubeapps想象成这个玩意----kubernetes里的宝塔面板,只是这个“面板”管理的是chart包而已了。

部署安装kubeapps

一,

kubeapps的部署比较简单,基本也就是几条命令就搞定了。主要是有一些先决条件,例如,helm包管理器这个 不用说肯定要有,如何安装helm就不在这里废话了。

添加helm的官方仓库:

# 添加 kubeapps 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 创建 kubeapps 的命名空间
kubectl create namespace kubeapps

此时,可以查询到现有helm仓库一个(名字是bitnami,前面定义的):

[root@k8s-master ~]# helm repo list
NAME    URL                               
bitnami https://charts.bitnami.com/bitnami

查询此仓库内所有的关于redis的chart(helm search repo  仓库名称/要查询的chart  -l  如果没有l,只显示最新的那个chart):

[root@k8s-master kubeapps]# helm search repo bitnami/redis  -l 
NAME                  CHART VERSION APP VERSION DESCRIPTION                                       
bitnami/redis         17.3.5        7.0.5       Redis(R) is an open source, advanced key-value ...
bitnami/redis         17.3.4        7.0.5       Redis(R) is an open source, advanced key-value ...
bitnami/redis         17.3.2        7.0.5       Redis(R) is an open source, advanced key-value ...
bitnami/redis         17.3.1        7.0.5       Redis(R) is an open source, advanced key-value ...
bitnami/redis         17.2.0        7.0.5       Redis(R) is an open source, advanced key-value ...
。。。。。。略略略

查询此仓库内所有的关于kubeapps的chart(helm search repo  仓库名称/要查询的chart  -l  如果没有l,只显示最新的那个chart):

[root@k8s-master kubeapps]# helm search repo bitnami/kubeapps  -l 
NAME              CHART VERSION APP VERSION DESCRIPTION                                       
bitnami/kubeapps  11.0.1        2.6.0       Kubeapps is a web-based UI for launching and ma...
bitnami/kubeapps  10.3.5        2.5.1       Kubeapps is a web-based UI for launching and ma...
bitnami/kubeapps  10.3.4        2.5.1       Kubeapps is a web-based UI for launching and ma...
bitnami/kubeapps  10.3.3        2.5.1       Kubeapps is a web-based UI for launching and ma...
bitnami/kubeapps  10.3.1        2.5.0       Kubeapps is a web-based UI for launching and ma...

考虑到我的kubernetes集群版本是1.18,因此,挑选了一个不是版本太高的kubeapps---kubeapps-8.0.9,下载此chart包,并进入解压后的目录:

[root@k8s-master kubeapps]# helm pull bitnami/kubeapps --version=8.0.9

查看chart包内的README.MD文件中的先决条件:

kubernetes版本必须大于1.16,安装方式不限定,比如,minikube什么的都支持。

helm版本必须大于3.0.2.。

pgsql需要有pv插件支持,也就是volume插件。因此,需要一个默认的StorageClass,如何部署StorageClass请看我的博客:

kubernetes学习之持久化存储StorageClass(4)_晚风_END的博客-CSDN博客_kubernetes中用于持久化存储的组件

我的kubernetes版本是1.18.3,helm版本是3.2,因此,我可以安装kubeapps-8.0.9版本。

[root@k8s-master ~]# k get no
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    <none>   15d   v1.18.3
k8s-node1    Ready    <none>   15d   v1.18.3
k8s-node2    Ready    <none>   15d   v1.18.3
[root@k8s-master ~]# helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}

下面是chart里面的README里的先决条件原文:

## Prerequisites
- Kubernetes 1.16+ (tested with both bare-metal and managed clusters, including EKS, AKS, GKE and Tanzu Kubernetes Grid, as well as dev clusters, such as Kind, Minikube and Docker for Desktop Kubernetes)
- Helm 3.0.2+
- Administrative access to the cluster to create Custom Resource Definitions (CRDs)
- PV provisioner support in the underlying infrastructure (required for PostgreSQL database)

二,

OK,以上的先决条件搞定了就可以安装了,安装命令为:

# 安装
helm install kubeapps --namespace kubeapps kubeapps-8.0.9.tgz --version=8.0.9

安装时间根据网速来,可能会比较长,因为镜像都是从docker.io 官网下载的,安装完毕后的kubeapps相关的pod,service,configMap,serviceaccount,pv,pvc:

相关pods和service

[root@k8s-master ~]# k get po,svc -n kubeapps
NAME                                                             READY   STATUS      RESTARTS   AGE
pod/apprepo-kubeapps-sync-bitnami-1666098000-gr5ql               0/1     Completed   0          24h
pod/apprepo-kubeapps-sync-bitnami-1666098600-n5txd               0/1     Completed   0          24h
pod/apprepo-kubeapps-sync-bitnami-1666099200-js2nw               0/1     Completed   0          23h
pod/apprepo-kubeapps-sync-bitnami-hxm68-pgmk4                    0/1     Completed   2          5h28m
pod/kubeapps-67887978f5-vcbmh                                    1/1     Running     1          25h
pod/kubeapps-67887978f5-xsx7c                                    1/1     Running     2          25h
pod/kubeapps-internal-apprepository-controller-6d84d4d78-b2cjc   1/1     Running     1          25h
pod/kubeapps-internal-dashboard-84875db4c5-jdmmt                 1/1     Running     1          25h
pod/kubeapps-internal-dashboard-84875db4c5-zsrcl                 1/1     Running     1          25h
pod/kubeapps-internal-kubeappsapis-65c55c5c86-5kpq6              1/1     Running     1          25h
pod/kubeapps-internal-kubeappsapis-65c55c5c86-tjsw7              1/1     Running     1          25h
pod/kubeapps-internal-kubeops-bb7899866-kh8vx                    1/1     Running     1          25h
pod/kubeapps-internal-kubeops-bb7899866-sqk9p                    1/1     Running     1          25h
pod/kubeapps-postgresql-primary-0                                1/1     Running     1          25h
pod/kubeapps-postgresql-read-0                                   1/1     Running     2          25h
pod/mydokuwiki-79477dbcf7-hqk74                                  1/1     Running     0          5h9m
NAME                                     TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/kubeapps                         NodePort       10.0.214.168   <none>        80:31637/TCP                 25h
service/kubeapps-internal-dashboard      NodePort       10.0.175.52    <none>        8080:31171/TCP               25h
service/kubeapps-internal-kubeappsapis   ClusterIP      10.0.17.79     <none>        8080/TCP                     25h
service/kubeapps-internal-kubeops        ClusterIP      10.0.80.30     <none>        8080/TCP                     25h
service/kubeapps-postgresql-primary      ClusterIP      10.0.49.36     <none>        5432/TCP                     25h
service/kubeapps-postgresql-primary-hl   ClusterIP      None           <none>        5432/TCP                     25h
service/kubeapps-postgresql-read         ClusterIP      10.0.126.247   <none>        5432/TCP                     25h
service/kubeapps-postgresql-read-hl      ClusterIP      None           <none>        5432/TCP                     25h
service/mydokuwiki                       LoadBalancer   10.0.184.105   <pending>     80:30403/TCP,443:30783/TCP   5h9m

pv和pvc

[root@k8s-master ~]# k get pv,pvc -n kubeapps
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                         STORAGECLASS          REASON   AGE
persistentvolume/pvc-1e943d44-d92d-4210-a52a-5f9b0143bbc7   8Gi        RWO            Delete           Bound    kubeapps/data-kubeapps-postgresql-primary-0   managed-nfs-storage            25h
persistentvolume/pvc-c2a706ee-e9a0-4db1-b9e5-3f4d6a0d21ea   8Gi        RWO            Delete           Bound    kubeapps/mydokuwiki                           managed-nfs-storage            5h10m
persistentvolume/pvc-e75f653e-cbef-460d-bb68-e791f552bfc7   8Gi        RWO            Delete           Bound    kubeapps/data-kubeapps-postgresql-read-0      managed-nfs-storage            25h
NAME                                                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
persistentvolumeclaim/data-kubeapps-postgresql-primary-0   Bound    pvc-1e943d44-d92d-4210-a52a-5f9b0143bbc7   8Gi        RWO            managed-nfs-storage   25h
persistentvolumeclaim/data-kubeapps-postgresql-read-0      Bound    pvc-e75f653e-cbef-460d-bb68-e791f552bfc7   8Gi        RWO            managed-nfs-storage   25h
persistentvolumeclaim/mydokuwiki                           Bound    pvc-c2a706ee-e9a0-4db1-b9e5-3f4d6a0d21ea   8Gi        RWO            managed-nfs-storage   5h10m

相关的sa,secret

[root@k8s-master ~]# k get sa,secret -n kubeapps
NAME                                                        SECRETS   AGE
serviceaccount/default                                      1         26h
serviceaccount/kubeapps-internal-apprepository-controller   1         25h
serviceaccount/kubeapps-internal-kubeappsapis               1         25h
serviceaccount/kubeapps-internal-kubeops                    1         25h
serviceaccount/kubeapps-operator                            1         24h
NAME                                                            TYPE                                  DATA   AGE
secret/default-token-f4pvj                                      kubernetes.io/service-account-token   3      26h
secret/kubeapps-internal-apprepository-controller-token-tpn7j   kubernetes.io/service-account-token   3      25h
secret/kubeapps-internal-kubeappsapis-token-cgvmg               kubernetes.io/service-account-token   3      25h
secret/kubeapps-internal-kubeops-token-cq2ql                    kubernetes.io/service-account-token   3      25h
secret/kubeapps-operator-token-qfxsx                            kubernetes.io/service-account-token   3      24h
secret/kubeapps-postgresql                                      Opaque                                2      25h
secret/mydokuwiki                                               Opaque                                1      5h12m
secret/sh.helm.release.v1.kubeapps.v1                           helm.sh/release.v1                    1      25h
secret/sh.helm.release.v1.mydokuwiki.v1                         helm.sh/release.v1                    1      5h12m

相关的configMap

[root@k8s-master ~]# k get cm -n kubeapps
NAME                                       DATA   AGE
kubeapps-clusters-config                   1      25h
kubeapps-frontend-config                   2      25h
kubeapps-internal-dashboard-config         5      25h
kubeapps-internal-kubeappsapis-configmap   1      25h

相关的控制器,可以看到postgresql是sts控制器,

[root@k8s-master ~]# k get deploy,ds,sts -n kubeapps
NAME                                                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kubeapps                                     2/2     2            2           25h
deployment.apps/kubeapps-internal-apprepository-controller   1/1     1            1           25h
deployment.apps/kubeapps-internal-dashboard                  2/2     2            2           25h
deployment.apps/kubeapps-internal-kubeappsapis               2/2     2            2           25h
deployment.apps/kubeapps-internal-kubeops                    2/2     2            2           25h
deployment.apps/mydokuwiki                                   1/1     1            1           5h13m
NAME                                           READY   AGE
statefulset.apps/kubeapps-postgresql-primary   1/1     25h
statefulset.apps/kubeapps-postgresql-read      1/1     25h

helm install后的输出,提示要port-forward端口,但,我们这是测试,因此,采用NodePort方式暴露服务端口

[root@k8s-master ~]# helm status kubeapps -n kubeapps
NAME: kubeapps
LAST DEPLOYED: Tue Oct 18 20:05:10 2022
NAMESPACE: kubeapps
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kubeapps
CHART VERSION: 8.0.9
APP VERSION: 2.4.4** 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"
   kubectl port-forward --namespace kubeapps service/kubeapps 8080:80
2. Open a browser and access Kubeapps using the obtained URL.

三,

修改service/kubeapps 为NodePort端口模式,其实也可以不修改,直接使用ingress控制器,但,测试性质,过于麻烦。

k edit svc kubeapps -n kubeapps
  selector:
    app.kubernetes.io/component: frontend
    app.kubernetes.io/instance: kubeapps
    app.kubernetes.io/name: kubeapps
  sessionAffinity: None
  type: NodePort
最后一行ClusterIP 修改为NodePort 保存即可。

暴露的端口为31637,打开浏览器,任意的节点IP+31637即可进入kubeapps

NAME                             TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
kubeapps                         NodePort       10.0.214.168   <none>        80:31637/TCP                 25h

四,

部署成功后的演示

登录后的界面是这样的,这个界面比较简洁,就两个模块,一个是应用程序---application,一个是目录catalog---这个相当于helm的应用商店,从部署kubeapps成功开始后,再使用helm安装的程序将会显示在application这个组件下了:

例如,在目录这个模块下,选择cms,将可以看到bitnami 这个官方仓库下的所有cms类型,比较熟悉的WordPress,ghost等等都可以看到。

就以安装WordPress为例,介绍一哈web界面急速安装cmd吧:

设置要安装的WordPress的版本和要安装到哪个namespace以及哪个kubernetes集群内:

 

设置WordPress的账号密码以及资源限制等等信息

 

就这么简简单单的安装好了WordPress,看一下各种信息:

[root@k8s-master ~]# k get po,svc,cm,deploy,sts,ds,pvc -n web
NAME                              READY   STATUS    RESTARTS   AGE
pod/mywordpress-57fc6bbb9-q86jp   2/2     Running   5          49m
pod/mywordpress-mariadb-0         1/1     Running   0          49m
NAME                          TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
service/mywordpress           NodePort    10.0.58.85    <none>        80:31292/TCP,443:31469/TCP   49m
service/mywordpress-mariadb   ClusterIP   10.0.163.97   <none>        3306/TCP                     49m
service/mywordpress-metrics   ClusterIP   10.0.131.36   <none>        9150/TCP                     49m
NAME                            DATA   AGE
configmap/mywordpress-mariadb   1      49m
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mywordpress   1/1     1            1           49m
NAME                                   READY   AGE
statefulset.apps/mywordpress-mariadb   1/1     49m
NAME                                               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
persistentvolumeclaim/data-mywordpress-mariadb-0   Bound    pvc-d373bb9c-3e7a-4593-9d07-328edb5717f0   8Gi        RWO            managed-nfs-storage   50m
persistentvolumeclaim/mywordpress                  Bound    pvc-8f78ab1c-5507-484d-8a6e-40894239184d   10Gi       RWO            managed-nfs-storage   50m

WordPress的后台页面:

kubeapps的应用展示界面,可以看到多了一个WordPress

要删除此应用也非常简单,一个按钮就搞定了:

 总结:

kubeapps安装是比较简单的,看起来比较简单的原因是我这里只是测试,很多功能没有使用,比如ingress-controller插件没有启用。但一个默认的StorageClass存储类还是需要的,可以减少很多不必要的麻烦。如果是生产上使用这个kubeapps,那么,还是需要完善增加很多功能的哦。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
9天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
38 2
|
1月前
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
122 60
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
213 62
|
9天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
34 1
|
13天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
14天前
|
存储 运维 Kubernetes
云原生之旅:Kubernetes的弹性与可扩展性探索
【10月更文挑战第32天】在云计算的浪潮中,云原生技术以其独特的魅力成为开发者的新宠。本文将深入探讨Kubernetes如何通过其弹性和可扩展性,助力应用在复杂环境中稳健运行。我们将从基础架构出发,逐步揭示Kubernetes集群管理、服务发现、存储机制及自动扩缩容等核心功能,旨在为读者呈现一个全景式的云原生平台视图。
27 1
|
19天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
56 4
|
20天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
55 3
|
20天前
|
监控 Cloud Native 持续交付
云原生技术深度解析:重塑现代应用开发与部署范式####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在现代软件开发中的重要性。通过剖析容器化、微服务架构、持续集成/持续部署(CI/CD)等关键技术,本文旨在揭示云原生技术如何促进应用的敏捷性、可扩展性和高可用性,进而推动企业数字化转型进程。不同于传统摘要仅概述内容要点,本部分将融入具体案例分析,直观展示云原生技术在实际应用中的显著成效与挑战应对策略,为读者提供更加丰富、立体的理解视角。 ####