Helm 相关组件及概念
Helm 包含两个组件,分别是 helm 客户端 和 Tiller 服务器:

  • helm 是一个命令行工具,用于本地开发及管理chart,chart仓库管理等
  • Tiller 是 Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart
    来生成一个 release 并管理 release
  • chart Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源
  • release 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release
  • Repoistory Helm chart 的仓库,Helm 客户端通过 HTTP 协议来访问存储库中 chart 的索引文件和压缩包
  1. 安装前提环境
  • 安装helm

helm是k8s的包管理器,类似于yum,apt等,通过指定版本安装helm-v2.16.3-linux-amd64.tar.gz

tar zxvf helm-v2.16.3-linux-amd64.tar.gz
cd linux-amd64 && mv helm /usr/local/bin/

查看helm版本,这里的版本为2.16.3,下面安装的tiller也要是2.16.3
在这里插入图片描述

创建权限,执行helm_rbac.yaml文件

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
 - kind: ServiceAccount
    name: tiller
    namespace: kube-system
kubectl apply -f helm_rbac.yaml
  • 安装tiller

helm初始化

helm init --service-account=tiller --tiller-image=sapcc/tiller:v2.16.3 --history-max 300
# 如果想要重置
helm reset -f

通过命令查看所有pods状态:kubectl get pods --all-namespaces
在这里插入图片描述
发现killer状态为ImagePullBackOff,说明docker仓库中没有这个镜像,并没有安装成功。通过命令kubectl describe pod tiller-deploy-5d84fdb456-9tzxq -n kube-system查看原因,拉取镜像tiller失败,这里是因为我写错了,把tiller:v.2.17.0写成了tiller.v.2.17.0
在这里插入图片描述
如果我们确实是因为镜像找不到,则我们需要修改部署配置,查看所有部署kubectl get deploy --all-namespaces,有一个名为tiller-deploy的部署在这里插入图片描述
编辑此部署kubectl edit deployment tiller-deploy -n kube-system,将里面的imagePullPolicy由IfNotPresent改为Never,这几个的意思是

https://kubernetes.io/docs/concepts/containers/images/
By default, the kubelet will try to pull each image from the specified registry. However, if the imagePullPolicy property of the container is set to IfNotPresent or Never, then a local image is used (preferentially or exclusively, respectively).
#默认情况是会根据配置文件中的镜像地址去拉取镜像,如果设置为IfNotPresent 和Never就会使用本地镜像。
IfNotPresent :如果本地存在镜像就优先使用本地镜像。
Never:直接不再去拉取镜像了,使用本地的;如果本地不存在就报异常了

在这里插入图片描述
然后手动把镜像拉取下来,再将本地的镜像和配置的镜像关联,保存配置文件,过一会就会自动部署成功了。当然也可以reset,重新执行helm init命令,将后面的镜像改为手动下载的镜像即可。
在这里插入图片描述

  • 集群现有的可用内存至少在 2G以上,那么执行 free -g可以看下可用资源

在这里插入图片描述

  • 配置存储类型

集群已有存储类型(StorageClass),执行 kubectl get sc看下当前是否设置了默认的 storageclass;如果没有则参考https://v2-1.docs.kubesphere.io/docs/zh-CN/appendix/install-openebs/进行设置
在这里插入图片描述
查看当前master节点,可以看到我们配置的master节点名称为k8s-node1

kubectl get node -o wide

在这里插入图片描述
确认 master 节点是否有 Taint,如果有就去掉

kubectl describe node k8s-node1 | grep Taint
kubectl taint nodes  k8s-node1 node-role.kubernetes.io/master:NoSchedule-

安装 OpenEBS

# 创建 OpenEBS 的 namespace
kubectl create ns openebs
#  安装 OpenEBS
helm install --namespace openebs --name openebs stable/openebs --version 1.5.0

等待几分钟,查看
在这里插入图片描述
将 openebs-hostpath设置为 默认的 StorageClass

kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

在这里插入图片描述
提示:由于在文档开头手动去掉了 master 节点的 Taint,我们可以在安装完 OpenEBS 和 KubeSphere 后,可以将 master 节点 Taint 加上,避免业务相关的工作负载调度到 master 节点抢占 master 资源:

kubectl taint nodes k8s-node1 node-role.kubernetes.io/master=:NoSchedule
  1. 安装kubesphere
kubectl apply -f kubesphere-minimal.yaml

在这里插入图片描述
查看日志

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

在这里插入图片描述

注:也可以更简便的方法安装,直接使用官网的一台机子一个命令安装,链接为https://v2-1.docs.kubesphere.io/docs/zh-CN/installation/all-in-one/

安装好以后,记得开启devops和sornar代码检测功能

kubectl edit cm -n kubesphere-system ks-installer
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