Kubernetes-17:Kubernets包管理工具—>Helm介绍与使用
Kubernets包管理工具—>Helm什么是Helm?我们都知道,Linux系统各发行版都有自己的包管理工具,比如Centos的YUM,再如Ubuntu的APT。 Kubernetes也有自己的集群包管理工具,那就是Helm。 Helm本质就是让K8S的应用管理(Deployment,Service等)可配置,能动态生成。通过动态生成K8S资源清单文件(deployment.yaml,service.yaml),然后调用kubectl自动执行K8S部署。 ?Helm有两个重要的概念,chart 和 release
?Helm包含两个组件,Helm 客户端和 Tiller 服务器
?Helm 部署越来越多的公司开始使用Helm这个Kubernetes包管理工具,Helm的安装也十分简单,下载 helm 命令行工具到Master节点即可,以下示例安装为?Helm v2.16.10?版本,包下载地址:?https://github.com/helm/helm/releases [root@Centos8 heml]# wget https://get.helm.sh/helm-v2.16.10-linux-amd64.tar.gz [root@Centos8 heml]# tar zxvf helm-v2.16.10-linux-amd64.tar.gz -C /usr/local/ [root@Centos8 heml]# cd /usr/local/linux-amd64/ [root@Centos8 linux-amd64]# ln -s `pwd`/helm /usr/local/bin/
? 为了安装tiller,还需要在这台机器上配置好kubectl工具和kubeconfig文件,确保kubectl工具可以在这台机器访问apiserver且正常使用。 因为Kubernetes ApiServer开启了RBAC访问控制,所以需要创建tiller使用的 service account:tiller并分配合适的角色给它。这里简单起见直接分配cluster-admin这个集群内置的CluserRole给它。创建rbac-config.yaml文件: vim rbac-config.yaml apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tiller subjects: - kind: ServiceAccount name: tiller namespace: kube-system roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io [root@Centos8 rbac]# kubectl create -f rbac-config.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created ? 在K8S集群中初始化helm [root@Centos8 rbac]# helm init --service-account tiller --skip-refresh Creating /root/.helm Creating /root/.helm/repository Creating /root/.helm/repository/cache Creating /root/.helm/repository/local Creating /root/.helm/plugins Creating /root/.helm/starters Creating /root/.helm/cache/archive Creating /root/.helm/repository/repositories.yaml Adding stable repo with URL: https:kubernetes-charts.storage.googleapis.com Adding local repo with URL: http:127.0.0.1:8879/charts $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default,Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this,run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https:v2.helm.sh/docs/securing_installation/ [root@Centos8 rbac]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE tiller-deploy-8487d94bcf-nfc74 0/1 ContainerCreating 0 98s [root@Centos8 ~]# kubectl describe pod tiller-deploy-8487d94bcf-nfc74 -n kube-system Back-off pulling image "gcr.io/kubernetes-helm/tiller:v2.16.10"
[root@Centos8 ~]# docker pull jessestuart/tiller:v2.16.10 Status: Downloaded newer image for jessestuart/tiller:v2. docker.io/jessestuart/tiller:v2. docker tag jessestuart/tiller:v2.16.10 gcr.io/kubernetes-helm/tiller:v2.16.10 ? 然后传输到每一个node节点上: [root@Centos8 ~]# docker save gcr.io/kubernetes-helm/tiller -o /usr/local/install-k8s/heml/tiller.tgz [root@Centos8 ~]# scp /usr/local/install-k8s/heml/tiller.tgz 192.168.152.253:/usr/local/install-k8s/ ? node节点接收到后,再导入成image即可: [root@TestCentos7 install-k8s]# docker load < tiller.tgz Loaded image: gcr.io/kubernetes-helm/tiller:v2.16.10 ? 再次查看tiller Pod的状态,已经变为Running: [root@Centos8 ~]# kubectl get pod -n kube-system tiller-deploy-8487d94bcf-nfc74 1/1 Running 0 1h ? Helm的使用Helm的使用与yum、apt等工具如出一辙,可以事先去helm hub中寻找想要安装的工具或应用:https://hub.helm.sh/,其页面会有具体的安装方法及步骤。 以安装redis为例:https://hub.helm.sh/charts/choerodon/redis1、先添加redis的repo源 helm repo add choerodon https:openchart.choerodon.com.cn/choerodon/c7n choerodon" has been added to your repositories ? 2、更新一下helm repo [root@Centos8 ~]# helm repo update Hang tight while we grab the latest from your chart repositories... ...Skip local chart repository ...Successfully got an update from the " chart repository ...Successfully got an update from the stable chart repository Update Complete. ? 3、开始安装 [root@Centos8 ~]# helm install choerodon/redis --version 0.2.5 NAME: exhaling-yak LAST DEPLOYED: Sun Sep 6 22:57:51 2020 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/ConfigMap NAME DATA AGE exhaling-yak-cm 1 0s ==> v1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE exhaling-yak 1 0 0s ==> v1/Pod(related) ? 4、可以看到,在default名称空间生成了ConfigMap、Deployment和Pod [root@Centos8 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE exhaling-yak-cdc8cf8f9-xqtk9 1 ImagePullBackOff 40s [root@Centos8 ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE exhaling-yak 1 1 85s [root@Centos8 ~]# kubectl get cm NAME DATA AGE exhaling-yak-cm 1 109s
? 3、Helm常用命令,大家可以通过?helm --help?进行了解 ?Helm自定义模板以上拉取的都是别人自定义好的模板,自己也可以做一些模板上传或者收藏起来。在此测试创建hello-world模板 1.创建好模板所有文件所放置的目录mkdir charts cd charts/ mkdir templates # 必须创建一个名字为 templates 的目录 ?2.编辑Chart.yamlvim Chart.yaml? # 必须创建一个名为 Chart.yaml 的文件,并指定 name 和 version 两个key的值 name: hello-world version: 1.0.0 ? 3.在 templates 目录下创建 deployment 及 servicevim templates/deployments.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: hello-world spec: replicas: template: metadata: labels: app: hello-world spec: containers: - name: hello-world image: nginx:1.2. imagePullPolicy: IfNotPresent ports: - containerPort: 80 ? vim services.yaml apiVersion: v1 kind: Service metadata: name: hello-world spec: type: NodePort ports: - port: 80 containerPort: nodePort: 30001 selector: app: hello-world ? 此时整体目录结构为: [root@Centos8 charts]# tree
.
├── Chart.yaml
└── templates
├── deployments.yaml
└── services.yaml
? 4.安装此自定义chart[root@Centos8 charts]# helm install . NAME: wishing-badger LAST DEPLOYED: Mon Sep 7 20:55:42 Pod(related) NAME READY STATUS RESTARTS AGE hello-world-767c98894d-7lrzt 1 ContainerCreating 1s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-world NodePort 10.100.108.217 <none> 80:30001/TCP 0s ==> v1beta1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE hello-world 1 0 0s ? 查看Pod、Deployment、Service [root@Centos8 charts]# kubectl get pod NAME READY STATUS RESTARTS AGE hello-world-767c98894d-7lrzt 67s [root@Centos8 charts]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE hello-world 78s [root@Centos8 charts]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-world NodePort 108.217 <none> 30001/TCP 81s ? Helm常用命令及用法1.更新镜像第一种:手动更新 进入 deployments.yaml 修改 image 行,然后helm upgrade vim templates/deployments.yaml apiVersion: extensions/world image: hub.vfancloud.com/test/myapp imagePullPolicy: IfNotPresent ports: - containerPort: 80 [root@Centos8 charts]# helm upgrade wishing-badger . Release wishing-badger has been upgraded. LAST DEPLOYED: Mon Sep 21:07:04 Pod(related) NAME READY STATUS RESTARTS AGE hello-world-7466c45989-cxnps 1 Terminating 69s hello-world-864f865db8-zjt79 0s ==> v1/TCP 11m ==> v1beta1/0 11m ? 查看index.html,版本为v1 [root@Centos8 charts]# curl http:10.100.108.217 Hello MyApp | Version: v1 | <a href=hostname.html">Pod Name</a> ? 第二种:变量更新 创建一个变量文件 values.yaml,保存 image 及 tag vim values.yaml image: repository: hub.vfancloud.com/test/myapp tag: v2' ? vim templates/deployments.yaml # 将 image 字段更改为以上文件的变量 apiVersion: extensions/world image: {{ .Values.image.repository }}:{{ .Values.image.tag }} imagePullPolicy: IfNotPresent ports: - containerPort: 80 ? 开始更新 [root@Centos8 charts]# helm upgrade wishing-17:31 Pod(related) NAME READY STATUS RESTARTS AGE hello-world-5759c969fc-w9s88 0s hello-world-864f865db8-zjt79 10m ==> v1/TCP 21m ==> v1beta1/1 21m ? 查看index.html,版本为v2 [root@Centos8 charts]# curl http:10.100.108.217 Hello MyApp | Version: v2 | <a href=">Pod Name</a> ? 或者通过命令行直接修改 image 的 tag 标签,来更新镜像版本 [root@Centos8 charts]# helm upgrade wishing-badger --set image.tag=v3 . Release 27: 9m33s hello-world-6454b8dcc8-pjgk9 TCP 31m ==> v1beta1/0 31m ? 查看index.html,已经更新为v3 [root@Centos8 charts]# curl http:10.100.108.217 Hello MyApp | Version: v3 | <a href=">Pod Name</a> ? 2.查看release历史版本[root@Centos8 charts]# helm history wishing-badger REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION 1 Mon Sep 2020 SUPERSEDED hello-world- Install complete 2 Mon Sep 2020 DEPLOYED hello-world-0 Upgrade complete ? 3.删除release[root@Centos8 charts]# helm delete wishing-badger release " deleted ? 以上命令提示此 release 删除,但其实并没有完全“删除”,而是将它放回了“回收站” 原因是怕你将来有一天想要回滚,“回收站”查看方法: [root@Centos8 charts]# helm list --deleted NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE wishing-badger 5 Mon Sep 2020 DELETED hello-world-0 default
?4.回滚releasehelm rollback [name] [版本] [root@Centos8 charts]# helm rollback wishing-badger 2 Rollback was a success. 将 wishing-badger 回滚到第二个版本 查看index.html,已回退到第二个版本,version 为 v1 [root@Centos8 charts]# curl http:10.109.145.22 Hello MyApp | Version: v1 | <a href=">Pod Name</a> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |