优质作文网站,网站按天扣费优化推广,云南省建设工程信息网招标公告,html简单代码模板Helm - K8s的包管理器 11.1 Why Helm K8s能够很好的组织和编排容器#xff0c;但它缺少一个更高层次的应用打包工具#xff0c;Helm就是干这个的。 比如对于一个MySQL服务#xff0c;K8s需要部署如下对象#xff1a; #xff08;1#xff09;Service#xff0c;让外界能…Helm - K8s的包管理器 11.1 Why Helm K8s能够很好的组织和编排容器但它缺少一个更高层次的应用打包工具Helm就是干这个的。 比如对于一个MySQL服务K8s需要部署如下对象 1Service让外界能访问MySQL 2Secret定义MySQL的密码 3PersisentVolumeClaim,为MySQL申请持久化存储空间。 4Deployment部署MySQL Pod并使用上面的这些支持对象。 可以将上面这些配置保存到文件中或几种写进一个文件然后通过kubectl apply -f 部署。 如果服务少这样问题也不大但是如果是微服务架构服务多达数十个甚至上百个这种组织和管理应用的方式就不好使了 1很难管理、编辑和维护如此多的服务。每个服务有若干个配置缺乏更高层次的工具将这些配置组织起来。 2不容易将这些服务作为一个整体统一发布。部署人员需要首先理解应用都包含哪些服务然后按照逻辑顺序依次执行kubectl apply, 缺少一种工具定义应用与服务已经服务之间的依赖。 3不能高效的共享和重用服务。比如两个应用都用到MySQL服务但是配置参数不一样这两个应用只能分别复制一套标准MySQL配置文件修改后通过kubectl apply部署。也就是不支持参数化配置和多环境部署。 4不支持应用级别的版本管理。虽然可以通过kubectl rollout undo进行回滚但这只针对单个deployment不支持整个应用的的回滚。 5不支持对部署的应用状态进行验证。比如是否能通过预定义账号访问MySQL。虽然K8s有健康检查但那时针对单个容器我们需要应用服务级别的健康检查。 Helm能够解决上面这些问题。 11.2 Helm架构 Helm有两个重要概念chart和release chart: 是创建一个应用的信息集合包括各种k8s对象的配置模板、参数定义、依赖关系、文档说明等。chart是应用部署的自包含逻辑单元。可以将char想象成apt、yum中的软件安装包。release: 是chart的运行实例代表了一个正在运行的应用。当chart被安装到k8s集群就生成一个release。chart能够多次安装到同一个集群每次安装都是一个release。 Helm是包管理工具这里的包就是指char。 Helm能够 从零创建新chart。与存储chart的仓库交互。拉取、保存、和更新chart在k8s集群中安装和卸载release.更新、回滚和测试release。Helm包含两个组件Helm客户端和Tiller服务器 Helm客户端用户可以 在本地开发chart管理chart仓库与Tiller服务器交互在远程K8s集群上安装chart查看release信息。升级或卸载已有的releaseTiller服务器运行在K8s集群中它会处理Helm客户端的请求与k8s的 API Server交互。Tiller服务器负责 监听来自Helm客户端的请求通过chart创建release在k8s中安装chart并跟踪release状态通过API server升级或卸载已有的release简单说 Helm客户端负责管理chartTiller服务器负责管理release。 11.3 安装Helm 11.3.1 Helm客户端 因为我的环境已经安装过了就没写以后补充 kubeusrGalaxyKubernetesMaster:~$ helm version
Client: version.Version{SemVer:v2.10.0, GitCommit:9ad53aac42165a5fadc6c87be0dea6b115f93090, GitTreeState:clean}
Server: version.Version{SemVer:v2.10.0, GitCommit:9ad53aac42165a5fadc6c87be0dea6b115f93090, GitTreeState:clean} 11.3.2 Tiller服务器 运行helm init就可以 如下查看Tiller的Service、deployment和Pod kubeusrGalaxyKubernetesMaster:~$ kubectl get -n kube-system svc tiller-deploy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tiller-deploy ClusterIP 10.111.0.95 none 44134/TCP 131dkubeusrGalaxyKubernetesMaster:~$ kubectl get -n kube-system deployment tiller-deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
tiller-deploy 1 1 1 1 131dkubeusrGalaxyKubernetesMaster:~$ kubectl get -n kube-system pod tiller-deploy-895d57dd9-bjlwf
NAME READY STATUS RESTARTS AGE
tiller-deploy-895d57dd9-bjlwf 1/1 Running 0 40d 11.4 使用Helm helm search # 查看当前可以安装的chart kubeusrGalaxyKubernetesMaster:~$ helm repo list # 查看仓库
NAME URL
stable https://kubernetes-charts.storage.googleapis.com # stable是官方仓库
local http://127.0.0.1:8879/charts # local是用户存放自己开发的chart的本地仓库 可以通过helm repo add 添加更多个仓库。 支持关键字搜索 kubeusrGalaxyKubernetesMaster:~$ helm search mysql
NAME CHART VERSION APP VERSION DESCRIPTION
stable/mysql 0.10.1 5.7.14 Fast, reliable, scalable, and easy to use open-source rel...
stable/mysqldump 1.0.0 5.7.21 A Helm chart to help backup MySQL databases using mysqldump
stable/prometheus-mysql-exporter 0.1.0 v0.10.0 A Helm chart for prometheus mysql exporter with cloudsqlp...
stable/percona 0.3.2 5.7.17 free, fully compatible, enhanced, open source drop-in rep...
stable/percona-xtradb-cluster 0.2.0 5.7.19 free, fully compatible, enhanced, open source drop-in rep...
stable/phpmyadmin 1.1.2 4.8.2 phpMyAdmin is an mysql administration frontend
stable/gcloud-sqlproxy 0.5.0 1.11 Google Cloud SQL Proxy
stable/mariadb 5.0.9 10.1.36 Fast, reliable, scalable, and easy to use open-source rel... 安装chart也很简单执行如下命令就可以安装MySQL kubeusrGalaxyKubernetesMaster:~$ helm install stable/mysql # 安装MySQL
NAME: invisible-stingray # release的名字 如果不用-n指定名字这里就随机生成。
LAST DEPLOYED: Wed Jan 2 03:19:02 2019
NAMESPACE: default # 命名空间可以通过--namespace指定
STATUS: DEPLOYED # 状态是DEPLOYED 表示已经将chart部署到集群RESOURCES: # 当前release包含的资源POD secretconfigmap, persistentVolumeClaimv1/Pod(related)
NAME READY STATUS RESTARTS AGE
invisible-stingray-mysql-8787ff6c8-dh8bh 0/1 Pending 0 0s v1/Secret
NAME TYPE DATA AGE
invisible-stingray-mysql Opaque 2 0s v1/ConfigMap
NAME DATA AGE
invisible-stingray-mysql-test 1 0s v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
invisible-stingray-mysql Pending 0s v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
invisible-stingray-mysql ClusterIP 10.107.208.222 none 3306/TCP 0s v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
invisible-stingray-mysql 1 1 1 0 0sNOTES: # 显示的是release的使用方法
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
invisible-stingray-mysql.default.svc.cluster.localTo get your root password run:MYSQL_ROOT_PASSWORD$(kubectl get secret --namespace default invisible-stingray-mysql -o jsonpath{.data.mysql-root-password} | base64 --decode; echo)To connect to your database:1. Run an Ubuntu pod that you can use as a client:kubectl run -i --tty ubuntu --imageubuntu:16.04 --restartNever -- bash -il2. Install the mysql client:$ apt-get update apt-get install mysql-client -y3. Connect using the mysql cli, then provide your password:$ mysql -h invisible-stingray-mysql -pTo connect to your database directly from outside the K8s cluster:MYSQL_HOST127.0.0.1MYSQL_PORT3306# Execute the following command to route the connection:kubectl port-forward svc/invisible-stingray-mysql 3306mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD} helm list显示已经部署的releasehelm delete可以删除release kubeusrGalaxyKubernetesMaster:~$ helm list --namespace default
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
invisible-stingray 1 Wed Jan 2 03:19:02 2019 DEPLOYED mysql-0.10.1 5.7.14 default
vehement-lambkin 1 Wed Jan 2 03:18:15 2019 DEPLOYED mysql-0.10.1 5.7.14 default
kubeusrGalaxyKubernetesMaster:~$ helm delete invisible-stingray 转载于:https://www.cnblogs.com/liufei1983/p/10208846.html