【云原生,k8s】基于Helm管理Kubernetes应用

第四阶段

时 间:2023年8月18日

参加人:全班人员

内 容:

基于Helm管理Kubernetes应用

目录

一、Kubernetes部署方式

(一)minikube

(二)二进制包

(三)Kubeadm

二、基于kubeadm部署K8S集群

(一)环境准备

(二)部署kubernetes集群

[(三)安装Dashboard UI](#(三)安装Dashboard UI)

(四)metrics-server服务部署

(五)Helm应用包管理器介绍

(六)Helm应用包管理器部署


一、 Kubernetes部署方式

官方提供Kubernetes部署3种方式

(一) minikube

Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。

官方文档:Install Tools | Kubernetes

(二) 二进制包

从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。目前企业生产环境中主要使用该方式。

下载地址:

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#v1113

(三) Kubeadm

Kubeadm 是谷歌推出的一个专门用于快速部署 kubernetes 集群的工具。在集群部署的过程中,可以通过 kubeadm init 来初始化 master 节点,然后使用 kubeadm join 将其他的节点加入到集群中。

1、Kubeadm 通过简单配置可以快速将一个最小可用的集群运行起来。它在设计之初关注点是快速安装并将集群运行起来,而不是一步步关于各节点环境的准备工作。同样的,kubernetes 集群在使用过程中的各种插件也不是 kubeadm 关注的重点,比如 kubernetes集群 WEB Dashboard、prometheus 监控集群业务等。kubeadm 应用的目的是作为所有部署的基础,并通过 kubeadm 使得部署 kubernetes 集群更加容易。

2、 Kubeadm 的简单快捷的部署可以应用到如下三方面:

·新用户可以从 kubeadm 开始快速搭建 Kubernete 并了解。

·熟悉 Kubernetes 的用户可以使用 kubeadm 快速搭建集群并测试他们的应用。

·大型的项目可以将 kubeadm 配合其他的安装工具一起使用,形成一个比较复杂的系统。

·官方文档:

Kubeadm | Kubernetes
Installing kubeadm | Kubernetes

二、 基于kubeadm部署K8S集群

(一) 环境准备

|-----------------|------------|-----------------------------------|
| IP地址 | 主机名 | 组件 |
| 192.168.100.131 | k8s-master | kubeadm、kubelet、kubectl、docker-ce |
| 192.168.100.132 | k8s-node01 | kubeadm、kubelet、kubectl、docker-ce |
| 192.168.100.133 | k8s-node02 | kubeadm、kubelet、kubectl、docker-ce |

注意:所有主机配置推荐CPU:2C+ Memory:2G+

1 主机初始化配置

所有主机配置禁用防火墙和selinux

复制代码
[root@localhost ~]# setenforce 0

[root@localhost ~]# iptables -F

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# systemctl stop NetworkManager

[root@localhost ~]# systemctl disable NetworkManager

[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

2、 配置主机名并绑定hosts,不同主机名称不同

root@localhost \~\]# hostname k8s-master \[root@localhost \~\]# bash \[root@k8s-master \~\]# cat \<\< EOF \>\> /etc/hosts 192.168.100.131 k8s-master 192.168.100.132 k8s-node01 192.168.100.133 k8s-node02 EOF

root@localhost \~\]# hostname k8s-node01 \[root@k8s-node01 \~\]# cat /etc/hosts ![](https://file.jishuzhan.net/article/1692356851707940865/63c392353e18424c8d5c6e7a124d7078.png) \[root@localhost \~\]# hostname k8s-node02 \[root@k8s-node02 \~\]#cat /etc/hosts ![](https://file.jishuzhan.net/article/1692356851707940865/71190440932b4687966742454f31cdac.png) ****3、**** ****主机配置初始化**** \[root@k8s-master \~\]# yum -y install vim wget net-tools lrzsz ![](https://file.jishuzhan.net/article/1692356851707940865/601fbfb2ed994635b1456c21cf93b14e.png) > \[root@k8s-master \~\]# swapoff -a > > \[root@k8s-master \~\]# sed -i '/swap/s/\^/#/' /etc/fstab > > \[root@k8s-master \~\]# cat \<\< EOF \>\> /etc/sysctl.conf > > net.bridge.bridge-nf-call-ip6tables = 1 > > net.bridge.bridge-nf-call-iptables = 1 > > EOF > > \[root@k8s-master \~\]# modprobe br_netfilter > > \[root@k8s-master \~\]# sysctl -p ![](https://file.jishuzhan.net/article/1692356851707940865/ac32b2114c3e4bf29ac604b6b57eec74.png) ****4、**** ****部署docker环境**** ****1)**** ****三台主机上分别部署 Docker 环境,因为 Kubernetes 对容器的编排需要 Docker 的支持。**** > \[root@k8s-master \~\]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo > > \[root@k8s-master \~\]# yum install -y yum-utils device-mapper-persistent-data lvm2 ****2)**** ****使用 YUM 方式安装 Docker 时,推荐使用阿里的 YUM 源。**** > \[root@k8s-master \~\]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ****3)清除缓存**** > \[root@k8s-master \~\]# yum clean all \&\& yum makecache fast ****4)启动docker**** > \[root@k8s-master \~\]# yum -y install docker-ce > > \[root@k8s-master \~\]# systemctl start docker > > \[root@k8s-master \~\]# systemctl enable docker ![](https://file.jishuzhan.net/article/1692356851707940865/bf6427bb45804c37b187542bbfb1e268.png) ****5)**** ****镜像加速器(所有主机配置)**** > \[root@k8s-master \~\]# cat \<\< END \> /etc/docker/daemon.json > > { "registry-mirrors":\[ "https://nyakyfun.mirror.aliyuncs.com"

}

