本文来自于我的公众号程序猿天璇:基于Kubernetes部署安装KubeSphere,转载请保留链接 ;)
KubeSphere简介
Kubernetes官方有提供一套Dashboard,但是我这里选择功能更强大的KubeSphere,以下内容引用自KubeSphere官网:
KubeSphere
是在Kubernetes
之上构建的以应用为中心的企业级分布式容器平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点。除此之外,平台已经整合并优化了多个适用于容器场景的功能模块,以完整的解决方案帮助企业轻松应对敏捷开发与自动化运维、DevOps、微服务治理、灰度发布、多租户管理、工作负载和集群管理、监控告警、日志查询与收集、服务与网络、应用商店、镜像构建与镜像仓库管理和存储管理等多种业务场景。后续版本还将提供和支持多集群管理、大数据、人工智能等更为复杂的业务场景。
KubeSphere 从项目初始阶段就采用开源的方式来进行项目的良性发展,相关的项目源代码和文档都在GitHub
可见。KubeSphere 支持部署和运行在包括公有云、私有云、VM、BM 和 Kubernetes 等任何基础设施之上,并且支持在线安装与离线安装,目前已在阿里云、腾讯云、华为云、青云、AWS、Kubernetes上进行过部署测试
。
KubeSphere 2.1 提供了全栈化容器部署与管理平台,支持在生产环境安装与使用,它的核心功能可以概括在以下的功能架构图中,了解 2.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基本思想如图所示
以下内容引用自 此篇文章
为什么要用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,😏!