基于Kubernetes部署安装KubeSphere

本文来自于个人公众号 程序猿天璇基于Kubernetes部署安装KubeSphere,转载请保留连接 ;)

KubeSphere简介

Kubernetes官方有提供一套Dashboard,可是我这里选择功能更强大的KubeSphere,如下内容引用自KubeSphere官网:linux

KubeSphere是在Kubernetes之上构建的以应用为中心的企业级分布式容器平台,提供简单易用的操做界面以及向导式操做方式,在下降用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的平常工做的复杂度,旨在解决 Kubernetes 自己存在的存储、网络、安全和易用性等痛点。除此以外,平台已经整合并优化了多个适用于容器场景的功能模块,以完整的解决方案帮助企业轻松应对敏捷开发与自动化运维、DevOps、微服务治理、灰度发布、多租户管理、工做负载和集群管理、监控告警、日志查询与收集、服务与网络、应用商店、镜像构建与镜像仓库管理和存储管理等多种业务场景。后续版本还将提供和支持多集群管理、大数据、人工智能等更为复杂的业务场景。git

KubeSphere 从项目初始阶段就采用开源的方式来进行项目的良性发展,相关的项目源代码和文档都在GitHub可见。KubeSphere 支持部署和运行在包括公有云、私有云、VM、BM 和 Kubernetes 等任何基础设施之上,而且支持在线安装与离线安装,目前已在阿里云、腾讯云、华为云、青云、AWS、Kubernetes上进行过部署测试github

KubeSphere 2.1 提供了全栈化容器部署与管理平台,支持在生产环境安装与使用,它的核心功能能够归纳在如下的功能架构图中,了解 2.1 的具体功能说明,能够在产品功能进行查看。数据库

安装要求

