基于Kubernetes部署安装KubeSphere

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

KubeSphere简介

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

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

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

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

基于Kubernetes部署安装KubeSphere_第1张图片

安装要求

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

  • 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基本思想如图所示

基于Kubernetes部署安装KubeSphere_第2张图片

以下内容引用自此篇文章

为什么要用Helm

首先在原来项目中都是基于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,!

基于Kubernetes部署安装KubeSphere_第3张图片

基于Kubernetes部署安装KubeSphere_第4张图片

你可能感兴趣的:(k8s,kubernetes,容器,微服务)