Kubernetes Part4 ---- HELM操作

为什么需要HELM

Docker解决了应用的打包问题以及部署问题使得程序更加轻便以及灵活 但无法实现应用调度和编排 需要借助K8S的deployment和statefullset service ingress等完成 但是通常一个应用系统不可能只由一个deployment或statefulset就能部署完成的 那么有没有一种方式能够去组织 deployment以及service 一条命令就完成整个应用系统的部署呢? 答案是有的 那就是HELM

总结来说就是

由于Kubernetes缺少对发布的应用版本管理和控制,使得部署的应用维护和更新等面临诸多的挑战,主要面临以下问题:

 •如何将这些服务作为一个整体管理?

•这些资源文件如何高效复用?

•不支持应用级别的版本管理

需要HELM来拯救

什么是HELM

Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上。

Helm有3个重要概念:

helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。

Chart:应用描述,一系列用于描述k8s 资源相关文件的集合。

Release:基于Chart的部署实体,一个chart 被Helm 运行后将会生成对应的一个release;将在k8s中创建出真实运行的资源对象。

 

访问模式也很简单:

下载HELM客户端 该客户端会读取kubectl config配置文件($HOME/.kube/config)从而能够访问到 k8s群集 然后直接操作k8s群集

 

 

 

使用VMware BITNAMI HELM 仓库

这里就不演示自己构建HELM CHART创建应用了,因为现在公网有太多的公共仓库供使用了,这里我们演示使用VMware的TANZU Bitnami公共仓库

下载helm客户端

wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
tar zxvf helm-v3.2.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/

 

添加bitnami仓库

helm repo add bitnami https://charts.bitnami.com/bitnami

### 更新
helm repo update

 

安装kubeapp 该应用汇提供bitnami的界面 

### 为kubeapp创建namespace
kubectl create namespace kubeapps

### 安装 kubeapp 使用刚刚添加的bitnami仓库
helm install --version 5.0.0 kubeapps bitnami/kubeapps -n kubeapps --set useHelm3=true --set frontend.service.type=LoadBalancer

### 验证
kubectl get pods,svc -n kubeapps -o wide
NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE   SELECTOR
kubeapps                       LoadBalancer   10.99.8.255     <pending>     80:30624/TCP   18d   app=kubeapps,release=kubeapps
kubeapps-internal-assetsvc     ClusterIP      10.98.48.108    <none>        8080/TCP       18d   app=kubeapps-internal-assetsvc,release=kubeapps
kubeapps-internal-dashboard    ClusterIP      10.106.62.114   <none>        8080/TCP       18d   app=kubeapps-internal-dashboard,release=kubeapps
kubeapps-internal-kubeops      ClusterIP      10.104.137.77   <none>        8080/TCP       18d   app=kubeapps-internal-kubeops,release=kubeapps
kubeapps-postgresql            ClusterIP      10.98.126.33    <none>        5432/TCP       18d   app.kubernetes.io/instance=kubeapps,app.kubernetes.io/name=postgresql,role=primary
kubeapps-postgresql-headless   ClusterIP      None            <none>        5432/TCP       18d   app.kubernetes.io/instance=kubeapps,app.kubernetes.io/name=postgresql
kubeapps-postgresql-read       ClusterIP      10.102.159.14   <none>        5432/TCP       18d   app.kubernetes.io/instance=kubeapps,app.kubernetes.io/name=postgresql,role=read

### 看到 service/kubeapps   LoadBalancer   10.99.8.255   80:30624/TCP 我们可以通过Nodeport的方式来访问kubeapp

 

为用户授权访问kubeapp

### 创建 service account
kubectl create serviceaccount kubeapps-operator

### 创建rolebonding
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator

### 获取登录token
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

 

访问kubeapp(通过nodeport) 输入上步获取的token

 

 

登录成功

 

 搜索WordPress 点击

 

 选择最新版本

 

 输入相关点击部署

 

 部署进行中

 

 部署成功

 

 

 

获取登录口令 

[root@k8s-master03 deploy]#    export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services delightful-produce-wordpress)
[root@k8s-master03 deploy]#    export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
[root@k8s-master03 deploy]#    echo "WordPress URL: http://$NODE_IP:$NODE_PORT/"
WordPress URL: http://172.16.0.13:32319/
[root@k8s-master03 deploy]#    echo "WordPress Admin URL: http://$NODE_IP:$NODE_PORT/admin"
WordPress Admin URL: http://172.16.0.13:32319/admin
[root@k8s-master03 deploy]#   

 

登录成功

 

posted @ 2021-01-01 14:12  小兵黑尔  阅读(208)  评论(0)    收藏  举报