Kubesphere 保姆级分析
应用场景
KubeSphere 适用于多种场景,为企业提供容器化的环境,借助完善的管理和运维功能,让企业在数字化转型过程中从容应对各种挑战和各类业务场景,如多云多集群管理、敏捷软件开发、自动化运维、微服务治理、流量管理以及 DevOps 持续集成与交付等。
架构原理
一. 简介
KubeSphere 将 前端 与 后端 分开,实现了面向云原生的设计,后端的各个功能组件可通过 REST API 对接外部系统。 KubeSphere 无底层的基础设施依赖,可以运行在任何 Kubernetes、私有云、公有云、VM 或物理环境(BM)之上。 此外,它可以部署在任何 Kubernetes 发行版上。
二. 组网图及架构说明
组织架构
如下图所示,KubeSphere 整体组织结构分为前端、后端,以及基础设施三层。(注:以下提及的部分功能并非核心功能,需按需安装可插拔组件。)
- 前端
- 前端即页面,为用户提供直接的 web 交互入口。主要包含以下部分:
- 普通用户页面(normal user): 平台上部署维护自己项目服务的普通用户界面,主要包含微服务,Devops,应用和负载等。
- 管理员页面(admin/manager): 平台上维护整个平台的管理员页面,主要包含项目管理,账户/角色管理,节点管理,存储管理,工作空间管理几部分
- 平台监控页面: 为用户提供集群的整体情况概览,主要有平台监控,日志,事件,调用监控分析等部分。
- 后台
- 后台主要是在 kubernetes 的基础设施上构建用户需要的业务的具体支持,主要包含以下几部分:
- 系统管理(system): 账户管理,终端Console管理,API Server交互中心,api 网关,业务逻辑等核心功能。
- 监控管理(monitoring):日志监控等外围附带的监控系统服务。
- 自动化运维(Devops): 自动化流水线和服务网格等支持。
- 以下是和基础设施 kubernetes 交互,完成后台基础设置的部分
- 权限安全系统(Security): 以例如RBAC模式的登录鉴权和权限控制。
- 存储管理(Storage): 存储虚拟化,在k8s的csi下连接外部的nfs,ceph等存储系统完成存储支持。
- 网络支持(SDN): 网络虚拟化,在k8s的cni下使用calico或flannel等网络插件完成网络虚拟化。
- 基础设施
- 底层设施主要是运行KubeSphere的底层云平台,使用虚拟机和kubernetes等搭建的最底层的平台支持。
模块组网
KubeSphere 的基本模块组网如下图所示:
KubeSphere 在主要由以下几个组件构成:
- ks-console:前端服务组件,提供 KubeSphere 的控制台服务,为用户提供便捷的可视化操作界面。
- ks-apiserver:后端服务组件,是整个集群管理的 API 接口和集群内部各个模块之间通信的枢纽,同时负责集群安全控制。
- ks-controller-manager:资源状态维护组件,实现业务逻辑的,例如创建企业空间时,为其创建对应的权限;或创建服务策略时,生成对应的Istio配置等。
- plugin:可插拔组件,KubeSphere 解耦了一些核心功能组件。这些组件设计成了可插拔式,可以在安装之前或之后启用它们。如果不启用它们,KubeSphere 可以最小化进行安装部署。不同的可插拔组件部署在不同的命名空间中。
三. 架构原理分析
ks-console
ks-console是用户和KubeSphere交互的入口,主要为用户提供页面的交互方式,以及少量API接口。
从功能的角度来分析,如图 一-3所示,ks-console 的功能上,第一层级主要包含会话管理,其他API,页面功能三部分。
图 一-3 ks-console的功能层级示意图
- 会话管理主要负责在登录授权后,维持用户token等用户权限的cache管理。
- 其他API主要是提供了部分直接和镜像仓库交互或者页面下载指令的部分API。
- 页面主要提供用户的交互入口,提供可视化的操作界面。
- 将页面功能细化,又可以分为管理页面和终端页面,终端页面是提供在页面上使用命令行直接与kubernetes 的交互界面,管理页面则是集成对整个 KubeSphere 所提供功能的交互界面。管理业面又可分为集群管理,权限管理和系统设置三部分。
- 集群管理:管理集群的整体资源
- 权限管理:管理用户或用户组的权限
- 系统设置:对系统邮箱,webhook 等全局配置进行管理
从架构上来看,如图 一-4所示,ks-console 包含图中上面四层,包括路由层、会话层、路由分发层、页面逻辑层。
图 一-4 ks-console的架构层级示意图
- 路由层是整个前端系统的入口,主要使用 Koa(基于Node.js平台的web开发框架)提供了最外层的服务框架,其中嵌入了配置管理config和部分交互数据压缩等中间件工具utils。
- 会话层主要提供了用户的登录,以及登录后的 session 数据维持管理;提供页面的访问入口。此外还有镜像仓库等API接口。
- 路由分发层则为页面上的业务请求做了功能分发,根据路由的路径不同,去查询对应打包文件中的页面入口,从而真正让用户进入终端页面(terminal)和管理页面(KubeSphere pages)。
- 页面逻辑层中才是管理页面的真正实现,使用 React(用于构建用户界面的 JavaScript 库)框架,完成了页面功能的支持。
- 管理页面或者终端页面最终都是在后台API层通过 ks-apiserver 与后台交互。
ks-apiserver
ks-apiserver 是 KubeSphere 核心的后端组件,负责后端数据的交互,请求的代理分发、认证与鉴权。ks-apiserver 聚合整个系统的业务功能,对外提供统一的API入口,下图是 ks-apiserver 的架构图:
图 一-5 ks-apiserver的架构示意图
从请求的链路来分析,所有的请求都经过一个统一的入口,其中以 /kapi 和 /kapis 开头的是 KubeSphere 拓展聚合的API,/api 和 /apis 开头的都属于 Kubernetes 原生的API,此外还有KubeSphere 提供的认证相关API。所有的请求在经过 Access control 的认证Authe和鉴权Autho之后,再完成审计Auduting(可选)后由请求分发 Request Dispatch 功能将请求发送到不同的后端。针对原生 Kubernetes 资源的请求,会被转发到集群的 kube-apiserver 来操作和管理原生资源。KubeSphere 拓展聚合的API也是通过动态注册的方式拓展对 K8s API 的扩展,通过CRD 对资源进行抽象,再通过controller监听资源变化维护资源状态。
下图展示的是 ks-apiserver 聚合的功能对象主要类型:
图 一-6 ks-apiserver聚合的功能对象
- kubernetes 原生的对象,由 ks-apiserver 连接 k8s-apiserver,直接获取更改 etcd 中 kubernetes 的原始数据(origin data)即可,操作的对象即 kubernetes 原生的 configmap. deployment 等对象。
- ks-controller-manager 封装的对象,ks-controller-manager 的封装功能逻辑以 crd 对象的方式表现在 etcd中,ks-apiserver 通过连接 k8s-apiserver 操作 etcd 中的 crd 数据(crd data)即可,操作ks-controller-manager 扩展的逻辑功能。
- 第三方的 operator 对象,如 prometheus-operator 等第三方完成的模块以 operator 的方式运行在系统中,其功能对应的对象也以 crd 的形式存放在 etcd 中,ks-apiserver 也是通过和 k8s-apiserver 交互操作对应的 crd 完成。
- 普通的服务对象,如 jenkins,sonarqube 等以普通服务的方式运行在系统中,ks-apiserver 直接通过网络调用和此类对象交互
ks-controller-manager
ks-controller-manager 作为管理控制器,通过监听etcd中资源的变化,同步配置对应资源的状态,以达到最终状态的一致性。功能与 controller-manager 的功能类似,不过主要为维护 KubeSphere 新增的资源。ks-controller-manager 整体结构如下图所示:
图 一-7 ks-controller-manager整体结构
主要由两部分组成,InformerFactory和controller。
- InformerFactory
- InformerFactory是watch etcd中指定资源并获取同步信息的一个适配器:
- 同步watch的资源变化并触发用户注册的处理回调
- 提供更新etcd中资源的接口。
ks-controller-manager就是是通过每个 InformerFactory 完成资源信息的同步,这里有多个Shared InformerFactory,如 kubernetes, KubeSphere, istio 等,主要负责对应相关资源类的信息同步。
虽然有多个 InformerFactory 句柄,但 KubeSphere,istio 等都是从 kubernetes 句柄衍生出来的,因此各个 Shared InformerFactory 最终都是通过kubernetes操作etcd资源。
- controller
controller 是在 InformerFactory 同步到资源变化后,根据资源变化具体操作对应资源的控制逻辑。例如,当 istio InformerFactory 获取到网络治理相关配置发生变化时,virtual service 就会操作istio 创建或更新网络策略。controller 中的 application, cluster, globalrole, helm 等分别提供对应资源同步时的具体操作。
plugin
从2.1.0版本开始,KubeSphere解耦了一些核心功能组件。这些组件设计成了可插拔式,可以在安装之前或之后启用它们。不同的可插拔组件部署在不同的命名空间中。可以根据需求启用任意组件。下面的表格列出了KubeSphere的所有可插拔组件:
表格 还在加载中,请等待加载完成后再尝试复制
使用指南
一. 使用软硬环境
硬件要求
通用x86服务器
操作系统
支持以下操作系统及版本
类型 | 版本 |
Ubuntu | 16.04,18.04,20.04 |
Debian | Buster,Stretch |
CentOS | 7.x |
Red Hat Enterprise Linux | 7 |
SUSE Linux Enterprise Server 15 /openSUSE Leap | 15.2 |
目前使用的是 Ubuntu 20.04.3 LTS server
浏览器
建议使用 chrome 或者 Firefox浏览器
软件包
安装 KubeSphere 需要存储类支持以动态创建 pvc , 以下是安装 NFS 所需deb包:
keyutils_1.5.9-9.2ubuntu2_amd64.deb
libtirpc1_0.2.5-1.2ubuntu0.1_amd64.deb
rpcbind_0.2.3-0.6ubuntu0.18.04.4_amd64.deb
libnfsidmap2_0.25-5.1_amd64.deb
nfs-common_1%3a1.3.4-2.1ubuntu5.5_amd64.deb
该文档中介绍的是在 Kubernetes 集群上以容器的方式部署 KubeSphere,需要的镜像列表如下所示:
##k8s-images
kubesphere/kube-apiserver:v1.23.7
kubesphere/kube-controller-manager:v1.23.7
kubesphere/kube-proxy:v1.23.7
kubesphere/kube-scheduler:v1.23.7
kubesphere/kube-apiserver:v1.24.1
kubesphere/kube-controller-manager:v1.24.1
kubesphere/kube-proxy:v1.24.1
kubesphere/kube-scheduler:v1.24.1
kubesphere/kube-apiserver:v1.22.10
kubesphere/kube-controller-manager:v1.22.10
kubesphere/kube-proxy:v1.22.10
kubesphere/kube-scheduler:v1.22.10
kubesphere/kube-apiserver:v1.21.13
kubesphere/kube-controller-manager:v1.21.13
kubesphere/kube-proxy:v1.21.13
kubesphere/kube-scheduler:v1.21.13
kubesphere/pause:3.7
kubesphere/pause:3.6
kubesphere/pause:3.5
kubesphere/pause:3.4.1
coredns/coredns:1.8.0
coredns/coredns:1.8.6
calico/cni:v3.20.0
calico/kube-controllers:v3.20.0
calico/node:v3.20.0
calico/pod2daemon-flexvol:v3.20.0
calico/typha:v3.20.0
kubesphere/flannel:v0.12.0
openebs/provisioner-localpv:2.10.1
openebs/linux-utils:2.10.0
library/haproxy:2.3
kubesphere/nfs-subdir-external-provisioner:v4.0.2
kubesphere/k8s-dns-node-cache:1.15.12
##kubesphere-images
kubesphere/ks-installer:v3.3.0
kubesphere/ks-apiserver:v3.3.0
kubesphere/ks-console:v3.3.0
kubesphere/ks-controller-manager:v3.3.0
kubesphere/kubectl:v1.22.0
kubesphere/kubectl:v1.21.0
kubesphere/kubectl:v1.20.0
kubesphere/kubefed:v0.8.1
kubesphere/tower:v0.2.0
minio/minio:RELEASE.2019-08-07T01-59-21Z
minio/mc:RELEASE.2019-08-07T23-14-43Z
csiplugin/snapshot-controller:v4.0.0
kubesphere/nginx-ingress-controller:v1.1.0
mirrorgooglecontainers/defaultbackend-amd64:1.4
kubesphere/metrics-server:v0.4.2
redis:5.0.14-alpine
haproxy:2.0.25-alpine
alpine:3.14
osixia/openldap:1.3.0
kubesphere/netshoot:v1.0
##kubeedge-images
kubeedge/cloudcore:v1.9.2
kubeedge/iptables-manager:v1.9.2
kubesphere/edgeservice:v0.2.0
##gatekeeper-images
openpolicyagent/gatekeeper:v3.5.2
##openpitrix-images
kubesphere/openpitrix-jobs:v3.2.1
##kubesphere-devops-images
kubesphere/devops-apiserver:v3.3.0
kubesphere/devops-controller:v3.3.0
kubesphere/devops-tools:v3.3.0
kubesphere/ks-jenkins:v3.3.0-2.319.1
jenkins/inbound-agent:4.10-2
kubesphere/builder-base:v3.2.2
kubesphere/builder-nodejs:v3.2.0
kubesphere/builder-maven:v3.2.0
kubesphere/builder-maven:v3.2.1-jdk11
kubesphere/builder-python:v3.2.0
kubesphere/builder-go:v3.2.0
kubesphere/builder-go:v3.2.2-1.16
kubesphere/builder-go:v3.2.2-1.17
kubesphere/builder-go:v3.2.2-1.18
kubesphere/builder-base:v3.2.2-podman
kubesphere/builder-nodejs:v3.2.0-podman
kubesphere/builder-maven:v3.2.0-podman
kubesphere/builder-maven:v3.2.1-jdk11-podman
kubesphere/builder-python:v3.2.0-podman
kubesphere/builder-go:v3.2.0-podman
kubesphere/builder-go:v3.2.2-1.16-podman
kubesphere/builder-go:v3.2.2-1.17-podman
kubesphere/builder-go:v3.2.2-1.18-podman
kubesphere/s2ioperator:v3.2.1
kubesphere/s2irun:v3.2.0
kubesphere/s2i-binary:v3.2.0
kubesphere/tomcat85-java11-centos7:v3.2.0
kubesphere/tomcat85-java11-runtime:v3.2.0
kubesphere/tomcat85-java8-centos7:v3.2.0
kubesphere/tomcat85-java8-runtime:v3.2.0
kubesphere/java-11-centos7:v3.2.0
kubesphere/java-8-centos7:v3.2.0
kubesphere/java-8-runtime:v3.2.0
kubesphere/java-11-runtime:v3.2.0
kubesphere/nodejs-8-centos7:v3.2.0
kubesphere/nodejs-6-centos7:v3.2.0
kubesphere/nodejs-4-centos7:v3.2.0
kubesphere/python-36-centos7:v3.2.0
kubesphere/python-35-centos7:v3.2.0
kubesphere/python-34-centos7:v3.2.0
kubesphere/python-27-centos7:v3.2.0
quay.io/argoproj/argocd:v2.3.3
quay.io/argoproj/argocd-applicationset:v0.4.1
ghcr.io/dexidp/dex:v2.30.2
redis:6.2.6-alpine
##kubesphere-monitoring-images
jimmidyson/configmap-reload:v0.5.0
prom/prometheus:v2.34.0
kubesphere/prometheus-config-reloader:v0.55.1
kubesphere/prometheus-operator:v0.55.1
kubesphere/kube-rbac-proxy:v0.11.0
kubesphere/kube-state-metrics:v2.3.0
prom/node-exporter:v1.3.1
prom/alertmanager:v0.23.0
thanosio/thanos:v0.25.2
grafana/grafana:8.3.3
kubesphere/kube-rbac-proxy:v0.8.0
kubesphere/notification-manager-operator:v1.4.0
kubesphere/notification-manager:v1.4.0
kubesphere/notification-tenant-sidecar:v3.2.0
##kubesphere-logging-images
kubesphere/elasticsearch-curator:v5.7.6
kubesphere/elasticsearch-oss:6.8.22
kubesphere/fluentbit-operator:v0.13.0
docker:19.03
kubesphere/fluent-bit:v1.8.11
kubesphere/log-sidecar-injector:1.1
elastic/filebeat:6.7.0
kubesphere/kube-events-operator:v0.4.0
kubesphere/kube-events-exporter:v0.4.0
kubesphere/kube-events-ruler:v0.4.0
kubesphere/kube-auditing-operator:v0.2.0
kubesphere/kube-auditing-webhook:v0.2.0
##istio-images
istio/pilot:1.11.1
istio/proxyv2:1.11.1
jaegertracing/jaeger-operator:1.27
jaegertracing/jaeger-agent:1.27
jaegertracing/jaeger-collector:1.27
jaegertracing/jaeger-query:1.27
jaegertracing/jaeger-es-index-cleaner:1.27
kubesphere/kiali-operator:v1.38.1
kubesphere/kiali:v1.38
##example-images
busybox:1.31.1
nginx:1.14-alpine
joosthofman/wget:1.0
nginxdemos/hello:plain-text
wordpress:4.8-apache
mirrorgooglecontainers/hpa-example:latest
java:openjdk-8-jre-alpine
fluent/fluentd:v1.4.2-2.0
perl:latest
kubesphere/examples-bookinfo-productpage-v1:1.16.2
kubesphere/examples-bookinfo-reviews-v1:1.16.2
kubesphere/examples-bookinfo-reviews-v2:1.16.2
kubesphere/examples-bookinfo-details-v1:1.16.2
kubesphere/examples-bookinfo-ratings-v1:1.16.3
##weave-scope-images
weaveworks/scope:1.13.0
其中的主要镜像分类介绍如下:
- k8s-images:Kubernetes 组件相关镜像(可选,如果自己部署k8s集群无需下载)
- kubesphere-images:Kubesphere 组件相关镜像(必选)
- kubeedge-images:Kubesphere 上边支持 KubeEdge 可插拔组件镜像(可选,可按需下载)
- gatekeeper-images:基于 OPA(Open Policy Agent) 的一个 Kubernetes 策略解决方案(可选)
- openpitrix-images:Kubesphere 上边应用商店可插拔组件镜像(可选,可按需下载)
- kubesphere-devops-images:Kubesphere 上DevOps 系统功能可插拔组件相关的镜像(可选,可按需下载)
- kubesphere-monitoring-images:KubeSphere 上监控组件(开启监控功能,必选)
- kubesphere-logging-images:KubeSphere 上日志系统组件(开启日志功能,必选)
- istio-images:KubeSphere 服务网格,提供细粒度的流量治理、可观测性、流量追踪以及可视化流量拓扑图(可选)
- example-images:应用商店示例应用(可选)
- weave-scope-images:查看应用和容器的服务间通信拓扑图(可选)
二. 安装部署
安装 NFS
安装NFS的原因是 KubeSphere 安装过程需要依赖于集群中默认的 storageClass,这里选择NFS作为为集群提供默认 storageClass。
- 安装NFS相关deb包
dpkg -i *.deb
- 设置 nfs 服务
mkdir -p /opt/nfs
vim /etc/export # /opt/nfs *(rw,no_root_squash)
service nfs-kernel-server restart
- 创建 rbac.yaml
- 根据当前的 namespace 来配置 rbac,为nfs-provisioner 提供 rbac 权限内容参考以下文件:
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-client-provisioner-runner
rules:- apiGroups: [""]resources: ["nodes"]verbs: ["get", "list", "watch"]- 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: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io
- 创建deployment.yaml文件
- nfs-provisioner的部署文件,其中环境变量env中的NFS_SERVER和NFS_PATH的value值要根据前面步骤2设置nfs服务中保持一致,参考文件:
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: k8s-sigs.io/nfs-subdir-external-provisioner- name: NFS_SERVERvalue: x.x.x.x- name: NFS_PATHvalue: /home/kubesphere/nfsdatavolumes:- name: nfs-client-rootnfs:server: x.x.x.xpath: /home/kubesphere/nfsdata
- 创建class.yaml文件
- 该文件是为了设置集群中的默认 default storageClass,参考文件如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:annotations:storageclass.kubernetes.io/is-default-class: "true" # 标记为默认 scname: nfs-client-kubesphere
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:pathPattern: "${.PVC.namespace}/${.PVC.annotations.nfs.io/storage-path}" # waits for nfs.io/storage-path annotation, if not specified will accept as empty string.onDelete: delete
安装 KubeSphere
- 设置安装配置文件 cluster-configuration.yaml
- 该文件是kubeSphere安装的配置文件,其中包括私有镜像仓库地址设置,可插拔组件的启用开关等,例如按下面设置私有仓库地址
---
apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:name: ks-installernamespace: kubesphere-systemlabels:version: v3.3.0
spec:persistence:storageClass: "" # If there is no default StorageClass in your cluster, you need to specify an existing StorageClass here.authentication:jwtSecret: "" # Keep the jwtSecret consistent with the Host Cluster. Retrieve the jwtSecret by executing "kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep jwtSecret" on the Host Cluster.local_registry: "x.x.x.x" # Add your private registry address if it is needed.# dev_tag: "" # Add your kubesphere image tag you want to install, by default it's same as ks-installer release version.etcd:monitoring: false # Enable or disable etcd monitoring dashboard installation. You have to create a Secret for etcd before you enable it.endpointIps: localhost # etcd cluster EndpointIps. It can be a bunch of IPs here.port: 2379 # etcd port.tlsEnable: truecommon:core:console:enableMultiLogin: true # Enable or disable simultaneous logins. It allows different users to log in with the same account at the same time.port: 30880type: NodePort# apiserver: # Enlarge the apiserver and controller manager's resource requests and limits for the large cluster# resources: {}# controllerManager:# resources: {}redis:enabled: falseenableHA: falsevolumeSize: 2Gi # Redis PVC size.openldap:enabled: falsevolumeSize: 2Gi # openldap PVC size.minio:volumeSize: 20Gi # Minio PVC size.monitoring:# type: external # Whether to specify the external prometheus stack, and need to modify the endpoint at the next line.endpoint: http://prometheus-operated.kubesphere-monitoring-system.svc:9090 # Prometheus endpoint to get metrics data.GPUMonitoring: # Enable or disable the GPU-related metrics. If you enable this switch but have no GPU resources, Kubesphere will set it to zero.enabled: falsegpu: # Install GPUKinds. The default GPU kind is nvidia.com/gpu. Other GPU kinds can be added here according to your needs.kinds:- resourceName: "nvidia.com/gpu"resourceType: "GPU"default: truees: # Storage backend for logging, events and auditing.# master:# volumeSize: 4Gi # The volume size of Elasticsearch master nodes.# replicas: 1 # The total number of master nodes. Even numbers are not allowed.# resources: {}# data:# volumeSize: 20Gi # The volume size of Elasticsearch data nodes.# replicas: 1 # The total number of data nodes.# resources: {}logMaxAge: 7 # Log retention time in built-in Elasticsearch. It is 7 days by default.elkPrefix: logstash # The string making up index names. The index name will be formatted as ks-<elk_prefix>-log.basicAuth:enabled: falseusername: ""password: ""externalElasticsearchHost: ""externalElasticsearchPort: ""alerting: # (CPU: 0.1 Core, Memory: 100 MiB) It enables users to customize alerting policies to send messages to receivers in time with different time intervals and alerting levels to choose from.enabled: false # Enable or disable the KubeSphere Alerting System.# thanosruler:# replicas: 1# resources: {}auditing: # Provide a security-relevant chronological set of records,recording the sequence of activities happening on the platform, initiated by different tenants.enabled: false # Enable or disable the KubeSphere Auditing Log System.# operator:# resources: {}# webhook:# resources: {}devops: # (CPU: 0.47 Core, Memory: 8.6 G) Provide an out-of-the-box CI/CD system based on Jenkins, and automated workflow tools including Source-to-Image & Binary-to-Image.enabled: false # Enable or disable the KubeSphere DevOps System.# resources: {}jenkinsMemoryLim: 2Gi # Jenkins memory limit.jenkinsMemoryReq: 1500Mi # Jenkins memory request.jenkinsVolumeSize: 8Gi # Jenkins volume size.jenkinsJavaOpts_Xms: 1200m # The following three fields are JVM parameters.jenkinsJavaOpts_Xmx: 1600mjenkinsJavaOpts_MaxRAM: 2gevents: # Provide a graphical web console for Kubernetes Events exporting, filtering and alerting in multi-tenant Kubernetes clusters.enabled: false # Enable or disable the KubeSphere Events System.# operator:# resources: {}# exporter:# resources: {}# ruler:# enabled: true# replicas: 2# resources: {}logging: # (CPU: 57 m, Memory: 2.76 G) Flexible logging functions are provided for log query, collection and management in a unified console. Additional log collectors can be added, such as Elasticsearch, Kafka and Fluentd.enabled: false # Enable or disable the KubeSphere Logging System.logsidecar:enabled: truereplicas: 2# resources: {}metrics_server: # (CPU: 56 m, Memory: 44.35 MiB) It enables HPA (Horizontal Pod Autoscaler).enabled: false # Enable or disable metrics-server.monitoring:storageClass: "" # If there is an independent StorageClass you need for Prometheus, you can specify it here. The default StorageClass is used by default.node_exporter:port: 9100# resources: {}# kube_rbac_proxy:# resources: {}# kube_state_metrics:# resources: {}# prometheus:# replicas: 1 # Prometheus replicas are responsible for monitoring different segments of data source and providing high availability.# volumeSize: 20Gi # Prometheus PVC size.# resources: {}# operator:# resources: {}# alertmanager:# replicas: 1 # AlertManager Replicas.# resources: {}# notification_manager:# resources: {}# operator:# resources: {}# proxy:# resources: {}gpu: # GPU monitoring-related plug-in installation.nvidia_dcgm_exporter: # Ensure that gpu resources on your hosts can be used normally, otherwise this plug-in will not work properly.enabled: false # Check whether the labels on the GPU hosts contain "nvidia.com/gpu.present=true" to ensure that the DCGM pod is scheduled to these nodes.# resources: {}multicluster:clusterRole: none # host | member | none # You can install a solo cluster, or specify it as the Host or Member Cluster.network:networkpolicy: # Network policies allow network isolation within the same cluster, which means firewalls can be set up between certain instances (Pods).# Make sure that the CNI network plugin used by the cluster supports NetworkPolicy. There are a number of CNI network plugins that support NetworkPolicy, including Calico, Cilium, Kube-router, Romana and Weave Net.enabled: false # Enable or disable network policies.ippool: # Use Pod IP Pools to manage the Pod network address space. Pods to be created can be assigned IP addresses from a Pod IP Pool.type: none # Specify "calico" for this field if Calico is used as your CNI plugin. "none" means that Pod IP Pools are disabled.topology: # Use Service Topology to view Service-to-Service communication based on Weave Scope.type: none # Specify "weave-scope" for this field to enable Service Topology. "none" means that Service Topology is disabled.openpitrix: # An App Store that is accessible to all platform tenants. You can use it to manage apps across their entire lifecycle.store:enabled: false # Enable or disable the KubeSphere App Store.servicemesh: # (0.3 Core, 300 MiB) Provide fine-grained traffic management, observability and tracing, and visualized traffic topology.enabled: false # Base component (pilot). Enable or disable KubeSphere Service Mesh (Istio-based).istio: # Customizing the istio installation configuration, refer to https://istio.io/latest/docs/setup/additional-setup/customize-installation/components:ingressGateways:- name: istio-ingressgatewayenabled: falsecni:enabled: falseedgeruntime: # Add edge nodes to your cluster and deploy workloads on edge nodes.enabled: falsekubeedge: # kubeedge configurationsenabled: falsecloudCore:cloudHub:advertiseAddress: # At least a public IP address or an IP address which can be accessed by edge nodes must be provided.- "" # Note that once KubeEdge is enabled, CloudCore will malfunction if the address is not provided.service:cloudhubNodePort: "30000"cloudhubQuicNodePort: "30001"cloudhubHttpsNodePort: "30002"cloudstreamNodePort: "30003"tunnelNodePort: "30004"# resources: {}# hostNetWork: falseiptables-manager:enabled: true mode: "external"# resources: {}# edgeService:# resources: {}gatekeeper: # Provide admission policy and rule management, A validating (mutating TBA) webhook that enforces CRD-based policies executed by Open Policy Agent.enabled: false # Enable or disable Gatekeeper.# controller_manager:# resources: {}# audit:# resources: {}terminal:# image: 'alpine:3.15' # There must be an nsenter program in the imagetimeout: 600 # Container timeout, if set to 0, no timeout will be used. The unit is seconds
- 设置安装工具配置文件 kubesphere-installer.yaml
- 该文件是kubeSphere安装工具的配置文件,其中包括安装工具的权限设置,运行安装工具的Pod配置。
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:name: clusterconfigurations.installer.kubesphere.io
spec:group: installer.kubesphere.ioversions:- name: v1alpha1served: truestorage: trueschema:openAPIV3Schema:type: objectproperties:spec:type: objectx-kubernetes-preserve-unknown-fields: truestatus:type: objectx-kubernetes-preserve-unknown-fields: truescope: Namespacednames:plural: clusterconfigurationssingular: clusterconfigurationkind: ClusterConfigurationshortNames:- cc---
apiVersion: v1
kind: Namespace
metadata:name: kubesphere-system---
apiVersion: v1
kind: ServiceAccount
metadata:name: ks-installernamespace: kubesphere-system---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: ks-installer
rules:
- apiGroups:- ""resources:- '*'verbs:- '*'
- apiGroups:- appsresources:- '*'verbs:- '*'
- apiGroups:- extensionsresources:- '*'verbs:- '*'
- apiGroups:- batchresources:- '*'verbs:- '*'
- apiGroups:- rbac.authorization.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- apiregistration.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- apiextensions.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- tenant.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- certificates.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- devops.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- monitoring.coreos.comresources:- '*'verbs:- '*'
- apiGroups:- logging.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- jaegertracing.ioresources:- '*'verbs:- '*'
- apiGroups:- storage.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- admissionregistration.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- policyresources:- '*'verbs:- '*'
- apiGroups:- autoscalingresources:- '*'verbs:- '*'
- apiGroups:- networking.istio.ioresources:- '*'verbs:- '*'
- apiGroups:- config.istio.ioresources:- '*'verbs:- '*'
- apiGroups:- iam.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- notification.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- auditing.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- events.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- core.kubefed.ioresources:- '*'verbs:- '*'
- apiGroups:- installer.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- storage.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- security.istio.ioresources:- '*'verbs:- '*'
- apiGroups:- monitoring.kiali.ioresources:- '*'verbs:- '*'
- apiGroups:- kiali.ioresources:- '*'verbs:- '*'
- apiGroups:- networking.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- edgeruntime.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- types.kubefed.ioresources:- '*'verbs:- '*'
- apiGroups:- monitoring.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- application.kubesphere.ioresources:- '*'verbs:- '*'---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: ks-installer
subjects:
- kind: ServiceAccountname: ks-installernamespace: kubesphere-system
roleRef:kind: ClusterRolename: ks-installerapiGroup: rbac.authorization.k8s.io---
apiVersion: apps/v1
kind: Deployment
metadata:name: ks-installernamespace: kubesphere-systemlabels:app: ks-installer
spec:replicas: 1selector:matchLabels:app: ks-installertemplate:metadata:labels:app: ks-installerspec:serviceAccountName: ks-installercontainers:- name: installerimage: xxxximagePullPolicy: "IfNotPresent"resources:limits:cpu: "1"memory: 1Girequests:cpu: 20mmemory: 100MivolumeMounts:- mountPath: /etc/localtimename: host-timereadOnly: truevolumes:- hostPath:path: /etc/localtimetype: ""name: host-time
- 开始安装
- KubeSphere 官方提供了 ks-installer 镜像来执行安装过程,只需要部署前面的配置文件和 ks-installer 镜像即可完成安装。
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
部署成功验证
通过查看ks-installer的日志信息,可以看到安装的过程,最终安装成功后会输出登录提示信息。
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-installer -o jsonpath='{.items[0].metadata.name}') -f
三. 使用步骤
修改用户密码
管理员账户用户名为admin,初始密码为P@88w0rd。修改方法如下:
- 首次登录
- 首次登录时,会自动提示用户修改密码,按照页面提示操作即可。
- 非首次登录
- 点击右上角用户名,在弹出框中选择用户设置
-
在用户设置弹出页面中,选择密码设置,按提示的密码要求修改密码即可。
创建企业空间、项目、用户和平台角色
KubeSphere 的多租户系统分三个层级,即集群、企业空间和项目。KubeSphere 中的项目等同于 Kubernetes 的命名空间。
用户一般需要创建一个新的企业空间进行操作,而不是使用系统企业空间(安装后自动生成的默认企业空间),系统企业空间中运行着系统资源,绝大部分仅供查看。出于安全考虑,强烈建议给不同的租户授予不同的权限在企业空间中进行协作。
可以在一个KubeSphere集群中创建多个企业空间,每个企业空间下可以创建多个项目。KubeSphere为每个级别默认设有多个内置角色。此外,还可以创建拥有自定义权限的角色。KubeSphere多层次结构适用于具有不同团队或组织以及每个团队中需要不同角色的企业用户。
步骤1:创建用户
一开始,系统默认只有一个用户admin,具有platform-admin角色。在本教程中,将创建一个示例用户user-manager,然后使用user-manager创建新用户。
- 以 admin 身份使用默认帐户和密码 (admin/P@88w0rd) 登录Web控制台。
- 点击左上角的平台管理,然后选择访问控制。在左侧导航栏中,选择平台角色。该处可以查看当前平台的内置角色。内置角色由KubeSphere创建,无法编辑或删除。
- 在用户中,点击创建。在弹出的对话框中,提供所有必要信息(带有*标记),然后在平台角色一栏选择 users-manager。完成后,点击确定。新创建的用户将显示在用户页面。
当前除了默认用户admin之外,创建了一个具有user-manager平台角色的用户user-manager-zhangsan,其职责是负责管理用户。
- 切换用户使用 user-manager-zhangsan 重新登录(点击右上角用户名选择登出),创建如下四个新用户。
用户 | 指定的平台角色 | 用户权限 |
ws-manager | workspaces-manager | 创建和管理所有企业空间。 |
ws-admin | platform-regular | 被邀请到企业空间后,管理该企业空间中的所有资源(在此示例中,此用户用于邀请新成员加入该企业空间)。 |
project-admin | platform-regular | 创建和管理项目以及 DevOps 项目,并邀请新成员加入项目。 |
project-regular | platform-regular | project-regular 将由 project-admin 邀请至项目或 DevOps 项目。该用户将用于在指定项目中创建工作负载、流水线和其他资源。 |
步骤2:创建企业空间
在本步骤中,需要使用上一个步骤中创建的用户ws-manager创建一个企业空间。作为管理项目、DevOps项目和组织成员的基本逻辑单元,企业空间是KubeSphere多租户系统的基础。
- 以ws-manager身份登录KubeSphere。点击左上角的平台管理,选择访问控制。在企业空间中,可以看到仅列出了一个默认企业空间 system-workspace,即系统企业空间,其中运行着与系统相关的组件和服务,无法删除该企业空间。
- 点击右侧的创建,将新企业空间命名为 demo-workspace,并将用户 ws-admin 设置为企业空间管理员。完成后,点击创建。
- 登出控制台,然后以 ws-admin 身份重新登录。在企业空间设置中,选择企业空间成员,然后点击邀请。邀请project-admin和project-regular进入企业空间,分别授予 demo-workspace-self-provisioner和demo-workspace-viewer角色,点击确定。
步骤3:创建项目
在此步骤中,需要使用在上一步骤中创建的帐户project-admin来创建项目。KubeSphere中的项目与Kubernetes中的命名空间相同,为资源提供了虚拟隔离。
- 以project-admin用户登录KubeSphere Web控制台,在项目中,点击创建。
- 输入项目名称(例如 demo-project),点击确定。您还可以为项目添加别名和描述。
- 在项目中,点击刚创建的项目查看其详情页面。
- 在项目的概览页面,默认情况下未设置项目配额。您可以点击编辑配额并根据需要指定资源请求和限制(例如:CPU 和内存的限制分别设为 1 Core 和 1000 Gi)。
- 在项目设置 > 项目成员中,邀请 project-regular 至该项目,并授予该用户 operator 角色。
步骤4:创建角色
完成上述步骤后,已实验了解可以为不同级别的用户授予不同角色。先前步骤中使用的角色都是KubeSphere提供的内置角色。在此步骤中,将实验如何创建自定义角色。
- 再次以 admin 身份登录KubeSphere Web控制台,转到访问控制。
- 点击左侧导航栏中的平台角色,再点击右侧的创建。
- 在创建平台角色对话框中,设置角色标识符(例如,clusters-admin)、角色名称和描述信息,然后点击编辑权限。(此处演示如何创建负责集群管理的角色。)
- 在编辑权限对话框中,设置角色权限(例如,选择集群管理)并点击确定。
- 在平台角色页面,可以点击所创建角色的名称查看角色详情,点击三个点以编辑角色、编辑角色权限或删除该角色。
- 在用户页面,可以在创建用户或编辑现有用户时为用户分配该角色。
启用可插拔组件
此处的教程仅介绍在成功部署KubeSphere之后如何启用可插拔组件,如需在部署之前就选择启用组件,操作过程与部署后类似,只需修改cluster-configuration.yaml中对应的参数后再执行安装部署过程即可。
编辑ks-installer的配置文件
- 使用admin用户登录控制台,点击左上角的平台管理,选择集群管理。
- 点击定制资源定义,在搜索栏中输入clusterconfiguration,点击结果查看其详细页面。
- 在自定义资源中,点击ks-installer右侧的三个点,选择编辑YAML。
具体每个组件的编辑内容,请参考后面每个组件的启用介绍。
- 编辑保存后,在kubectl中执行以下命令检查安装过程:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsnotallow='{.items[0].metadata.name}') -f
可以在控制台右下角的锤子按钮中找到 kubectl 工具
启用KubeSphere应用商店
- 在YAML文件中,搜索openpitrix,将enabled的false改为true。完成后,点击右下角的确定,保存配置。
- 验证组件的安装
在登录控制台后,如果能看到页面左上角的应用商店以及其中的应用,则说明安装成功。可以在不登录控制台的情况下直接访问<节点 IP 地址>:30880/apps 进入应用商店。
启用KubeSphere DevOps系统
- 在YAML文件中,搜索devops,将enabled的false改为true。完成后,点击右下角的确定,保存配置。
- 验证组件的安装
执行以下命令来检测容器组的状态:
如果组件运行成功,输出结果如下:
启用KubeSphere 日志系统
- 在YAML文件中,搜索 logging,将enabled的false改为true。完成后,点击右下角的确定,保存配置。
-
- 备注:默认情况下,如果启用了日志系统,将以容器方式安装内置Elasticsearch。对于生产环境,如果现有环境中已有Elasticsearch等组件的情况下想启用日志系统,强烈建议在config-sample.yaml中设置以下值,尤其是externalElasticsearchHost和externalElasticsearchPort。在安装前提供以下信息后,将直接对接已有的外部Elasticsearch,不再安装内置Elasticsearch。
-
- 验证组件的安装
执行以下命令来检测容器组的状态:
如果组件运行成功,输出结果如下:
启用KubeSphere 事件系统
- 在YAML文件中,搜索events,将enabled的false改为true。完成后,点击右下角的确定,保存配置。
备注:默认情况下,如果启用了事件系统,将以容器方式安装内置Elasticsearch。对于生产环境,如果现有环境中已有Elasticsearch等组件的情况下想启用日志系统,强烈建议在config-sample.yaml中设置以下值,尤其是externalElasticsearchHost和externalElasticsearchPort。在安装前提供以下信息后,将直接对接已有的外部Elasticsearch,不再安装内置Elasticsearch。
- 验证组件的安装
执行以下命令来检测容器组的状态:
如果组件运行成功,输出结果如下:
启用KubeSphere 告警系统
- 在YAML文件中,搜索alerting,将enabled的false改为true。完成后,点击右下角的确定,保存配置。
- 验证组件的安装
如果可以在集群管理页面看到告警消息和告警策略,则说明安装成功。
启用KubeSphere 审计日志
- 在YAML文件中,搜索auditing,将enabled的false改为true。完成后,点击右下角的确定,保存配置。
备注:默认情况下,如果启用了事件系统,将以容器方式安装内置Elasticsearch。对于生产环境,如果现有环境中已有Elasticsearch等组件的情况下想启用日志系统,强烈建议在config-sample.yaml中设置以下值,尤其是externalElasticsearchHost和externalElasticsearchPort。在安装前提供以下信息后,将直接对接已有的外部Elasticsearch,不再安装内置Elasticsearch。
- 验证组件的安装
验证可以使用右下角工具箱中的审计日志查询功能。
启用KubeSphere 服务网格
- 在YAML文件中,搜索servicemesh,将enabled的false改为true。完成后,点击右下角的确定,保存配置。
- 验证组件的安装
执行以下命令来检测容器组的状态:
如果组件运行成功,输出结果如下:
启用服务拓补图
- 在YAML文件中,搜索network,将network.topology.type的值改为weave-scope。完成后,点击右下角的确定,保存配置。
- 验证组件的安装
执行以下命令来检测容器组的状态:
如果组件运行成功,输出结果如下:
启用容器组IP池
- 在YAML文件中,搜索network,将network.ippool.type的值改为calico。完成后,点击右下角的确定,保存配置。
- 验证组件的安装
在集群管理页面,可以在网络下看到容器组 IP 池。
启用KubeEdge
- 在YAML文件中,搜索edgeruntime和kubeedge,然后将它们enabled值从false更改为true以便开启所有KubeEdge组件。完成后保存文件。
- 验证组件的安装
在集群管理页面,您可以看到节点下出现边缘节点板块。
或者执行以下命令来检测容器组的状态:
如果组件运行成功,输出结果如下:
卸载可插拔组件
在卸载除服务拓扑图和容器组 IP 池之外的可插拔组件之前,必须将 CRD 配置文件 ClusterConfiguration 中的 ks-installer 中的 enabled 字段的值从 true 改为 false。
使用下列任一方法更改 enabled 字段的值:
- 运行以下命令编辑 ks-installer:
- 使用 admin 身份登录KubeSphere Web控制台,左上角点击平台管理,选择集群管理,在定制资源定义中搜索 ClusterConfiguration。
卸载KubeSphere应用商店
将 CRD ClusterConfiguration 配置文件中 ks-installer 参数的 openpitrix.store.enabled 字段的值从 true 改为 false。
卸载KubeSphere DevOps系统
将 CRD ClusterConfiguration 配置文件中 ks-installer 参数的 openpitrix.store.enabled 字段的值从 true 改为 false。
卸载 DevOps:
1.helm uninstall -n kubesphere-devops-system devops
2.kubectl patch -n kubesphere-system cc ks-installer --type=json -p='[{"op": "remove", "path": "/status/devops"}]'
3.kubectl patch -n kubesphere-system cc ks-installer --type=json -p='[{"op": "replace", "path": "/spec/devops/enabled", "value": false}]'
删除 DevOps 资源:
# 删除所有 DevOps 相关资源
for devops_crd in $(kubectl get crd -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | grep "devops.kubesphere.io"); dofor ns in $(kubectl get ns -ojsonpath='{.items..metadata.name}'); dofor devops_res in $(kubectl get $devops_crd -n $ns -oname); dokubectl patch $devops_res -n $ns -p '{"metadata":{"finalizers":[]}}' --type=mergedone
done
done
# 删除所有 DevOps CRD
kubectl get crd -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | grep "devops.kubesphere.io" | xargs -I crd_name kubectl delete crd crd_name
# 删除 DevOps 命名空间
kubectl delete namespace kubesphere-devops-system
卸载KubeSphere日志系统
- 将CRD ClusterConfiguration配置文件中ks-installer参数的logging.enabled字段的值从 true改为false。
- 仅禁用日志收集:
kubectl delete inputs.logging.kubesphere.io -n kubesphere-logging-system tail
kubectl delete crd fluentbitconfigs.logging.kubesphere.io
kubectl delete crd fluentbits.logging.kubesphere.io
kubectl delete crd inputs.logging.kubesphere.io
kubectl delete crd outputs.logging.kubesphere.io
kubectl delete crd parsers.logging.kubesphere.io
kubectl delete deployments.apps -n kubesphere-logging-system fluentbit-operator
helm uninstall elasticsearch-logging --namespace kubesphere-logging-system
警告:此操作可能导致审计、事件和服务网格的异常。
- 运行以下命令:
kubectl delete deployment logsidecar-injector-deploy -n kubesphere-logging-system
kubectl delete ns kubesphere-logging-system
卸载KubeSphere事件系统
- 将将 CRD ClusterConfiguration 配置文件中 ks-installer 参数的 events.enabled 字段的值从 true 改为 false。
- 运行以下命令:
helm delete ks-events -n kubesphere-logging-system
卸载KubeSphere告警系统
- 将 CRD ClusterConfiguration 配置文件中 ks-installer 参数的 alerting.enabled 字段的值从 true 改为 false。
- 运行以下命令:
kubectl -n kubesphere-monitoring-system delete thanosruler kubesphere
卸载KubeSphere审计日志
- 将 CRD ClusterConfiguration 配置文件中 ks-installer 参数的 auditing.enabled 字段的值从 true 改为 false。
- 运行以下命令:
helm uninstall kube-auditing -n kubesphere-logging-system
kubectl delete crd rules.auditing.kubesphere.io
kubectl delete crd webhooks.auditing.kubesphere.io
卸载KubeSphere服务网格
- 将 CRD ClusterConfiguration 配置文件中 ks-installer 参数的 servicemesh.enabled 字段的值从 true 改为 false。
- 运行以下命令:
curl -L https://istio.io/downloadIstio | sh -
istioctl x uninstall --purgekubectl -n istio-system delete kiali kiali
helm -n istio-system delete kiali-operatorkubectl -n istio-system delete jaeger jaeger
helm -n istio-system delete jaeger-operator
卸载服务拓补图
- 将 CRD ClusterConfiguration 配置文件中参数 ks-installer 中 network.topology.type 的值从 weave-scope 改为 none。
- 运行以下命令:
kubectl delete ns weave
卸载容器组IP池
将 CRD ClusterConfiguration 配置文件中参数 ks-installer 中 network.ippool.type 的值从 calico 改为 none。
卸载KubeEdge
- 将CRD ClusterConfiguration 配置文件中参数 ks-installer 中 kubeedege.enabled 和 edgeruntime.enabled 的值从 true 改为 false。
- 运行以下命令:
helm uninstall kubeedge -n kubeedge
kubectl delete ns kubeedge
集群管理
节点管理
Kubernetes将容器放入容器组(Pod)中并在节点上运行,从而运行工作负载。取决于具体的集群环境,节点可以是虚拟机,也可以是物理机。
准备工作
需要一个被授予集群管理权限的用户。例如,可以直接用 admin 用户登录控制台,或创建一个具有集群管理权限的角色然后将此角色授予一个用户。
节点状态
只有集群管理员可以访问集群节点。由于一些节点指标对集群非常重要,集群管理员应监控这些指标并确保节点可用。请按照以下步骤查看节点状态。
- 点击左上角的平台管理,然后选择集群管理。
- 如果您已启用了多集群功能并已导入了成员集群,您可以选择一个特定集群以查看其节点信息。如果尚未启用该功能,请直接进行下一步。
- 在左侧导航栏中选择节点下的集群节点,查看节点的状态详情。
- 名称:节点的名称和子网 IP 地址。
- 状态:节点的当前状态,标识节点是否可用。
- 角色:节点的角色,标识节点是工作节点还是主节点。
- CPU 用量:节点的实时 CPU 用量。
- 内存用量:节点的实时内存用量。
- 容器组:节点的实时容器组用量。
- 已分配 CPU:该指标根据节点上容器组的总 CPU 请求数(Request)计算得出。它表示节点上为工作负载预留的 CPU 资源。工作负载实际正在使用 CPU 资源可能低于该数值。该指标对于 Kubernetes 调度器 (kube-scheduler) 非常重要。在大多数情况下,调度器在调度容器组时会偏向配得 CPU 资源较少的节点。有关更多信息,请参阅为容器管理资源。
- 已分配内存:该指标根据节点上容器组的总内存请求计算得出。它表示节点上为工作负载预留的内存资源。工作负载实际正在使用内存资源可能低于该数值。
节点管理
在集群节点页面,您可以执行以下操作:
- 停止调度/启用调度:点击集群节点右侧的三个点,然后点击停止调度或启用调度停止或启用调度节点。您可以在节点重启或维护期间将节点标记为不可调度。Kubernetes 调度器不会将新容器组调度到标记为不可调度的节点。但这不会影响节点上现有工作负载。
- 打开终端:点击集群节点右侧的三个点,然后点击打开终端。该功能让您更加便捷地管理节点,如修改节点配置、下载镜像等。
跟ssh到物理机的内容是一样的。
- 编辑污点:污点允许节点排斥一些容器组。勾选目标节点前的复选框,在上方弹出的按钮中点击编辑污点。在弹出的编辑污点对话框,您可以添加或删除污点。
同时,您也可以点击列表中的某个节点打开节点详情页面。除了停止调度/启用调度和编辑污点外,您还可以执行以下操作:
- 编辑标签:您可以利用节点标签将容器组分配给特定节点。首先标记节点(例如,用 node-role.kubernetes.io/gpu-node 标记 GPU 节点),然后在创建工作负载时在高级设置中添加此标签,从而使容器组在 GPU 节点上运行。要添加节点标签,请点击更多操作 > 编辑标签。
- 查看节点运行状态、容器组、元数据、监控和事件。
备注:请谨慎添加污点,因为它们可能会导致意外行为从而导致服务不可用。
当前版本不支持通过KubeSphere控制台添加或删除节点。
集群状态监控
Kubernetes将容器放入容器组(Pod)中并在节点上运行,从而运行工作负载。取决于具体的集群环境,节点可以是虚拟机,也可以是物理机。
准备工作
需要一个被授予集群管理权限的用户。例如,可以直接用admin用户登录控制台,或创建一个具有集群管理权限的角色然后将此角色授予一个用户。
集群状态监控
- 点击左上角的平台管理,然后选择集群管理。
- 如果您已启用了多集群功能并已导入了成员集群,您可以选择一个特定集群以查看其应用程序资源。如果尚未启用该功能,请直接进行下一步。
- 在左侧导航栏选择监控告警下的集群状态以查看集群状态概览,包括集群节点状态、组件状态、集群资源用量、etcd 监控和服务组件监控。
物理资源监控
可以利用物理资源监控页面提供的数据更好地掌控物理资源状态,并建立正常资源和集群性能的标准。KubeSphere允许用户查看最近7天的集群监控数据,包括CPU用量、内存用量、CPU平均负载(1分钟/5分钟/15分钟)、磁盘用量、Inode 用量、磁盘吞吐(读写)、IOPS(读写)、网络带宽和容器组状态。您可以在KubeSphere中自定义时间范围和时间间隔以查看物理资源的历史监控数据。
API Server监控
API Server是Kubernetes集群中所有组件交互的中枢。下表列出了API Server的主要监控指标。
指标 | 描述 |
请求延迟 | 资源请求响应延迟,单位为毫秒。该指标按照 HTTP 请求方法进行分类。 |
每秒请求次数 | kube-apiserver 每秒接受的请求数。 |
调度器监控
调度器决定新容器组运行在哪些节点上。根据收集资源的可用性和容器组的资源需求等数据进行决策。监控调度延迟的数据可确保及时了解调度器的任何延迟。
指标 | 描述 |
调度次数 | 包括调度成功、错误和失败的次数。 |
调度频率 | 包括调度成功、错误和失败的频率。 |
调度延迟 | 端到端调度延迟,即调度算法延迟和绑定延迟之和。 |
资源用量排行
可以按CPU用量、CPU平均负载、内存用量、本地存储用量、Inode用量和容器组用量等指标对节点进行升序和降序排序。利用这一功能可以快速发现潜在问题和节点资源不足的情况。
应用资源监控
准备工作
需要一个被授予集群管理权限的用户。例如,您可以直接用 admin 用户登录控制台,或创建一个具有集群管理权限的角色然后将此角色授予一个用户。
资源用量
- 点击左上角的平台管理,然后选择集群管理。
- 在左侧导航栏选择监控告警下的应用资源以查看应用资源概览,包括集群中所有资源使用情况的汇总信息。
- 集群资源用量和应用资源用量提供最近7天的监控数据,并支持自定义时间范围查询。
- 点击特定资源以查看特定时间段内的使用详情和趋势,例如集群资源用量下的CPU。在详情页面,可以按项目查看特定的监控数据,以及自定义时间范围查看资源的确切使用情况。
用量排行
用量排行支持按照资源使用情况对项目进行排序,帮助平台管理员了解当前集群中每个项目的资源使用情况,包括CPU用量、内存用量、容器组数量、网络流出速率和网络流入速率。可以选择下拉列表中的任一指标对项目按升序或降序进行排序。此功能可以帮助用户快速定位大量消耗 CPU 或内存资源的应用程序(容器组)。
存储类
PV是集群中的一块存储,可以由管理员事先供应,或者使用存储类来动态供应。和卷 (Volume) 一样,PV通过卷插件实现,但是它的生命周期独立于任何使用该PV的容器组。PV可以静态供应或动态供应。
PVC是用户对存储的请求。它与容器组类似,容器组会消耗节点资源,而PVC消耗PV 资源。KubeSphere支持基于存储类的动态卷供应,以创建PV。
存储类StorageClass是管理员描述其提供的存储类型的一种方式。不同的类型可能会映射到不同的服务质量等级或备份策略,或由集群管理员制定的任意策略。每个存储类都有一个Provisioner,用于决定使用哪个卷插件来供应PV。该字段必须指定。
准备工作
需要一个被授予集群管理权限的用户。例如,您可以直接用 admin 用户登录控制台,或创建一个具有集群管理权限的角色然后将此角色授予一个用户。
创建存储类
- 点击左上角的平台管理,然后选择集群管理。
- 在集群管理页面,点击存储 > 存储类。
- 在右侧的存储类页面,点击创建。
- 在弹出的对话框中,输入存储类名称,点击下一步。按需填写别名添和描述信息。
- 在存储系统页签,选择一个存储系统,点击下一步。在KubeSphere中,可以直接为QingCloud-CSI、GlusterFS和Ceph RBD创建存储类。也可以为其他存储系统创建自定义存储类。
- 在存储类设置页签,设置相关参数,点击创建以创建存储类。参数设置项随选择的存储系统而异。
管理存储类
创建存储类型后,点击此存储类型的名称前往其详情页。在详情页点击编辑YAML来编辑此存储类型的清单文件。也可以点击更多操作并在下拉菜单中选择一项操作:
- 设为默认存储类:将此存储类设为集群的默认存储类。一个KubeSphere集群中仅允许设置一个默认存储类。
- 设置授权规则:只允许特定项目和企业空间使用该存储类。
- 设置卷操作:管理持久卷声明,包括卷克隆、卷快照创建、卷扩容。开启任意功能前,请联系系统管理员确认存储系统是否支持这些功能。
- 设置自动扩展:设置系统在卷剩余空间低于阈值时自动扩容卷。也可以开启是否自动重启工作负载。
- 删除:删除此存储类。
在持久卷声明页签上,查看与此存储类相关联的持久卷声明PVC。
卷快照类
卷快照类(Volume Snapshot Class)用于定义卷快照的存储种类。本教程演示如何创建和使用卷快照类。
准备工作
需要创建一个企业空间、一个项目和一个用户(例如 project-regular)。该用户必须已邀请至该项目,并具有operator角色。有关更多信息,请参阅创建企业空间、项目、用户和角色。需要确保Kubernetes 版本为1.17或更新版本。需要确保底层存储插件支持快照。
创建卷快照类
- 以project-regular用户登录KubeSphere Web控制台并进入项目。在左侧导航栏选择存储下的卷快照类。
- 在右侧的卷快照类页面,点击创建。
- 在弹出的对话框中,设置卷快照类的名称,点击下一步。也可以设置别名和添加描述信息。
- 在卷快照类设置页签,选择供应者和删除策略。
删除策略目前支持以下两种:
- Delete:底层的存储快照会和 VolumeSnapshotContent 对象一起删除。
- Retain:底层快照和 VolumeSnapshotContent 对象都会被保留。
企业空间用户指南
企业空间角色和成员管理
准备工作
至少已创建一个企业空间,例如demo-workspace。还需要准备一个用户(如ws-admin),该用户在企业空间级别具有workspace-admin角色。有关更多信息,请参见创建企业空间、项目、用户和角色。
查看内置企业空间角色
企业空间角色页面列出了以下四个可用的内置角色。创建企业空间时,KubeSphere会自动创建内置角色,并且内置角色无法进行编辑或删除。只能查看内置角色的权限或将其分配给用户。(注:内置角色的实际名字应该看起来是【企业空间名称-权限名】,例如demo-workspace空间下的admin权限角色,名字即demo-workspace-admin)
名称 | 描述 |
workspace-viewer | 企业空间观察员,可以查看企业空间中所有资源。 |
workspace-self-provisioner | 企业空间普通成员,可以查看企业设置、管理应用模板、创建项目和 DevOps 项目。 |
workspace-regular | 企业空间普通成员,可以查看企业空间设置。 |
workspace-admin | 企业空间管理员,可以管理企业空间中的所有资源。 |
若要查看角色所含权限,点击其中一个角色名(例如,demo-workspace-admin),可以查看相关权限,点击授权用户选项卡,查看所有被授予该角色的用户。
创建自定义企业空间角色
- 以ws-admin身份登录控制台。
- 转到企业空间设置下的企业空间角色。
- 在企业空间角色中,点击创建并设置名称(例如,demo-project-admin)。点击编辑权限继续。
- 在弹出的窗口中,权限归类在不同的功能模块下。在本示例中,点击项目管理,并为该角色选择项目创建、项目管理和项目查看。点击确定完成操作。
- 新创建的角色将在企业空间角色中列出,点击右侧的三个点以编辑该角色的信息、权限,或删除该角色。
邀请新企业空间成员
- 转到企业空间设置下企业空间成员,点击邀请。
- 点击右侧的加号以邀请一名成员加入企业空间,并为其分配一个角色。
- 将成员加入企业空间后,点击确定。可以在企业空间成员列表中查看新邀请的成员。
- 若要编辑现有成员的角色或将其从企业空间中移除,点击右侧的三个点并选择对应的操作。
项目配额
KubeSphere使用预留(Request)和限制(Limit)来控制项目中的资源(例如CPU和内存)使用情况,在Kubernetes中也称为资源配额。请求确保项目能够获得其所需的资源,因为这些资源已经得到明确保障和预留。相反地,限制确保项目不能使用超过特定值的资源。
除了CPU和内存,还可以单独为其他对象设置资源配额,例如项目中的容器组、部署、任务、服务和配置字典。
准备工作
需要有一个可用的企业空间、一个项目和一个用户 (ws-admin)。该用户必须在企业空间层级拥有admin角色。有关更多信息,请参见创建企业空间、项目、用户和角色。
设置项目配额
- 以ws-admin身份登录控制台,进入一个项目。如果该项目是新创建的项目,您可以在概览页面看到项目配额尚未设置。点击编辑配额来配置配额。
- 在弹出对话框中,可以看到KubeSphere默认不为项目设置任何请求或限制。要设置请求和限制来控制CPU和内存资源,请将滑块移动到期望的值或者直接输入数字。字段留空意味着不设置任何请求或限制。
- 要为其他资源设置配额,在项目资源配额下点击添加,选择一个资源或输入资源名称并设置配额。
- 点击确定完成配额设置。
- 在项目设置下的基本信息页面,您可以查看该项目的所有资源配额。
- 要更改项目配额,请在基本信息页面点击编辑项目,然后选择编辑项目配额。
- 在项目配额页面更改项目配额,然后点击确定。只能
企业空间配额
企业空间配额用于管理企业空间中所有项目的总资源用量。企业空间配额与项目配额相似,也包含CPU和内存的预留(Request)和限制(Limit)。预留确保企业空间中的项目能够获得其所需的资源,因为这些资源已经得到明确保障和预留。相反,限制则确保企业空间中的所有项目的资源用量不能超过特定数值。
准备工作
需要准备一个可用的企业空间和一个用户 (ws-manager)。该用户必须在平台层级具有 workspaces-manager 角色。有关更多信息,请参阅创建企业空间、项目、用户和角色。
设置企业空间配额
- 以ws-manager身份登录控制台,进入企业空间。
- 在企业空间设置下,选择企业空间配额。
- 企业空间配额页面列有分配到该企业空间的全部可用集群,以及各集群的 CPU 限额、CPU 需求、内存限额和内存需求。
- 在列表右侧点击编辑配额即可查看企业空间配额信息。默认情况下,KubeSphere 不为企业空间设置任何资源预留或资源限制。如需设置资源预留或资源限制来管理 CPU 和内存资源,可以移动进度条至期望数值或直接输入期望数值。将字段设为空值表示不对资源进行预留或限制。
- 配额设置完成后,点击确定。
项目用户指南
项目管理
需要有一个可用的企业空间和一个用户 (project-admin)。该用户必须在该企业空间拥有workspace-self-provisioner角色。有关更多信息,请参见创建企业空间、项目、用户和角色。
创建项目
- 以project-admin用户登陆,前往企业空间的项目页面,点击项目选项卡下的创建。
- 在弹出的创建项目窗口中输入项目名称,根据需要添加别名或说明。
- 创建的项目会显示在下图所示的列表中。可以点击项目名称打开概览页面。
编辑项目
- 前往需要修改的项目,选择项目设置下的基本信息,在页面右侧点击管理。
- 从下拉菜单中选择编辑信息。
- 若要删除项目,选择该下拉菜单中的删除,在对话框中输入项目名称,点击确定。
项目角色和成员管理
准备工作
需要至少创建一个项目(例如demo-project)。此外,您还需要准备一个在项目级别具有admin角色的用户(例如project-admin)。有关更多信息,请参见创建企业空间、项目、用户和角色。
查看内置项目角色
企业空间角色页面列出了以下三个可用的内置角色。创建企业空间时,KubeSphere会自动创建内置角色,并且内置角色无法进行编辑或删除。只能查看内置角色的权限或将其分配给用户。
内置角色 | 描述 |
viewer | 项目观察者,可以查看项目下所有的资源。 |
operator | 项目维护者,可以管理项目下除用户和角色之外的资源。 |
admin | 项目管理员,可以对项目下的所有资源执行所有操作。此角色可以完全控制项目下的所有资源。 |
若要查看角色所含权限,点击其中一个角色名(例如,admin),可以查看相关权限,点击授权用户选项卡,查看所有被授予该角色的用户。
创建自定义项目角色
- 转到项目设置下的项目角色。
- 在项目角色中,点击创建并设置角色标识符(例如,project-monitor)。点击编辑权限继续。
- 在弹出的窗口中,权限归类在不同的功能模块下。点击确定完成操作。
- 新创建的角色将在项目角色中列出,点击右侧的三个点以编辑该角色。
邀请新项目成员
- 转到项目设置下项目成员,点击邀请。
- 点击右侧的加号以邀请一名成员加入项目,并为其分配一个角色。
- 将成员加入项目后,点击确定。可以在项目成员列表中查看新邀请的成员。
- 若要编辑现有成员的角色或将其从项目中移除,点击右侧的三个点并选择对应的操作。
项目容器限制范围
容器所使用的 CPU 和内存资源上限由项目资源配额指定。同时,KubeSphere使用请求 (Request) 和限制 (Limit) 来控制单个容器的资源(例如 CPU 和内存)使用情况,在Kubernetes中也称为LimitRange。请求确保容器能够获得其所需要的资源,因为这些资源已经得到明确保障和预留。相反地,限制确保容器不能使用超过特定值的资源。
当创建工作负载(例如部署)时,可以为容器配置资源请求和资源限制。要预先填充这些请求字段和限制字段的值,可以设置默认限制范围。
准备工作
需要有一个可用的企业空间、一个项目和一个用户 (project-admin)。该用户必须在项目层级拥有admin角色。有关更多信息,请参见创建企业空间、项目、用户和角色。
设置默认限制范围
- 以project-admin身份登录控制台,进入一个项目。如果该项目是新创建的项目,在概览页面上会看到默认配额尚未设置。点击默认容器配额未设置旁的编辑配额来配置限制范围。
- 在弹出的对话框中,可以看到KubeSphere默认不设置任何请求或限制。要设置请求和限制来控制CPU和内存资源,移动滑块至期望的值或者直接输入数值。字段留空意味着不设置任何请求或限制。点击确定完成限制范围设置。
- 在项目设置下的基本信息页面,可以查看项目中容器的默认容器配额。
- 要更改默认容器配额,请在基本信息页面点击管理,然后选择编辑默认容器配额。
- 在弹出的对话框中直接更改容器配额,然后点击确定。
- 当创建工作负载时,容器的请求和限制将预先填充对应的值。
创建应用负载
Kubernetes中的应用负载包括部署(deployment)、有状态副本集(StatefulSet)、守护进程集(DaemonSet)、任务(Job)和定时任务(CronJob),其配置方法大致相同,下面以部署(deployment)为例子,介绍如何在KubeSphere的web控制台上通过可视化操作来创建应用负载。
- 以project-regular身份登录控制台。转到项目的应用负载,选择工作负载,点击部署选项卡下面的创建。
- 为该部署指定一个名称(例如 demo-deployment),选择一个项目,点击下一步继续。
- 设置容器组
在设置镜像前,请点击容器组副本数量中 + 号或 - 号来定义容器组的副本数量,该参数显示在清单文件中的.spec.replicas字段。
点击添加容器,输入镜像名称,该镜像可以来自公共 Docker Hub,也可以来自指定的私有仓库。
其他更多设置可以在页面上自行查看。
- 挂载持久卷
可以直接添加持久卷或者挂载配置字典或保密字典,或者直接点击下一步跳过该步骤。
- 配置高级设置
可以在该部分设置节点调度策略并添加元数据。完成操作后,点击创建完成创建部署的整个流程。
- 选择节点:分配容器组副本在指定节点上运行。该参数在 nodeSelector 字段中指定。
- 添加元数据:为资源进行额外的元数据设置,例如标签和注解。
除了使用可视化界面创建之外,还可以点击右上角的编辑YAML按钮,直接编辑YAML文件。
创建服务
服务(Service)是一种抽象方法,它将运行在一组容器组上的应用程序暴露为网络服务。也就是说,服务将这些容器组的Endpoint组成一个单一资源,可以通过不同的方式访问该资源。
有了Kubernetes,无需修改应用程序来使用不熟悉的服务发现机制。Kubernetes为容器组提供IP地址,为一组容器组提供一个单一DNS名称,并且可以在容器组之间进行负载均衡。
准备工作
需要创建一个企业空间、一个项目和一个用户 (project-regular),务必邀请该用户到项目中并赋予operator角色。有关更多信息,请参见创建企业空间、项目、用户和角色。
服务的类型
KubeSphere提供三种创建服务的基本方法:无状态服务、有状态服务和外部服务。另外,还可以通过自定义服务下面的指定工作负载和编辑YAML来自定义服务。
- 无状态服务
- 无状态服务是容器服务中最常用的服务类型。无状态服务定义容器组模板来控制容器组状态,包括滚动更新和回滚。您创建无状态服务时会同时创建部署工作负载。
- 有状态服务
- 有状态服务用于管理有状态应用程序,确保有序且优雅的部署和扩缩,还提供稳定的持久化存储以及网络标识符。您创建有状态服务时会同时创建有状态副本集工作负载。
- 外部服务
- 与无状态服务和有状态服务不同,外部服务将一个服务映射到一个 DNS 名称,而不是映射到选择器。您需要在外部服务地址字段中指定这些服务,该字段显示在YAML文件中的 externalName。
- 指定工作负载
- 使用现有容器组创建服务。
- 编辑 YAML
- 使用 YAML 直接创建服务。您可以将 YAML 配置文件上传至控制台,也可以从控制台下载 YAML 配置文件。
创建指定工作负载的服务
- 在项目页面转到应用负载下的服务,点击创建。
- 点击指定工作负载,填写名称后点击下一步。
- 服务设置,填充服务设置信息,通过负载的标签来选择指定的负载,填写暴露的端口信息
- 高级设置中可以设置外部访问方式、是否开启会话保持以及其他元数据。
持久卷声明管理
在项目中创建应用负载时,可以为应用负载创建持久卷声明(PVC)。PVC可用于创建存储请求,从而进一步为应用提供持久化存储。更具体地说,持久卷(PV)资源可用于管理持久化存储。
集群管理员需要用存储类型 (Storage Class) 配置持久卷。也就是说,要在项目中创建 PVC,集群中必须要有可用的存储类型。
准备工作
- 需要创建一个企业空间、一个项目和一个用户(例如 project-regular)。该用户必须已邀请至该项目,并具有operator角色。有关更多信息,请参阅创建企业空间、项目、用户和角色。
- 如需使用动态卷供应,需要配置一个支持动态供应的存储类。
创建持久卷声明
- 以project-regular身份登录KubeSphere Web控制台并进入项目,在左侧导航栏中点击存储下的持久卷声明。页面上显示所有已挂载至项目工作负载的持久卷声明。
- 在持久卷声明页面,点击创建以创建持久卷声明。
- 在弹出的对话框设置持久卷声明的名称(例如demo-volume),选择项目,然后点击下一步。
查看持久卷声明列表并管理
在持久卷声明页面,点击持久卷页签,可以查看到如下图所示内容,点击右侧的三个点,可以进行编辑和删除操作。
配置管理
保密字典
Kubernetes保密字典 (Secret) 可用于存储和管理密码、OAuth令牌 SSH保密字典等敏感信息。容器组可以通过三种方式使用保密字典:
- 作为挂载到容器组中容器化应用上的卷中的文件。
- 作为容器组中容器使用的环境变量。
- 作为kubelet为容器组拉取镜像时的镜像仓库凭证。
创建保密字典
- 以 project-regular 用户登录控制台并进入项目,在左侧导航栏中选择配置下的保密字典,然后点击创建。
- 设置保密字典的名称(例如 demo-secret),然后点击下一步。
- 在数据设置选项卡,从类型下拉列表中选择保密字典类型。可以在 KubeSphere 中创建以下保密字典,类型对应YAML文件中的type字段。
- 默认:对应 Kubernetes 的 Opaque 保密字典类型,同时也是 Kubernetes 的默认保密字典类型。您可以用此类型保密字典创建任意自定义数据。点击添加数据为其添加键值对。
- TLS信息:对应 Kubernetes 的 kubernetes.io/tls 保密字典类型,用于存储证书及其相关保密字典。这类数据通常用于 TLS 场景,例如提供给应用路由 (Ingress) 资源用于终结 TLS 链接。使用此类型的保密字典时,您必须为其指定凭证和私钥,分别对应 YAML 文件中的 tls.crt 和 tls.key 字段。
- 镜像服务信息:对应 Kubernetes 的 kubernetes.io/dockerconfigjson 保密字典类型,用于存储访问 Docker 镜像仓库所需的凭证。有关更多信息,请参阅镜像仓库。
- 用户名和密码:对应 Kubernetes 的 kubernetes.io/basic-auth 保密字典类型,用于存储基本身份认证所需的凭证。使用此类型的保密字典时,您必须为其指定用户名和密码,分别对应 YAML 文件中的 username 和 password 字段。
-
配置字典
Kubernetes 配置字典(ConfigMap)以键值对的形式存储配置数据。配置字典资源可用于向容器组中注入配置数据。配置字典对象中存储的数据可以被ConfigMap类型的卷引用,并由容器组中运行的容器化应用使用。配置字典通常用于以下场景:
- 设置环境变量的值。
- 设置容器中的命令参数。
- 在卷中创建配置文件。
创建保密字典
- 以project-regular用户登录控制台并进入项目,在左侧导航栏中选择配置下的配置字典,然后点击创建。
- 在弹出的对话框中,设置配置字典的名称(例如demo-configmap),然后点击下一步。
- 在数据设置选项卡,点击添加数据以配置键值对。
服务账户
服务帐户(Service Account)为Pod中运行的进程提供了标识。当这些进程与API服务器联系时,Pod里容器的进程将被验证为特定的服务帐户。
创建服务账户
- 以project-regular用户登录到KubeSphere控制台,点击项目。
- 选择您想要创建服务账户的项目。
- 在左侧导航栏,单击配置 > 服务账户。会在服务账户页面看到一个名为default的服务帐户。该账户是在创建项目时自动创建的。
- 单击创建。在显示的创建服务账户对话框中,可以设置以下参数:
- 名称(必填项):服务帐户的唯一标识符。
- 别名:服务帐户的别名,以帮助你更好地识别服务帐户。
- 简介:服务帐户简介。
- 项目角色:从服务帐户的下拉列表中选择一个项目角色。在一个项目中,不同的项目角色有不同的权限。
- 完成参数设置后,单击创建。
工具箱
Web Kubectl
Kubectl是Kubernetes命令行工具,可以用它在Kubernetes集群上运行命令。Kubectl 可用于部署应用、查看和管理集群资源、查看日志等。
KubeSphere控制台提供Web Kubectl,方便用户使用。在默认情况下,当前版本中只有被授予platform-admin角色的用户(例如默认帐户 admin)才有权限使用Web Kubectl进行集群资源操作和管理。
使用Web Kubectl
- 使用被授予platform-admin角色的用户登录KubeSphere,在右下角的工具箱图标上悬停,然后在弹出菜单中选择kubectl。
- 可以在弹出窗口中看到Kubectl界面,如下图所示。
- 在命令行工具中输入Kubectl命令,查询并管理Kubernetes集群资源。
集成私有harbor仓库
获取harbor证书ca.crt文件内容
查看crt的内容:
cat /var/lib/harbor/cert/ca.crt
容创建配置字典
按图所示创建配置字典
添加数据中,以ca.crt为键,crt内容为值填写:
将创建配置字典中的ca证书挂载到ks-apiserver
在应用负载-工作负载下找到ks-apiserver
进入详情中,选择左上角更多操作--编辑设置--存储--挂载配置字典
按下图所示填写参数:
点击确定保存后,等待ks-apiserver重启,重启完成后再次登陆。
创建并验证镜像服务信息类型的保密字典
按图所示创建保密字典,类型选择镜像服务信息,服务地址选择https,填写正确的用户名密码后,点击验证按钮,验证有效性。
使用私有仓库创建部署
完成上述的配置后,在创建工作负载时,就可以选择私有镜像仓库地址,下面以创建一个部署为例子。
KubeSphere卸载
curl -LJO https://github.com/kubesphere/ks-installer/blob/release-3.3/scripts/kubesphere-delete.sh
bash kubesphere-delete.sh
主要功能
主要功能思维导图
相关文章:

