k8s搭建kubesphere3.0

232 阅读7分钟

「这是我参与2022首次更文挑战的第29天,活动详情查看:2022首次更文挑战

往期文章

Kubernetes概述

手把手带你搭建k8s

KubeSphere是什么?

KubeSphere是唯一一个由中国人自己发起的、全开源的、经Cloud Native Computing Foundation(简称CNCF)云原生基金会认证的Kubernetes(简称K8s)发行版。简单点来说,KubeSphere是面向云原生应用的全开源容器平台,以K8s为基础,管理云原生应用的一种分布式操作系统。它提供可插拔的开放式架构,让第三方应用可以无缝对接进来,解决混合云成为一种常态化带来的应用层面上的诉求,KubeSphere能够让企业快速迈入云原生时代。 image 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 image

  • 搭建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

设置动态供应

image118.png

  • 创建provisioner(NFS环境前面已经搭好)
名称nfs-storage自定义存储类名称
NFS Server192.168.159.128NFS服务的IP地址
NFS Path/nfs/dataNFS服务所共享的路径
  • 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 image

helm

Helm 是 Kubernetes 的软件包管理工具。本文需要读者对 Docker、Kubernetes 等相关知识有一定的了解。 本文将介绍 Helm 中的相关概念和基本工作原理,并通过一些简单的示例来演示如何使用Helm来安装、升级、回滚一个 Kubernetes 应用 官网: helm.sh image.png

  • 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 image

  • 通过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

kubesphere3.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
  • 看到如下日志表示安装成功 image
  • 访问 kubesphere
    image

cluster-configuration 插件

image

  • 用户可以将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

配置项功能组件描述
alertingKubeSphere 告警系统使用户能够自定义告警策略,及时向接收器发送告警信息。支持自定义告警信息发送间隔以及告警级别。
auditingKubeSphere审计日志系统 KubeSphere 审计日志系统提供了一套与安全相关并按时间顺序排列的记录,记录了平台上不同租户的活动。
devopsKubeSphere DevOps系统 基于 Jenkins 提供开箱即用的 CI/CD 功能,提供一站式 DevOps 方案,内置 Jenkins 流水线与 B2I & S2I。
eventsKubeSphere 事件系统提供一个图形化的 Web 控制台,用于导出、过滤和警告多租户 Kubernetes 集群中的 Kubernetes 事件。
loggingKubeSphere 日志系统在统一的控制台中提供灵活的日志查询、收集和管理功能。可以添加第三方日志收集器,例如 Elasticsearch、Kafka 和 Fluentd。
metrics_serverHPA根据设定指标对 Pod 数量进行动态伸缩,使运行在上面的服务对指标的变化有一定的自适应能力。
networkpolicy网络策略可以在同一个集群内部之间设置网络策略(比如限制或阻止某些实例 Pod 之间的网络请求)。
notificationKubeSphere 通知系统允许用户将 Alertmanager 发送出来的告警通知到不同渠道,包括电子邮件、企业微信和 Slack(最新版本的 Notification Manager 支持钉钉和 Webhook)。
openpitrixKubeSphere 应用商店基于 Helm 的应用程序商店,允许用户管理应用的整个生命周期。
servicemeshKubeSphere 服务网格(基于 Istio) 支持灰度发布、流量拓扑、流量治理、流量跟踪。
  • 如果您使用 KubeKey 在 Linux 上安装 KubeSphere,默认情况下,除了 metrics_server 之外,不会启用上述组件。但是,如果在现有的 Kubernetes 集群上安装 KubeSphere,metrics_server 则默认禁用。这是因为您的环境可能已经安装了该组件,特别是对于云托管的 Kubernetes 集群。
  • 在安装前,请确保您的机器符合硬件要求。如果想启用所有的可插拔组件,请参考推荐机器配置:CPU ≥ 8 Core,内存 ≥ 16 G,磁盘空间 ≥ 100 G。

感谢leifengyang提供的参考