本文来自于个人公众号 程序猿天璇: 基于Kubernetes部署安装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);LocalPV 存储类型
用做开发测试环境。Kubernetes
离线安装KubeSphere
。helm基本思想如图所示api
如下内容引用自此篇文章安全
为何要用Helm?bash
首先在原来项目中都是基于yaml文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分红不少个组件来部署,每一个组件可能对应一个deployment.yaml,一个service.yaml,一个Ingress.yaml还可能存在各类依赖关系,这样一个项目若是有5个组件,极可能就有15个不一样的yaml文件,这些yaml分散存放,若是某天进行项目恢复的话,很难知道部署顺序,依赖关系等,而全部这些包括服务器
Helm 基本概念网络
Helm 能够理解为 Kubernetes 的包管理工具,能够方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念
Helm 组件及架构
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
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
操做命令格式以下
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
过程很简单,若是你的机器资源足够,建议你进行完整安装,操做步骤以下。若是你的资源不是很充足,则能够进行最小化安装,参考地址。我固然是选择完整安装了,香!
# 下载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,😏!