Kubesphere 保姆级分析
应用场景 KubeSphere 适用于多种场景,为企业提供容器化的环境,借助完善的管理和运维功能,让企业在数字化转型过程中从容应对各种挑战和各类业务场景,如多云多集群管理、敏捷软件开发、自动化运维、微服务治理、流量管理以及 DevO…...

力扣hot100:240.搜索二维矩阵II(脑子)
吉大21级算法分析与设计的一道大题,由于每一行都是排好序的直接逐行二分 可以达到:O(mlogn)。但是这里追求更广的思路可以使用其他方法。 矩阵四分: 在矩阵中用中心点比较,如果target大于中心点的值,则由于升序排列&am…...
Apache Hive(三)
一、Apache Hive 1、ETL数据清洗 数据问题 问题1:当前数据中,有一些数据的字段为空,不是合法数据 解决:where 过滤 问题2:需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段…...
ORM(对象关系映射)的概念,并说明在Python中如何使用
ORM(对象关系映射)的概念,并说明在Python中如何使用 ORM(对象关系映射)是一种编程技术,它实现了将关系型数据库中的数据映射到程序中的对象模型,使得开发者能够使用面向对象的方式来操作数据…...
Br 算法
基于google的brotli开源,实现Br算法。 #include <brotli/encode.h> #include <brotli/decode.h>namespace br {/*compress unsigned char* content,if ok return non empty unsigned char * */std::string compress_string(const std::string& c…...
GPT实战系列-一种构建LangChain自定义Tool工具的简单方法
GPT实战系列-一种构建LangChain自定义Tool工具的简单方法 LLM大模型: GPT实战系列-探究GPT等大模型的文本生成 GPT实战系列-Baichuan2等大模型的计算精度与量化 GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF …...
【Docker】Memcached 容器化部署
Memcached环境标准软件基于Bitnami Memcached 构建。当前版本为1.6.24 你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取 配置文件地址: https://gitee.com/qingplus/qingcloud-platf…...