END

6)重启docker

root@k8s-master \~\]# systemctl daemon-reload \[root@k8s-master \~\]# systemctl restart docker

(二) 部署kubernetes集群

1、组件介绍

三个节点都需要安装下面三个组件

****kubeadm:****安装工具,使所有的组件都会以容器的方式运行

****kubectl:****客户端连接K8S API工具

kubelet:运行在node节点,用来启动容器的工具

2、配置阿里云yum源

使用 YUM 方式安装 Kubernetes时,推荐使用阿里的 YUM 源。

root@k8s-master \~\]# ls /etc/yum.repos.d/ \[root@k8s-master \~\]# cat \> /etc/yum.repos.d/kubernetes.repo

3、安装kubelet kubeadm kubectl

所有主机配置

root@k8s-master \~\]# yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0 ![](https://file.jishuzhan.net/article/1692356851707940865/ff226bfe8daa4985b24f99a2fa5046e0.png) \[root@k8s-master \~\]# systemctl enable kubelet ![](https://file.jishuzhan.net/article/1692356851707940865/301fc9d287c44d6890ccb1525643baa9.png) \[root@k8s-master \~\]# kubectl version ![](https://file.jishuzhan.net/article/1692356851707940865/f86ee58952c541709f09fad937e16683.png) kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点或初始化为 master 后才可启动成功。 ****4、配置init-config.yaml**** Kubeadm 提供了很多配置项,Kubeadm 配置在 Kubernetes 集群中是存储在ConfigMap 中的,也可将这些配置写入配置文件,方便管理复杂的配置项。Kubeadm 配内容是通过 kubeadm config 命令写入配置文件的。 在master节点安装,master 定于为192.168.100.131,通过如下指令创建默认的init-config.yaml文件: > \[root@k8s-master \~\]# kubeadm config print init-defaults \> init-config.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/49f61bb21a8d4d62aa11cdddcd35dd11.png) ****init-config.yaml配置**** \[root@k8s-master \~\]# cat init-config.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/75f37bbc7bee4f779389b47434d0036e.png) ****5、安装master节点**** ****1)**** ****拉取所需镜像**** \[root@k8s-master \~\]# kubeadm config images list --config init-config.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/23279eadfb0b4c83ad6c10b2b657ed47.png) \[root@k8s-master \~\]# kubeadm config images pull --config init-config.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/a6ca681d457d44228994ec05ecebc9d8.png) ****2)**** ****安装matser节点**** \[root@k8s-master \~\]# kubeadm init --config=init-config.yaml //初始化安装K8S ![](https://file.jishuzhan.net/article/1692356851707940865/08f860bd51b1499fa339bd31651bf67a.png) ****3)**** ****根据提示操作**** kubectl 默认会在执行的用户家目录下面的.kube 目录下寻找config 文件。这里是将在初始化时\[kubeconfig\]步骤生成的admin.conf 拷贝到.kube/config > ****\[root@k8s-master \~\]# mkdir -p $HOME/.kube**** > > ****\[root@k8s-master \~\]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config**** > > ****\[root@k8s-master \~\]# chown $(id -u):$(id -g) $HOME/.kube/config**** ![](https://file.jishuzhan.net/article/1692356851707940865/5e8dad9fded54c71a9760cae4b3eb5bc.png) Kubeadm 通过初始化安装是不包括网络插件的,也就是说初始化之后是不具备相关网络功能的,比如 k8s-master 节点上查看节点信息都是"Not Ready"状态、Pod 的 CoreDNS无法提供服务等。 ![](https://file.jishuzhan.net/article/1692356851707940865/33ba5bbd5a89409e9c8055e8b5c076df.png) ****6、安装node节点**** ****1)**** ****根据master安装时的提示信息**** > \[root@k8s-node01 \~\]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae ![](https://file.jishuzhan.net/article/1692356851707940865/dbc4a20f6b8648508a8bd9916ad82b71.png) > \[root@k8s-master \~\]# kubectl get nodes > > \[root@k8s-node02 \~\]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae ![](https://file.jishuzhan.net/article/1692356851707940865/55c75cb0089e47bebf7b83e143323607.png) ****Master操作:**** ****\[root@k8s-master \~\]# kubectl get nodes**** ![](https://file.jishuzhan.net/article/1692356851707940865/ffb4ec5035264e17ae74b3142f19a916.png) 前面已经提到,在初始化 k8s-master 时并没有网络相关配置,所以无法跟 node 节点通信,因此状态都是"NotReady"。但是通过 kubeadm join 加入的 node 节点已经在k8s-master 上可以看到。 ****7、安装flannel**** Master 节点NotReady 的原因就是因为没有使用任何的网络插件,此时Node 和Master的连接还不正常。目前最流行的Kubernetes 网络插件有Flannel、Calico、Canal、Weave 这里选择使用flannel。 ****所有主机:**** ****master上传kube-flannel.yml,所有主机上传flannel_v0.12.0-amd64.tar,cni-plugins-linux-amd64-v0.8.6.tgz**** > \[root@k8s-master \~\]# docker load \< flannel_v0.12.0-amd64.tar ![](https://file.jishuzhan.net/article/1692356851707940865/33332ef2405d4a588513570c5c8ded60.png) ****上传插件:**** ****\[root@k8s-master \~\]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz**** ****\[root@k8s-master \~\]# cp flannel /opt/cni/bin/**** ![](https://file.jishuzhan.net/article/1692356851707940865/992968a50c0745069340d1f76cef8c5c.png) ****master上传kube-flannel.yml**** ****master主机配置:**** \[root@k8s-master \~\]# kubectl apply -f kube-flannel.yml ![](https://file.jishuzhan.net/article/1692356851707940865/44acd4dcc9cc40028b7f8cfa1c1bfc1d.png) \[root@k8s-master \~\]# kubectl get nodes \[root@k8s-master \~\]# kubectl get pods -n kube-system ![](https://file.jishuzhan.net/article/1692356851707940865/4b1f359a4ae74188a9611904b1c2f6d5.png) ****已经是ready状态**** ## ****(三)**** ****安装Dashboard UI**** ****1、部署Dashboard**** dashboard的github仓库地址:https://github.com/kubernetes/dashboard 代码仓库当中,有给出安装示例的相关部署文件,我们可以直接获取之后,直接部署即可 > ****\[root@k8s-master \~\]# wget**** [https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml](https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml "https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml") ![](https://file.jishuzhan.net/article/1692356851707940865/3a48ac439f2642e98d1cd9da897dbf71.png) 默认这个部署文件当中,会单独创建一个名为kubernetes-dashboard的命名空间,并将kubernetes-dashboard部署在该命名空间下。dashboard的镜像来自docker hub官方,所以可不用修改镜像地址,直接从官方获取即可。 ****2、开放端口设置**** 在默认情况下,dashboard并不对外开放访问端口,这里简化操作,直接使用nodePort的方式将其端口暴露出来,修改serivce部分的定义: ****所有主机下载镜像**** > ****\[root@k8s-master \~\]# docker pull kubernetesui/dashboard:v2.0.0**** > > ****\[root@k8s-master \~\]# docker pull kubernetesui/metrics-scraper:v1.0.4**** ![](https://file.jishuzhan.net/article/1692356851707940865/027609f7d9c746d0a21f1c6371d3443d.png) \[root@k8s-master \~\]# vim recommended.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/3881b3a42a6240afab1194f3c314815f.png) ****3、权限配置**** 配置一个超级管理员权限 \[root@k8s-master \~\]# vim recommended.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/4761902dc6df4030851ac0c1df68f31c.png) \[root@k8s-master \~\]# kubectl apply -f recommended.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/aef3eddbe21f4f9c959d831438090ebc.png) ****\[root@k8s-master \~\]# kubectl get pods -n**** ****kubernetes-dashboard**** ****\[root@k8s-master \~\]# kubectl get pods -A -o wide**** ![](https://file.jishuzhan.net/article/1692356851707940865/6e5430b27ead4ef4bec2961ff0589aff.png) ****4、访问Token配置**** 使用谷歌浏览器测试访问 https://192.168.100.131:32443 ![](https://file.jishuzhan.net/article/1692356851707940865/7e9805bf1b444b07a3f01f1f3c38ff96.png) ![](https://file.jishuzhan.net/article/1692356851707940865/07c8a712ef29480084a88cbb8dd35808.png) ![](https://file.jishuzhan.net/article/1692356851707940865/c8911574ab774955bf18c9b070be4c74.png) 可以看到出现如上图画面,需要我们输入一个kubeconfig文件或者一个token。事实上在安装dashboard时,也为我们默认创建好了一个serviceaccount,为kubernetes-dashboard,并为其生成好了token, ****我们可以通过如下指令获取该sa的token:**** > \[root@k8s-master \~\]# kubectl describe secret -n kubernetes-dashboard $(kubectl get secret -n kubernetes-dashboard \|grep kubernetes-dashboard-token \| awk '{print $1}') \|grep token \| awk '{print $2}' ![](https://file.jishuzhan.net/article/1692356851707940865/c84ad9a679fe48f4b2d26db66a664d30.png) ****输入获取的token**** ![](https://file.jishuzhan.net/article/1692356851707940865/ddb3cd404da74211b1d81777590f5c11.png) ****查看集群概况:**** ![](https://file.jishuzhan.net/article/1692356851707940865/2f6d497390724bd38673e5c9d6c28b71.png) ****查看集群roles:**** ![](https://file.jishuzhan.net/article/1692356851707940865/af56583d54104becbdffd27db885fbff.png) ****查看集群namespaces:**** ![](https://file.jishuzhan.net/article/1692356851707940865/efe5516e68864eb4827f3aa5697167c8.png) ****查看集群nodes:**** ![](https://file.jishuzhan.net/article/1692356851707940865/d060216015ba4ad785135b668f267556.png) ****查看集群pods:**** ![](https://file.jishuzhan.net/article/1692356851707940865/9ed329ab274441fd9032deaaabf18580.png) ## ****(四)**** ****metrics-server服务部署**** ****1、在Node节点上下载镜像**** heapster已经被metrics-server取代,metrics-server是K8S中的资源指标获取工具 所有node节点上 ****\[root@k8s-node01 \~\]# docker pull bluersw/metrics-server-amd64:v0.3.6**** ****\[root@k8s-node01 \~\]# docker tag bluersw/metrics-server-amd64:v0.3.6 k8s.gcr.io/metrics-server-amd64:v0.3.6**** ![](https://file.jishuzhan.net/article/1692356851707940865/dba693e27715448c8777674081a177c5.png) ****2、修改 Kubernetes apiserver 启动参数**** 在kube-apiserver项中添加如下配置选项 修改后apiserver会自动重启 ****\[root@k8s-master \~\]# vim /etc/kubernetes/manifests/kube-apiserver.yaml**** ![](https://file.jishuzhan.net/article/1692356851707940865/21425c83951a44358c771941f761995c.png) ****3、Master上进行部署**** \[root@k8s-master \~\]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml ****修改安装脚本:**** \[root@k8s-master \~\]# vim components.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/10251a6d470f4d51a214a78c552ce1b8.png) ****\[root@k8s-master \~\]# kubectl create -f components.yaml**** ![](https://file.jishuzhan.net/article/1692356851707940865/435113b1cf734d5bb822a23355a7b78c.png) ****等待1-2分钟后查看结果**** ****\[root@k8s-master \~\]# kubectl top nodes**** ![](https://file.jishuzhan.net/article/1692356851707940865/d22e37e0da7d448da08163203a343561.png) 再回到dashboard界面可以看到CPU和内存使用情况了 ![](https://file.jishuzhan.net/article/1692356851707940865/b2337f258f2c4e9c97d52ce8c13707ab.png) ## ****(五)**** ****Helm应用包管理器介绍**** ****1、为什么需要Helm?**** Kubernetes上部署的应用服务,都是由特定的资源描述组成,包括deployment、service等。每个资源对象都保存在各自文件中或者集中写到一个配置文件。然后通过kubectl apply --f demo.yaml命令进行部署。 ![](https://file.jishuzhan.net/article/1692356851707940865/895b8d350a4f4a26a26ce6a52edd3f2a.png) 如果业务系统只由一个或几个这样的服务组成,那么上面部署管理方式足够用了。 而对于一个复杂的业务系统,会有很多类似上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个,几十个。如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源对象文件,而这种组织和管理应用的方式就显得力不从心了。 而且由于缺少对发布过的应用版本管理和控制,使Kubernetes上的应用维护和更新等面临诸多的挑战,主要面临以下问题: 如何将这些服务作为一个整体管理 这些资源文件如何高效复用 不支持应用级别的版本管理 ****2、Helm介绍**** Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt-get等一样,Helm可以很方便的将之前打包好的yaml文件部署到kubernetes上。 ****Helm有3个重要概念:**** > ****helm:****一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。 > > ****Chart:****目录或者压缩包,用于应用描述,由一系列用于描述 k8s 资源对象相关文件的集合。 > > ****Release:****基于Chart的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release;将在k8s中创建出真实运行的资源对象。 ****Helm特点**** > 开发的一个用于kubernetes的包管理器,每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tar.gz格式的单一文件,方便传输和存储) > > 对于应用发布者而言,可以通过Helm打包应用, 管理应用依赖关系,管理应用版本并发布应用到软件仓库。 > > 对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用, > > Helm提供了kubernetes上的软件部署,删除,升级, 回滚应用的强大功能 ****3、Helm V3变化**** 2019年11月13日, Helm团队发布 Helm v3的第一个稳定版本。该版本主要变化如下: ****1)架构变化**** 最明显的变化是 Tiller的删除 ![](https://file.jishuzhan.net/article/1692356851707940865/d964326dc58445528137e281048db7d4.png) ****2)Release名称可以在不同命名空间重用**** ****3)支持将 Chart 推送至 Docker 镜像仓库Harbor中**** ****4)使用JSONSchema验证chart values**** ****5)其他**** 为了更好地协调其他包管理者的措辞 Helm CLI个别更名 > ****helm delete\` 更名为 \`helm uninstall**** > > ****helm inspect\` 更名为 \`helm show**** > > ****helm fetch\` 更名为 \`helm pull**** 但以上旧的命令当前仍能使用。 移除了用于本地临时搭建 Chart Repository的 helm serve 命令。 ****自动创建名称空间**** 在不存在的命名空间中创建发行版时,Helm 2创建了命名空间。Helm 3遵循其他Kubernetes对象的行为,如果命名空间不存在则返回错误。 不再需要requirements.yaml, 依赖关系是直接在chart.yaml中定义。 ## ****(六)**** ****Helm应用包管理器部署**** ****1、部署Helm客户端工具**** Helm客户端下载地址:[Releases · helm/helm · GitHub](https://github.com/helm/helm/releases "Releases · helm/helm · GitHub") ****将源码包解压并移动到/usr/bin/目录即可。**** > \[root@k8s-master \~\]# wget [https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz](https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz "https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz") > > \[root@k8s-master \~\]# tar xf helm-v3.5.2-linux-amd64.tar.gz > > \[root@k8s-master \~\]# cd linux-amd64/ > > \[root@k8s-master linux-amd64\]# ls > > \[root@k8s-master linux-amd64\]# mv helm /usr/bin/ > > ****\[root@k8s-master \~\]# helm**** ****#验证helm命令是否可用**** ![](https://file.jishuzhan.net/article/1692356851707940865/cd1b926ae7254dea92d1671f15328f88.png) ****2、Helm常用命令**** |------------|----------------------------------------------------------| | 命令 | 描述 | | create | 创建一个chart并指定名字 | | dependency | 管理chart依赖 | | get | 下载一个release。可用子命令:all、hooks、manifest、notes、values | | history | 获取release历史 | | install | 安装一个chart | | list | 列出release | | package | 将chart目录打包到chart存档文件中 | | pull | 从远程仓库中下载chart并解压到本地 # helm pull stable/mysql --untar | | repo | 添加,列出,移除,更新和索引chart仓库。可用子命令:add、index、list、remove、update | | rollback | 从之前版本回滚 | | search | 根据关键字搜索chart。可用子命令:hub、repo | | show | 查看chart详细信息。可用子命令:all、chart、readme、values | | status | 显示已命名版本的状态 | | template | 本地呈现模板 | | uninstall | 卸载一个release | | upgrade | 更新一个release | | version | 查看helm客户端版本 | ****3、配置国内的Chart仓库**** > 微软仓库([Index of /kubernetes/charts/](http://mirror.azure.cn/kubernetes/charts/ "Index of /kubernetes/charts/"))这个仓库强烈推荐,基本上官网有的chart这里都有。 > > 阿里云仓库([https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts](https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts "https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts")) > > 官方仓库([Kubeapps \| Home](https://hub.kubeapps.com/charts/incubator "Kubeapps | Home"))官方chart仓库,国内有点不好使。 ****添加chart存储库**** > \[root@k8s-master \~\]# helm repo add stable http://mirror.azure.cn/kubernetes/charts > > \[root@k8s-master \~\]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts > > \[root@k8s-master \~\]# helm repo update 查看已配置的chart存储库 \[root@k8s-master \~\]# helm repo list ![](https://file.jishuzhan.net/article/1692356851707940865/206436df0f4d4e599d82b6755aae61b4.png) ****删除存储库:**** \[root@k8s-master \~\]# helm repo remove aliyun \[root@k8s-master \~\]# helm repo list ![](https://file.jishuzhan.net/article/1692356851707940865/280f6bb9597d4728a3525a8f3895d423.png) ****4、使用chart部署一个Nginx应用**** ****1)**** ****创建chart**** ****\[root@k8s-master \~\]# helm create nginx**** ![](https://file.jishuzhan.net/article/1692356851707940865/b0cc94fcddba49c8b00dbfa4babaa358.png) ****\[root@k8s-master \~\]# tree nginx/**** ****详解:**** > nginx/ > > ├── charts #依赖其他包的charts文件 > > ├── Chart.yaml #该chart的描述文件,包括ip地址,版本信息等 > > ├── templates #存放k8s模板文件目录 > > │ ├── deployment.yaml #创建k8s deployment资源的yaml 模板 > > │ ├── _helpers.tpl #下划线开头的文件,可以被其他模板引用 > > │ ├── hpa.yaml #配置服务资源CPU 内存 > > │ ├── ingress.yaml # ingress 配合service域名访问的配置 > > │ ├── NOTES.txt #说明文件,helm install之后展示给用户看的内容 > > │ ├── serviceaccount.yaml > > │ ├── service.yaml #kubernetes Serivce yaml模板 > > │ └── tests > > │ └── test-connection.yaml > > └── values.yaml #给模板文件使用的变量 ![](https://file.jishuzhan.net/article/1692356851707940865/0db4947b63ee46a1b562f68a55d8f329.png) ****2)**** ****修改values.yaml 里的service的type为 NodePort**** \[root@k8s-master \~\]# cd nginx/ \[root@k8s-master nginx\]# vim values.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/f65efdad9a4f4ca2a533b41d74f39e82.png) ****3)**** ****安装chart任务(注意命令最后的点)**** \[root@k8s-master nginx\]# helm install -f values.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/a1508b2a79d94800a61c56428f47924e.png) ****4)**** ****查看release**** \[root@k8s-master nginx\]# helm ls #或者helm list ![](https://file.jishuzhan.net/article/1692356851707940865/b10e850bc0154172bcf969330de8ddce.png) ****5)**** ****删除release**** > \[root@k8s-master nginx\]# helm delete nginx ****6)**** ****查看pod状态**** > \[root@k8s-master nginx\]# kubectl get pod > > \[root@k8s-master nginx\]# kubectl get pod -o wide ****7)**** ****查看svc状态**** > \[root@k8s-master nginx\]# kubectl get svc ![](https://file.jishuzhan.net/article/1692356851707940865/d8064024b39b46d19e550a3a8e209ce5.png) 访问 192.168.100.132:30281 ![](https://file.jishuzhan.net/article/1692356851707940865/e7fcdecbaa0a45ce82076a3f08d46899.png) ****5、使用chart部署一个Tomcat应用**** \[root@k8s-master \~\]# helm create tomcat Creating tomcat \[root@k8s-master \~\]# cd tomcat/ ![](https://file.jishuzhan.net/article/1692356851707940865/714d2336b36343fbaffe2f5e652ecbca.png) **修改deployment.yaml和service.yaml文件** \[root@k8s-master tomcat\]# vim templates/deployment.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/5a93c9f9028643a68398f7d413c68e56.png) \[root@k8s-master tomcat\]# vim templates/service.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/0eed791e49964b9db1b089abff18bda4.png) ****创建release**** \[root@k8s-master tomcat\]# helm install tomcat . ![](https://file.jishuzhan.net/article/1692356851707940865/a45c62f63c38493782a2dd21564a94a7.png) ****查看release**** \[root@k8s-master tomcat\]# helm ls ![](https://file.jishuzhan.net/article/1692356851707940865/b7b1f563f6b74047861f07d0fd823767.png) ****查看pod和svc**** > \[root@k8s-master tomcat\]# kubectl get pod > > \[root@k8s-master tomcat\]# kubectl get pod -o wide > > \[root@k8s-master tomcat\]# kubectl get svc ![](https://file.jishuzhan.net/article/1692356851707940865/ce2c12efad154d49bd3a961a3069f192.png) ****准备测试页**** > \[root@k8s-master tomcat\]# kubectl exec -it tomcat-67df6cd4d6-s7qxl /bin/bash > > root@tomcat-67df6cd4d6-s7qxl:/usr/local/tomcat# mkdir webapps/ROOT > > root@tomcat-67df6cd4d6-s7qxl:/usr/local/tomcat# echo "helm test1" \> webapps/ROOT/index.jsp ![](https://file.jishuzhan.net/article/1692356851707940865/7e1a40b14f82400d9968f90d79dd684a.png) > \[root@k8s-master tomcat\]# kubectl exec -it tomcat-67df6cd4d6-tkp95 /bin/bash > > root@tomcat-67df6cd4d6-tkp95:/usr/local/tomcat# mkdir webapps/ROOT > > root@tomcat-67df6cd4d6-tkp95:/usr/local/tomcat# echo "helm test2" \> webapps/ROOT/index.jsp ![](https://file.jishuzhan.net/article/1692356851707940865/4ac344c86b584a3c87322c2de13b6b0c.png) 访问测试: ![](https://file.jishuzhan.net/article/1692356851707940865/9e7709bdd50744da9ae0e10f848a49e0.png) 访问 192.168.100.132:32092 访问 192.168.100.133:32092 ![](https://file.jishuzhan.net/article/1692356851707940865/dda21147d7b146ad924a53001b1d40c1.png) ****删除**** \[root@k8s-master tomcat\]# helm delete tomcat \[root@k8s-master tomcat\]# helm ls ![](https://file.jishuzhan.net/article/1692356851707940865/37070cdd2eb8448db9bf816b85e30197.png) ****升级(改完yaml文件之后重新应用)**** \[root@k8s-master tomcat\]# helm install tomcat . \[root@k8s-master tomcat\]# helm ls \[root@k8s-master tomcat\]# kubectl get pod ![](https://file.jishuzhan.net/article/1692356851707940865/a651812fc72449ae918d872b5f2dbd99.png) \[root@k8s-master tomcat\]# vim templates/deployment.yaml ![](https://file.jishuzhan.net/article/1692356851707940865/e7b39af7d5a3449980df8326ac5cfb82.png) \[root@k8s-master tomcat\]# helm upgrade tomcat . \[root@k8s-master tomcat\]# kubectl get pod \[root@k8s-master tomcat\]# helm ls ![](https://file.jishuzhan.net/article/1692356851707940865/265d5f60e2ca42df929b3db7cd01e1c7.png) ****回滚**** \[root@k8s-master tomcat\]# helm rollback tomcat 1 \[root@k8s-master tomcat\]# helm ls \[root@k8s-master tomcat\]# kubectl get pod ![](https://file.jishuzhan.net/article/1692356851707940865/4fd9db8697e24dc2adb609f9a5f8a36e.png) ****6、用变量渲染模板**** 测试模板是否正常 \[root@k8s-master tomcat\]# helm install --dry-run tomcat . ![](https://file.jishuzhan.net/article/1692356851707940865/7cd6f7f03ed14be1b29feecf47f90aa6.png) ****在values.yaml文件中定义变量**** ****\[root@k8s-master tomcat\]# cat values.yaml**** ![](https://file.jishuzhan.net/article/1692356851707940865/e8f541b51a6348a59de6c4ad80a49c86.png) ****\[root@k8s-master tomcat\]# cat templates/deployment.yaml**** ![](https://file.jishuzhan.net/article/1692356851707940865/1e5b1c90371e4e1cb3a4239ce975be95.png) ****\[root@k8s-master tomcat\]# cat templates/service.yaml**** ![](https://file.jishuzhan.net/article/1692356851707940865/76fbce9fa761488c9e481e3f932cb048.png) > ****deployment.yaml**** 和****service.yaml****两个文件的变量都是预先在values.yaml里面定义过引用过来的值。 > > Release.Name 代表helm install 后面的那个名字 ****\[root@k8s-master tomcat\]# helm delete tomcat**** 将templates目录中多余的文件都删除,只保留两个测试文件 ****\[root@k8s-master tomcat\]# ls templates/**** ![](https://file.jishuzhan.net/article/1692356851707940865/1a80c11892c44e76a6c231dfd1f65310.png) ****\[root@k8s-master tomcat\]# helm install -f values.yaml**** ![](https://file.jishuzhan.net/article/1692356851707940865/e5288d7c865d49a0b6841c5340b61cab.png) \[root@k8s-master tomcat\]# helm ls ![](https://file.jishuzhan.net/article/1692356851707940865/36ece3e32fbb42b4baf63440dd737cab.png) ****查看发布状态**** \[root@k8s-master tomcat\]# helm status tomcat \[root@k8s-master tomcat\]# kubectl get pod ![](https://file.jishuzhan.net/article/1692356851707940865/8a8f802c7739410ea8f9e1a87eb563c1.png) ****查看pod详细信息**** \[root@k8s-master tomcat\]# kubectl describe pod tomcat-dp-67df6cd4d6-78pxc ![](https://file.jishuzhan.net/article/1692356851707940865/ed4f492e944244079aa431ef1191709f.png)

相关推荐
oceanweave26 分钟前
【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子
学习·kubernetes
小锋学长生活大爆炸6 小时前
【教程】Docker更换存储位置
运维·docker·容器
gnufre7 小时前
Kubernetes 1.28 无 Docker 运行时环境下的容器化构建实践:Kaniko + Jenkins 全链路详解
kubernetes·jenkins·kaniko
Akamai中国10 小时前
分布式AI推理的成功之道
人工智能·分布式·云原生·云计算·云服务·云平台·云主机
川石教育10 小时前
测试工程师如何学会Kubernetes(k8s)容器知识
云原生·容器·kubernetes·kubernetes容器·kubernetes教程
iRayCheung11 小时前
Kind方式部署k8s单节点集群并创建nginx服务对外访问
nginx·kubernetes·kind
小黑_深呼吸12 小时前
Prometheus实战教程:k8s平台-Mysql监控案例
运维·学习·kubernetes·prometheus
THMAIL12 小时前
mac M芯片运行docker-desktop异常问题
macos·docker·容器
家庭云计算专家14 小时前
还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍
服务器·人工智能·docker·容器·编辑器
匆匆z214 小时前
AWS EC2 微服务 金丝雀发布(Canary Release)方案
微服务·云原生·金丝雀部署