1 Kubeapps介绍
Kubeapps提供了一个开源的Helm UI界面,方便以图形界面的形式管理Helm应用。
部署应用。可从公共或私有仓库中浏览chart并将其部署到集群中;
管理应用。升级、管理和删除部署在kubernetes集群中的应用程序;
搜索功能。Kubeapps提供chart搜索页面;
2 使用helm部署kubeapps
[root@k8s-master01 ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
[root@k8s-master01 ~]# helm repo list
NAME URL
micosoft http://mirror.azure.cn/kubernetes/charts/
prometheus-community https://prometheus-community.github.io/helm-charts
harborhelm https://www.kubemsb.com/chartrepo/nginx
bitnami https://charts.bitnami.com/bitnami
[root@k8s-master01 ~]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "harborhelm" chart repository
...Successfully got an update from the "prometheus-community" chart repository
...Successfully got an update from the "micosoft" chart repository
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈
[root@k8s-master01 ~]# helm search repo kubeapps
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/kubeapps 10.0.2 2.4.6 Kubeapps is a web-based UI for launching and ma...
[root@k8s-master01 ~]# kubectl create ns kubeapps
namespace/kubeapps created
[root@k8s-master01 ~]# helm install kubeapps bitnami/kubeapps --namespace kubeapps
输出信息:
NAME: kubeapps
LAST DEPLOYED: Sun Jul 31 00:00:03 2022
NAMESPACE: kubeapps
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kubeapps
CHART VERSION: 10.0.2
APP VERSION: 2.4.6** 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.
[root@k8s-master01 ~]# kubectl get pods -n kubeapps
NAME READY STATUS RESTARTS AGE
apprepo-kubeapps-sync-bitnami-w5jlr-6nvsl 1/1 Running 0 30s
kubeapps-994b988b5-dlp9r 1/1 Running 0 96s
kubeapps-994b988b5-ttxv8 1/1 Running 0 96s
kubeapps-internal-apprepository-controller-c78bf86bc-lcpz2 1/1 Running 0 96s
kubeapps-internal-dashboard-6445c69c6b-fgkrs 1/1 Running 0 96s
kubeapps-internal-dashboard-6445c69c6b-phmxn 1/1 Running 0 96s
kubeapps-internal-kubeappsapis-c5d8cbb7f-6rnnl 1/1 Running 0 96s
kubeapps-internal-kubeappsapis-c5d8cbb7f-9jthp 1/1 Running 0 96s
kubeapps-internal-kubeops-58794f58c8-bkjtc 1/1 Running 0 96s
kubeapps-internal-kubeops-58794f58c8-qk655 1/1 Running 0 96s
kubeapps-postgresql-0 1/1 Running 0 96s
[root@k8s-master01 ~]# kubectl get svc -n kubeapps
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubeapps ClusterIP 10.96.2.39 <none> 80/TCP 2m18s
kubeapps-internal-dashboard ClusterIP 10.96.1.130 <none> 8080/TCP 2m18s
kubeapps-internal-kubeappsapis ClusterIP 10.96.2.40 <none> 8080/TCP 2m18s
kubeapps-internal-kubeops ClusterIP 10.96.3.116 <none> 8080/TCP 2m18s
kubeapps-postgresql ClusterIP 10.96.0.235 <none> 5432/TCP 2m18s
kubeapps-postgresql-hl ClusterIP None <none> 5432/TCP 2m18s
3 访问kubeapps
[root@k8s-master01 ~]# vim kubeapps-ingress.yaml
[root@k8s-master01 ~]# cat kubeapps-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-kubeapps #自定义ingress名称
namespace: kubeapps
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: kubeapps.kubemsb.com # 自定义域名
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: kubeapps # 对应上面创建的service名称
port:
number: 80
[root@k8s-master01 ~]# kubectl apply -f kubeapps-ingress.yaml
ingress.networking.k8s.io/ingress-kubeapps created
参考链接:https://kubeapps.dev/docs/latest/tutorials/getting-started/
创建用户
[root@k8s-master01 ~]# kubectl create --namespace default serviceaccount kubeapps-operator
serviceaccount/kubeapps-operator created
绑定集群管理员角色
[root@k8s-master01 ~]# kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator
clusterrolebinding.rbac.authorization.k8s.io/kubeapps-operator created
[root@k8s-master01 ~]# cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kubeapps-operator-token
namespace: default
annotations:
kubernetes.io/service-account.name: kubeapps-operator
type: kubernetes.io/service-account-token
EOF
输出:
secret/kubeapps-operator-token created
获取访问token
[root@k8s-master01 ~]# kubectl get --namespace default secret kubeapps-operator-token -o jsonpath='{.data.token}' -o go-template='{{.data.token | base64decode}}' && echo
eyJhbGciOiJSUzI1NiIsImtpZCI6ImRneWtqS2s2OWFsZU94UklERWh5SlhMSk56SUZZQzZOYlhHbUZIaDZpcTQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYjgzMjM3MDAtODI3MC00ODI5LWFmNmUtODg3N2FlNGM4OWQ3Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.NF4A7N394MwcRDQbHOTkahg_ODqi7OCV9CzP7zcb5kXwHo-DeQ20cf7CTYmyQCw1aKaYae-Vdi_ncJ9araSdapshoBX9zfQ4dl6rP6Z_g_rtHZBIe4rCopOPUqncY-OjonQL1R0MY8ODqE2BVPF3kHwcBnamT9c1nmib42fB_cIBqwu72c71LURvQifwiluriQZRJQWh20pM7p8aUkNXqvFId03iMdgmPXdOd5W2Kl1Rys2DUfPmRV1tmqXHuZOcMnHmSU7DzcaXcnoGesZUnB7sqtL2HhTn7iLnk323MaXzhNY5pWt2nZC-6U2ZFkPSkV2LZ1K6D2IxaImkZxRPVQ
4 通过kubeapps部署应用案例
4.1 通过Kubeapps部署nginx
[root@k8s-master01 nginx]# kubectl get pods -n kubeapps
NAME READY STATUS RESTARTS AGE
......
kubemsb-web-nginx-55fdb5bfd6-4cfpg 1/1 Running 0 57s
4.2 通过kubeapps部署mysql
[root@k8s-master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
kubemsb-web-db-mysql-primary-0 1/1 Running 0 5h29m
kubemsb-web-db-mysql-secondary-0 1/1 Running 0 5h29m
评论区