Langchain-Chatchat本地搭建ChatGLM3模型和提取PDF内容
文章目录 1、软件要求2、安装CUDA2.1、安装gcc2.2、安装CUDA 3、安装Anaconda33.1、下载Anaconda33.2、创建python虚拟环境 4、部署系统4.1、下载源码4.2、安装依赖4.3、下载模型4.4、初始化配置和知识库4.4.1、初始化配置4.4.2、初始化知识库 4.5、运行4.6、运行4.6.1、启动4.…...

案例分析篇03:一篇文章搞定软考设计模式考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)
专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…...

套接字的地址结构,IP地址转换函数,网络编程的接口
目录 一、套接字的地址结构 1.1 通用socket地址结构 1.2 专用socket地址结构 1.2.1 tcp协议族 1.2.3 IP协议族 二、IP地址转换函数 三、网络编程接口 3.1 socket() 3.2 bind() 3.3 listen() 3.4 accept() 3.5 connect() 3.6 close() 3.7 recv()、send() 3.8 recv…...
Java回顾总结--RandomAccessFile和NIO
目录 一、RandomAccessFile1.1 为什么要有RandomAccessFile?1.2 常用方法简介1.3 RandomAccessFile 特点和优势1.3.1 既可以读也可以写1.3.2 可以指定位置读写 1.4 示例 二、NIONIO使用示例 一、RandomAccessFile 1.1 为什么要有RandomAccessFile? Ran…...
2024年3月第15届蓝桥杯青少组STEMA考试C++中高级真题试卷
第15届蓝桥杯青少组STEMA考试C中高级真题试卷(2024年3月) 题目总数:11 总分数:400 选择题 第 1 题 单选题 (110010)2(c3)16的结果是( )。 A. (240)10 B. (11110101)2 C. (366)8 D. (f6)16 第 2 题 单选题 …...
Hyperf AOP 和 注解
注解 (hyperf.wiki) AOP 面向切面编程 (hyperf.wiki) 切面 定义切面(Aspect) 根据官方教程定义一个切面。可以指定类、方法、参数和注解上生效。 <?php namespace App\Aspect;use App\Service\SomeClass; use App\Annotation\SomeAnnotation; use Hyperf\Di\Annotatio…...