KubeSphere支持直接在Linux上部署集群,也支持在Kubernetes上部署,我这里选择后者,基本的要求以下:json

  • Kubernetes版本:1.15.x ≤ K8s version ≤ 1.17.x
  • Helm版本:2.10.0 ≤ Helm Version < 3.0.0(不支持 helm 2.16.0#6894),且已安装了 Tiller,参考如何安装与配置 Helm(预计 3.0 支持 Helm v3);
  • 集群已有默认的存储类型(StorageClass),若尚未准备存储请参考安装 OpenEBS 建立LocalPV 存储类型用做开发测试环境。
  • 集群可以访问外网,若无外网请参考在Kubernetes离线安装KubeSphere

安装Helm

Helm简介

helm基本思想如图所示api

如下内容引用自此篇文章安全

为何要用Helmbash

首先在原来项目中都是基于yaml文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分红不少个组件来部署,每一个组件可能对应一个deployment.yaml,一个service.yaml,一个Ingress.yaml还可能存在各类依赖关系,这样一个项目若是有5个组件,极可能就有15个不一样的yaml文件,这些yaml分散存放,若是某天进行项目恢复的话,很难知道部署顺序,依赖关系等,而全部这些包括服务器

  • 基于yaml配置的集中存放
  • 基于项目的打包
  • 组件间的依赖
  • 均可以经过helm来进行解决。

Helm 基本概念网络

Helm 能够理解为 Kubernetes 的包管理工具,能够方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念

  • Chart:一个 Helm 包,其中包含了运行一个应用所须要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义
  • Release: 在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 能够安装不少次。每次安装都会建立一个新的 release。例如一个 MySQL Chart,若是想在服务器上运行两个数据库,就能够把这个 Chart 安装两次。每次安装都会生成本身的 Release,会有本身的 Release 名称。
  • Repository:用于发布和存储 Chart 的仓库。

Helm 组件及架构

Helm 采用客户端/服务器架构,有以下组件组成:

  • Helm CLI 是 Helm 客户端,能够在本地执行
  • Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管理 Kubernetes 应用程序的生命周期
  • Repository 是 Chart 仓库,Helm客户端经过HTTP协议来访问仓库中Chart的索引文件和压缩包。

Helm安装

安装过程以下

# 建立部署目录并下载Helm
mkdir tiller
cd tiller

# 先使用官方的方式安装,若是安装不了,能够看到下载文件的地址,而后手动下载解压
curl -L https://git.io/get_helm.sh | bash
# 获取到下载地址后,想办法下载
wget https://get.helm.sh/helm-v2.16.3-linux-amd64.tar.gz
tar zxf helm-v2.16.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

# 验证
helm version

部署tiller,对于tiller的官方的解释以下

Tiller is the server component for helm. Tiller will be present in the kubernetes cluster and the helm client talks to it for deploying applications using helm charts.

先建立 SA

# yaml文件以下
$ cat /root/tiller/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

建立ac

kubectl apply -f helm-rbac.yaml

初始化,这个过程可能不会成功,具体接着往下看

helm init --service-account=tiller --history-max 300

检查初始化的状况,不出意外的话,墙内用户看pod详情能够看到获取不到镜像的错误。

kubectl get deployment tiller-deploy -n kube-system

若是一直获取不到镜像,能够经过更换到Azure中国镜像源来解决,操做步骤以下:

# 编辑 deploy
kubectl edit deploy tiller-deploy -n kube-system
# 查找到image地址,替换为以下地址,保存退出
gcr.azk8s.cn/kubernetes-helm/tiller:v2.16.3

接下来稍等片刻,再次查看deployment和pod详情,就正常了

kubectl get deployment tiller-deploy -n kube-system

安装StorageClass

Kubernetes支持多种StorageClass,我这选择NFS做为集群的StorageClass。

参考地址:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client

下载所需文件

下载所需文件,并进行内容调整

mkdir nfsvolume && cd nfsvolume
for file in class.yaml deployment.yaml rbac.yaml ; do wget https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/$file ; done

修改deployment.yaml中的两处NFS服务器IP和目录

...
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.115.50
            - name: NFS_PATH
              value: /data/k8s
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.115.50
            path: /data/k8s

部署建立

具体的说明能够去官网查看。

kubectl create -f rbac.yaml
kubectl create -f class.yaml
kubectl create -f deployment.yaml

若是日志中看到“上有坏超级块”,请在集群内全部机器上安装nfs-utils并启动。

yum -y install nfs-utils
systemctl start nfs-utils
systemctl enable nfs-utils
rpcinfo -p

查看storageclass

$ kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage fuseim.pri/ifs Delete Immediate false 10m

标记一个默认的StorageClass

操做命令格式以下

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

请注意,最多只能有一个 StorageClass 可以被标记为默认。

验证标记是否成功

$ kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage (default) fuseim.pri/ifs Delete Immediate false 12m

部署kubesphere

过程很简单,若是你的机器资源足够,建议你进行完整安装,操做步骤以下。若是你的资源不是很充足,则能够进行最小化安装,参考地址。我固然是选择完整安装了,香!

# 下载yaml文件
mkdir kubesphere && cd kubesphere
wget https://raw.githubusercontent.com/kubesphere/ks-installer/master/kubesphere-complete-setup.yaml
# 部署 kubesphere
kubectl apply -f kubesphere-complete-setup.yaml

这个过程根据你实际网速,实际使用时间长度有所不一样。你能够经过以下命令查看实时的日志输出。当你在日志充看到http://192.168.115.49:30880字样的输出时,证实你的集群安装成功。

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

当你看到以下日志输出,证实你的 KubeSphere 部署成功

**************************************************
task monitoring status is successful
task notification status is successful
task devops status is successful
task alerting status is successful
task logging status is successful
task openpitrix status is successful
task servicemesh status is successful
total: 7     completed:7
**************************************************
#####################################################
###              Welcome to KubeSphere!           ###
#####################################################

Console: http://192.168.115.49:30880
Account: admin
Password: P@88w0rd

NOTES:
  1. After logging into the console, please check the
     monitoring status of service components in
     the "Cluster Status". If the service is not
     ready, please wait patiently. You can start
     to use when all components are ready.
  2. Please modify the default password after login.

#####################################################

确认 Pod 都正常运行后,可以使用IP:30880访问 KubeSphere UI 界面,默认的集群管理员帐号为admin/P@88w0rd,Enjoy it,😏!

相关文章
相关标签/搜索