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
1.1、简介
Helm 基本思想如图所示
2
以下内容引用自 此篇文章
Helm 基本概念
Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念:
- Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义
- Release: 在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。
- Repository:用于发布和存储 Chart 的仓库。
1.2、安装
安装步骤如下:
(1)、安装客户端
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
(2)、安装tiller服务端
直接执行如下命令安装
helm init
不过我们会发现pod的状态是imagePullError。这是因为镜像在国外。
我们需要改成国内的镜像。
kubectl edit deploy tiller-deploy -n kube-system
把镜像地址改成如下:
registry.cn-hangzhou.aliyuncs.com/rookieops/tiller:v2.16.3
然后可以看到pod正常了,但是现在还没完,如果仅仅是这样,还是用不了,会报权限错误。我们需要给tiller添加权限,yaml如下:
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
执行上面的清单文件,然后再给tiller打上权限,命令如下:2
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
现在的helm就可以正常使用了。
# helm version
Client: &version.Version{SemVer:"v2.16.3", GitCommit:"1ee0254c86d4ed6887327dabed7aa7da29d7eb0d", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.3", GitCommit:"1ee0254c86d4ed6887327dabed7aa7da29d7eb0d", GitTreeState:"clean"}
二、安装storageClass
Kubernetes 支持多种 StorageClass,我这选择 NFS 作为集群的 StorageClass。
参考地址:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client
2.1、安装nfs
安装命令如下:
yum -y install nfs-utils
systemctl start nfs-utils
systemctl enable nfs-utils
然后创建共享目录:
mkdir /data/k8s -p
配置NFS共享()
# cat /etc/exports
/data/k8s *(rw,sync,no_root_squash)
然后重启NFS
systemctl restart nfs
2.2、部署storageclass
(1)、下载所需要的文件
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
(2)、修改 deployment.yaml 中的两处 NFS 服务器 IP 和目录
....
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 172.17.100.120
- name: NFS_PATH
value: /data/k8s
volumes:
- name: nfs-client-root
nfs:
server: 172.17.100.120
path: /data/k8s
(3)、创建清单文件
kubectl create -f rbac.yaml
kubectl create -f class.yaml
kubectl create -f deployment.yaml
然后可以看到storageclass创建成功。
# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage (default) fuseim.pri/ifs Delete Immediate false 54m
(4)、把其标记为默认的storageclass
kubectl patch storageclass -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
到此storageclass部署完成。
三、部署kubesphere
过程很简单,如果你的机器资源足够,建议你进行完整安装,操作步骤如下。如果你的资源不是很充足,则可以进行最小化安装,参考地址。
我这里进行最小化安装。
wget https://raw.githubusercontent.com/kubesphere/ks-installer/master/kubesphere-minimal.yaml
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
当你看到如下日志输出,证明你的 KubeSphere 部署成功.
Start installing monitoring
**************************************************
task monitoring status is successful
total: 1 completed:1
**************************************************
#####################################################
### Welcome to KubeSphere! ###
#####################################################
Console: http://172.17.100.120: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.
#####################################################
参考文档:
1、https://kubesphere.io/docs/zh-CN/installation/install-on-k8s/