【C++】string类(介绍、常用接口)
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:http://t.csdnimg.cn/eCa5z 目录 string类的常用接口说明 string类对象的常见构造 编辑 string字符串的遍历(迭代器…...
SpringBoot项目中同时支持https和http协议
实用干货!看壹哥如何在SpringBoot项目中同时支持https和http协议_springboot http htpps共存-CSDN博客...
三大排序:冒泡、选择、插入
冒泡排序: 冒泡排序(Bubble Sort)是一种简单的排序算法。它通过比较相邻元素的大小,并交换它们的位置,使较大(或较小)的元素逐渐“浮”到数组的一端,从而实现排序的目的。 下面是冒…...
Android中MultiDex优化
MultiDex基本思路 当一个Dex文件太肥的时候(方法数目太多、文件太大),在打包或在安装或运行apk也会出问题。 解决方法就是将这个硕大的Dex文件拆分成若干个小的Dex文件。 刚好一个ClassLoader可以有多个DexFile。 MultiDex主要性能瓶颈 解压缩和Dex优化(…...
MySQL 8.0 的执行计划(EXPLAIN)
MySQL 8.0 的执行计划(也称为“EXPLAIN”计划)是数据库优化器为 SQL 查询生成的步骤序列。解读执行计划可以帮助数据库管理员(DBA)和开发者理解查询如何执行,识别潜在的性能问题,并据此优化查询。 下面是如…...

leetcode——二叉树问题汇总
leetcode 144. 二叉树的前序遍历 ①递归法: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val,…...
Android基础开发-饿汉式申请权限
1、案例,打开app时,就要申请权限 直接在onCreateView中申请所有权限就可,然后在选择的回调里边判断申请的结果 package com.example.client;import android.Manifest; import android.content.Intent; import android.content.pm.PackageMa…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...