「这是我参与2022首次更文挑战的第29天,活动详情查看:2022首次更文挑战」
往期文章
Kubernetes概述
手把手带你搭建k8s
KubeSphere是什么?
KubeSphere是唯一一个由中国人自己发起的、全开源的、经Cloud Native Computing Foundation(简称CNCF)云原生基金会认证的Kubernetes(简称K8s)发行版。简单点来说,KubeSphere是面向云原生应用的全开源容器平台,以K8s为基础,管理云原生应用的一种分布式操作系统。它提供可插拔的开放式架构,让第三方应用可以无缝对接进来,解决混合云成为一种常态化带来的应用层面上的诉求,KubeSphere能够让企业快速迈入云原生时代。
2018年7月,青云QingCloud正式发布KubeSphere 1.0版本,2019年4月发布KubeSphere 2.0版本,此次KubeSphere 3.0版本对原有版本进行了全新升级。截至目前,KubeSphere在GitHub有3700多个Stars,上比去年多了2000多个Stars;Forks数量达到550个;KubeSphere的用户在过去一年急剧上升,现在已经达到上万个。另外,在过去半年,KubeSphere海外用户达到58%,已经超过国内用户。
安装kubesphere3.0环境
搭建NFS作为默认sc(所有节点)
- 配置NFS服务器
yum install -y nfs-utils
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
- 创建nfs服务器目录(主节点作为服务器,主节点操作)
mkdir -p /nfs/data
- 启动nfs服务命令
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
exportfs -r
- 检查配置是否生效
exportfs
- 搭建NFS-Client 服务器端防火墙开放111、662、875、892、2049的 tcp / udp 允许,否则远端客户无法连接。
*安装客户端工具(node节点操作)
showmount -e 192.168.159.128
- 创建同步文件夹 mkdir /root/nfsmount ls /root
- 将客户端的/root/nfsmount和/nfs/data/做同步(node节点操作) mount -t nfs 192.168.159.128:/nfs/data/ /root/nfsmount
设置动态供应
- 创建provisioner(NFS环境前面已经搭好)
名称 | nfs-storage | 自定义存储类名称 |
---|---|---|
NFS Server | 192.168.159.128 | NFS服务的IP地址 |
NFS Path | /nfs/data | NFS服务所共享的路径 |
- nfs-rbac.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-provisioner
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-provisioner-runner
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["watch", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services", "endpoints"]
verbs: ["get","create","list", "watch","update"]
- apiGroups: ["extensions"]
resources: ["podsecuritypolicies"]
resourceNames: ["nfs-provisioner"]
verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-provisioner
subjects:
- kind: ServiceAccount
name: nfs-provisioner
namespace: default
roleRef:
kind: ClusterRole
name: nfs-provisioner-runner
apiGroup: rbac.authorization.k8s.io
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccount: nfs-provisioner
containers:
- name: nfs-client-provisioner
image: lizhenliang/nfs-client-provisioner
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: storage.pri/nfs
- name: NFS_SERVER
value: 192.168.159.128
- name: NFS_PATH
value: /nfs/data
volumes:
- name: nfs-client-root
nfs:
server: 192.168.159.128
path: /nfs/data
- 执行创建nfs的yaml文件信息 kubectl apply -f nfs-rbac.yaml
创建storageclass
- storageclass-nfs.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storage-nfs
provisioner: storage.pri/nfs
reclaimPolicy: Delete
-
执行创建storageclass的yaml文件信息 kubectl apply -f storageclass-nfs.yaml
-
修改默认的驱动
kubectl patch storageclass storage-nfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
kubectl get sc 查看默认sc
helm
Helm 是 Kubernetes 的软件包管理工具。本文需要读者对 Docker、Kubernetes 等相关知识有一定的了解。 本文将介绍 Helm 中的相关概念和基本工作原理,并通过一些简单的示例来演示如何使用Helm来安装、升级、回滚一个 Kubernetes 应用
官网: helm.sh
- helm安装
wget https://get.helm.sh/helm-v3.1.2-linux-amd64.tar.gz ## 下载helm3.0安装包
tar zxvf helm-v3.1.2-linux-amd64.tar.gz ## 解压
mv linux-amd64/helm /usr/bin/helm ## 移动helm到usr/bin
helm version ## 查看helm版本
- 添加共有的仓库:
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
- 指定k8s集群的位置: 这一步非常关键,它是helm与k8s通讯的保证,这一步就是把k8s环境变量KUBECONFIG进行配置
export KUBECONFIG=/root/.kube/config #可以写到/etc/profile里
- helm的基本操作
# 添加仓库
$helm repo add {仓库名字} {仓库地址}
"{仓库名字}" has been added to your repositories
# 查询仓库列表
$helm repo list
NAME URL
{仓库名字} {仓库地址}
# 查询chart包
$helm search repo
# 删除仓库
$helm repo remove {仓库名字}
"{仓库名字}" has been removed from your repositories
KubeSphere3.0 安装
- 准备工作
您可以在虚拟机和裸机上安装 KubeSphere,并同时配置 Kubernetes。另外,只要 Kubernetes 集群满足以下前提条件,那么您也可以在云托管和本地 Kubernetes 集群上部署 KubeSphere。
支持的 Kubernetes 版本:1.15.x、1.16.x、1.17.x 或 1.18.x; 确保您的机器满足最低硬件要求:CPU > 1 核,内存 > 2 G; 在安装之前,需要配置 Kubernetes 集群中的默认存储类型; 当使用--cluster-signing-cert-file 和 --cluster-signing-key-file 参数启动时,在 kube-apiserver 中会激活 CSR 签名功能
-
执行
kubectl get sc
检查默认StorageClass -
通过
kubectl version
查看Kubernetes版本
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:07:13Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
注意:Kubernetes v1.17.3 不要安装官网最新版本Kubesphere3.1.0
- 下载安装文件 部分文件根据需要进行了修改
文件说明: kubesphere-installer-3.0.yaml 权限命名空间文件 cluster-configuration-3.0-default.yaml kubesphere基础配置 cluster-configuration-3.0.yaml 用户自定义的配置 kubesphere-delete.sh kubesphere删除脚本
- 安装 kubesphere
kubectl apply -f kubesphere-installer-3.0.yaml
kubectl apply -f cluster-configuration-3.0-default.yaml
- 检查安装日志,第一次安装会非常慢
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
- 看到如下日志表示安装成功
- 访问 kubesphere
cluster-configuration 插件
-
用户可以将
cluster-configuration-3.0-default.yaml
复制一份如:cluster-configuration-3.0.yaml
中,将cluster-configuration-3.0.yaml
文件中的 enabled 的值从false
改为true
开启组件 -
kubectl apply -f cluster-configuration-3.0-default.yaml
重新部署kubesphere
配置项 | 功能组件 | 描述 |
---|---|---|
alerting | KubeSphere 告警系统 | 使用户能够自定义告警策略,及时向接收器发送告警信息。支持自定义告警信息发送间隔以及告警级别。 |
auditing | KubeSphere | 审计日志系统 KubeSphere 审计日志系统提供了一套与安全相关并按时间顺序排列的记录,记录了平台上不同租户的活动。 |
devops | KubeSphere DevOps | 系统 基于 Jenkins 提供开箱即用的 CI/CD 功能,提供一站式 DevOps 方案,内置 Jenkins 流水线与 B2I & S2I。 |
events | KubeSphere 事件系统 | 提供一个图形化的 Web 控制台,用于导出、过滤和警告多租户 Kubernetes 集群中的 Kubernetes 事件。 |
logging | KubeSphere 日志系统 | 在统一的控制台中提供灵活的日志查询、收集和管理功能。可以添加第三方日志收集器,例如 Elasticsearch、Kafka 和 Fluentd。 |
metrics_server | HPA | 根据设定指标对 Pod 数量进行动态伸缩,使运行在上面的服务对指标的变化有一定的自适应能力。 |
networkpolicy | 网络策略 | 可以在同一个集群内部之间设置网络策略(比如限制或阻止某些实例 Pod 之间的网络请求)。 |
notification | KubeSphere 通知系统 | 允许用户将 Alertmanager 发送出来的告警通知到不同渠道,包括电子邮件、企业微信和 Slack(最新版本的 Notification Manager 支持钉钉和 Webhook)。 |
openpitrix | KubeSphere 应用商店 | 基于 Helm 的应用程序商店,允许用户管理应用的整个生命周期。 |
servicemesh | KubeSphere 服务网格 | (基于 Istio) 支持灰度发布、流量拓扑、流量治理、流量跟踪。 |
- 如果您使用 KubeKey 在 Linux 上安装 KubeSphere,默认情况下,除了 metrics_server 之外,不会启用上述组件。但是,如果在现有的 Kubernetes 集群上安装 KubeSphere,metrics_server 则默认禁用。这是因为您的环境可能已经安装了该组件,特别是对于云托管的 Kubernetes 集群。
- 在安装前,请确保您的机器符合硬件要求。如果想启用所有的可插拔组件,请参考推荐机器配置:CPU ≥ 8 Core,内存 ≥ 16 G,磁盘空间 ≥ 100 G。