暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Helm 可视化 UI — Kubeapps

ProdanLabs 2021-05-13
3362

Kubeapps 是基于 Web 的 Helm 应用商店,用于在 Kubernetes 集群中部署和管理应用程序,从 Helm Chart 仓库中浏览并部署 Helm Chart 应用、管理集群中已有 Helm chart 应用的升级和卸载等。


01

安装 Kubeapps

Kubernetes 的版本需要 1.15+,helm 版本 3.10 +

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

注:kubeapps 的数据默认没有持久化,可以通过下列参数开启

--set postgresql.persistence.enabled=true --set postgresql.persistence.storageClass={$storageClassName}


创建 serviceaccount 并进行角色绑定Kubeapps 用于向 Kubernetes API 进行身份验证

kubectl create --namespace default serviceaccount kubeapps-operator
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator


安装时没有开启 ingress ,这里需要开放对外访问

# 使用 port-forward 的方式
kubectl port-forward -n kubeapps svc/kubeapps 8888:80
# 或编辑 kubeapps servicer 为 NodePort 类型
kubectl --namespace kubeapps edit  kubeapps


获取 token

root@k8s-test-master01:~# 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 
eyJhbGciOiJSUzI1NiIsImtpZCI6IjQxdE1TdDZIU3VsSzlRSkRSNUhEeVVTTFBsOVdQdkVrc3lEQXNhTWFGR28ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuLTVqN3g1Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjYzZDRmYzktMWQxZi00ODQwLWFiMWYtZmEyNTgxM2JkNDBlIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.TBeL7XxwOdCLbNsuV8f6F7_eM7abR_8EM7WKi8jP40_t5FNTdnyPo_PFnbasGN8ScqN6nft8iYP8vAZsKHbp8BKuIGcJVe6-Ic5kH3yeZTg1aIPI1xauzVAK85mTNoPsPZZoM3EBd2r97A05vawnlqDaK1byTI5I1Z1DnRnmPf09BakDQBb4-VKEnEJeGNw11pR98eOvo098ckFEDlhADVBq22FnCXT6LCXBsDjbNKQ8-IVX2G8mFCJpHu1b3T601fxRVmSrWCZpQIhTYwvVlthP1tZJTcAcgIZXqHZcgffSzxZKjPQlCzxkQujm2J6pmisXIL0XeHVt76eSzK_hdg
root@k8s-test-master01:~



02

添加 helm 仓库

harbor 默认集成了 helm charts ,可以把它加入到 kubeapps 中


或者通过 yaml 文件添加

apiVersion: kubeapps.com/v1alpha1
kind: AppRepository
metadata:
  name: my-repo
  namespace: kubeapps
spec:
  auth:
    header:
      secretKeyRef:
        key: authorizationHeader
        name: {secret}
    spec:
      containers:
        - env:
            - name: FOO
              value: BAR
  type: helm
  url: https://my.charts.com/


kubeapps 默认 10 分钟同步仓库,可以在页面手动触发同步

root@k8s-test-master01:~# kubectl get po -n kubeapps | grep sync
apprepo-default-sync-liudengpeng-27013960-lpgg8               0/1     Completed   0          20m
apprepo-default-sync-liudengpeng-27013970-7hc9p               0/1     Completed   0          10m
apprepo-default-sync-liudengpeng-27013980-9wjlm               0/1     Completed   0          19s
apprepo-kubeapps-sync-bitnami-27013960-fgktz                  0/1     Completed   1          20m
apprepo-kubeapps-sync-bitnami-27013970-6hjh6                  0/1     Completed   0          10m
apprepo-kubeapps-sync-bitnami-27013980-swth8                  0/1     Completed   0          19s
root@k8s-test-master01:~# kubectl get cj -n kubeapps                  
NAME                               SCHEDULE       SUSPEND   ACTIVE   LAST SCHEDULE   AGE
apprepo-default-sync-liudengpeng   */10 * * * *   False     0        33s             4d8h
apprepo-kubeapps-sync-bitnami      */10 * * * *   False     0        33s             4d8h


03

创建 chart

创建 charts 这里就不展开了,列举几个笔者认为有趣的写法

比如 MongoDB 的用户名环境变量可以通过模板来获取,在 _helpers.tpl  文件添加

{{- define "mongodb.database.username" -}}
  {{- if eq .Values.global.database.username "nil" -}}
    {{- printf "%s" "admin" -}}
  {{- else -}}
    {{- .Values.global.database.username -}}    
  {{- end -}}
{{- end -}}

如果没有传入 global.database.username 参数,那默认的用户名为 admin

在 MongoDB 的 statefulsets.yaml 文件引入模板即可

        - name: MONGO_INITDB_ROOT_USERNAME
          value: "{{ template "mongodb.database.username" . }}"


通过 contains 判断 service 的类型

spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: http
      protocol: TCP
      {{- if contains "NodePort" .Values.service.type }}
      nodePort: {{ .Values.service.nodeport }}
      {{- end }}
      name: http

 service.type 为 NodePort 时,可以用 service.nodeport 定义 nodeport  端口


04

上传 chart 到 Harbor 仓库

需要在 harbor 仓库创建项目


安装 helm push
 插件

# 当前系统需要安装 git 
helm plugin install https://github.com/chartmuseum/helm-push


添加仓库

# helm repo add liudengpeng https://xxx.xxx.com/chartrepo/liudengpeng
# helm repo list 
NAME            URL                                                                                                
kubefed-charts  https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/charts
liudengpeng     https://xxx.xxx.com/chartrepo/liudengpeng                         


上传

helm push --username {$uname} --password {$password} ./ {$repo name} --version 1.0.0-alpha.8                  


到 kubeapps 应用中心查看


05

安装应用

到 kubeapps 应用中心,点击需要安装的应用

在 kubeapps 中,value.yaml 文件是可编辑的,编写 chart 时使用 {{- toYaml . }}
  写法会很方便


在 kubeapps 中可以查看应用安装的信息


root@k8s-test-master01:~# kubectl get po,svc -l app.kubernetes.io/instance=dev
NAME                                            READY   STATUS    RESTARTS   AGE
pod/dev-mongodb-0                               1/1     Running   0          10m
pod/dev-virtualcopter-front-6f949b584d-k28t8    1/1     Running   0          10m
pod/dev-virtualcopter-server-56b47d97fd-79h7h   1/1     Running   0          10m

NAME                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
service/dev-mongodb-server         ClusterIP   10.254.76.138    <none>        27017/TCP   10m
service/dev-virtualcopter-server   ClusterIP   10.254.176.186   <none>        80/TCP      10m
service/virtualcopter-front        ClusterIP   10.254.180.252   <none>        80/TCP      10m                




参考文档:

https://kubeapps.com/docs/

文章转载自ProdanLabs,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论