首页>技术知识>电商资讯 解决方案:【云原生Kubernetes系列】KubeSphere容器调度平台
25QI导航
2024-12-12
KubeSphere是打造一个以Kubernetes为内核的云原生分布式操作系统。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一分发和运维管理。

在配置集群时,会遇到不少既复杂又有趣的问题。比如,在制定服务策略时,需要制作相应的Istio配置,这个过程需要掌握不少技术知识,也是许多技术人员在工作中需要关注的重点。

安装KubeSphere最好的方法就是参考官方文档,而且官方文档是中文的。
官网地址:https://kubesphere.com.cn/

Kubernetes存储分配器的选择

yum install -y nfs-utils

集群存储中,我们运用StorageClass进行PV的动态生成。但要注意,使用StorageClass的前提是必须拥有一个存储分配器。Kubernetes官方的分配器不兼容NFS,这时就必须额外安装NFS存储分配器。这是Kubernetes存储体系的关键环节。在配置集群时,若不熟悉这一点,可能会导致存储分配失败。不同应用场景对存储的需求各异,若需NFS存储,这一额外步骤是必须的。

echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports

NFS存储分配器在操作过程中有很多细节需要注意。它处在Kubernetes集群之中,若想管理NFS的存储空间,必须和APIServer进行沟通。这种沟通是在集群内Pod与APIServer之间进行的,因此必须设立ServiceAccount。接着,还需创建存储类、ClusterRole、ClusterRoleBinding、Role、RoleBinding等账号权限设置。这些步骤一个都不能少,缺少任何一个都可能让整个存储系统无法正常运行。

systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server

PersistentVolume子系统

exportfs -r ##使配置生效
exportfs ##检查配置是否已生效

PV子系统对用户和管理员来说至关重要。它提供了一套API,主要用于描述如何根据不同需求获取存储的详细信息。比如,在选择存储系统时,不论是NFS、iSCSI还是针对特定云服务提供商的存储系统,它都能捕捉到这些存储实现的详细信息。这一功能非常实用,无论是在大型数据中心还是小型企业级集群,都能借助这个子系统清楚地了解存储状况。

 showmount -e 192.168.48.10

Pod与PersistentVolume子系统关系密切。Pod利用PVC访问存储卷,并设有权限限制。早期版本中,这种限制被称为PVCProtection,而现在称作storageProtection。此机制旨在防止正在使用的PVC被误删,以此保障数据安全。在众多大规模数据存储应用中,这一机制尤为关键,有效防止因误操作导致重要数据丢失。

Metrics-Server功能

服务器在集群中扮演着至关重要的角色。它作为集群指标监控的一部分,主要与API服务器进行交互,以获取Kubernetes集群中各项指标信息。这些信息涵盖了Pod、Node等资源的使用情况,如CPU和内存。在集群管理日常工作中,通过分析这些指标,能够迅速发现并解决问题,例如某个Pod的CPU使用率异常升高,便可以快速判断是代码问题还是资源分配不当。

vim sc.yaml 

KubeSphere中,Metrics-Server扮演着关键角色。KubeSphere作为Kubernetes的仪表盘,要获取Kubernetes的数据,需依赖特定组件提供,而这功能正是Metrics-Server负责的。若缺少Metrics-Server,KubeSphere便无法准确展示集群资源使用状况,这对集群管理和监控会造成极大不便。

## 创建了一个存储类
apiVersion: storage.k8s.io/v1
kind: StorageClass                  #存储类的资源名称
metadata:
  name: nfs-storage                 #存储类的名称,自定义
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"          #注解,是否是默认的存储,注意:KubeSphere默认就需要个默认存储,因此这里注解要设置为“默认”的存储系统,表示为"true",代表默认。
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner         #存储分配器的名字,自定义
parameters:
  archiveOnDelete: "true"  ## 删除pv的时候,pv的内容是否要备份
 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
spec:
  replicas: 1                 #只运行一个副本应用
  strategy:                   #描述了如何用新的POD替换现有的POD
    type: Recreate            #Recreate表示重新创建Pod
  selector:        #选择后端Pod
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:

业务是客服吗_ks业务是什么_业务是开展还是拓展好

app: nfs-client-provisioner spec: serviceAccountName: nfs-client-provisioner #创建账户 containers: - name: nfs-client-provisioner image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2 #使用NFS存储分配器的镜像 # resources: # limits: # cpu: 10m # requests: # cpu: 10m volumeMounts: - name: nfs-client-root #定义个存储卷, mountPath: /persistentvolumes #表示挂载容器内部的路径 env: - name: PROVISIONER_NAME #定义存储分配器的名称 value: k8s-sigs.io/nfs-subdir-external-provisioner #需要和上面定义的保持名称一致 - name: NFS_SERVER #指定NFS服务器的地址,你需要改成你的NFS服务器的IP地址 value: 192.168.48.10 ## 指定自己nfs服务器地址 - name: NFS_PATH value: /nfs/data ## nfs服务器共享的目录 #指定NFS服务器共享的目录 volumes: - name: nfs-client-root #存储卷的名称,和前面定义的保持一致 nfs: server: 192.168.48.10 #NFS服务器的地址,和上面保持一致,这里需要改为你的IP地址 path: /nfs/data #NFS共享的存储目录,和上面保持一致 --- apiVersion: v1 kind: ServiceAccount #创建个SA账号 metadata: name: nfs-client-provisioner #和上面的SA账号保持一致 # replace with namespace where provisioner is deployed namespace: default --- #以下就是ClusterRole,ClusterRoleBinding,Role,RoleBinding都是权限绑定配置,不在解释。直接复制即可。 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: ServiceAccount name: nfs-client-provisioner # replace with namespace where provisioner is deployed namespace: default roleRef: kind: ClusterRole name: nfs-client-provisioner-runner apiGroup: 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 deployed namespace: 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 deployed namespace: default subjects: - kind: ServiceAccount name: nfs-client-provisioner # replace with namespace where provisioner is deployed namespace: default roleRef: kind: Role name: leader-locking-nfs-client-provisioner apiGroup: rbac.authorization.k8s.io

修改集群配置的意义

集群配置的调整至关重要。例如,通过启用KubeSphere的一些插件,如DevOps相关的工具、激活ectd的监控以及开启告警机制等,这些操作能够增强集群的运行效能与管理效率。以告警功能为例,一旦集群中某个关键Pod出现故障,管理员便能立即获得通知,迅速采取应对措施。

kubectl apply -f sc.yaml

操作集群配置时,需认真分析各插件功能。不宜随意开启全部插件,以免资源过度消耗。应根据具体需求进行配置,比如,若项目以数据存储为主,则应优先启用和优化存储插件;若项目更偏向开发运维结合,那么DevOps相关插件的启用就尤为重要。

[root@master ~]# kubectl get sc
NAME                    PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-storage (default)   k8s-sigs.io/nfs-subdir-external-provisioner   Delete          Immediate           false                  10h

日志相关服务

集群运维离不开日志索引、查询及数据管理等服务。安装时,若能接入现有的ES(Elasticsearch),能降低资源消耗。在企业集群中,尤其是大型环境,日志数据量极大。若每个日志功能都单独运行,将导致资源严重浪费。

[root@master ~]# kubectl get pods -A
NAMESPACE              NAME                                         READY   STATUS      RESTARTS        AGE
default                nfs-client-provisioner-65878c6456-hsxqf      1/1     Running     1 (35m ago)     10h

配置日志索引这类服务时,需全面考虑生产环境中的业务量、数据流量等关键因素。不能仅仅开启服务这么简单。例如,在业务高峰期,可能需要扩大日志索引的缓存容量,否则查询日志的速度可能会变慢,甚至出现查询失败的情况。

服务策略与Istio配置

在制定服务策略的过程中,生成相应的Istio配置同样至关重要。在复杂的网络结构中,这样的配置能协助调控服务间的数据流动,并加强安全防护。若DevOps、ServiceMesh、警告等插件均开启,便需配置得更为细致。比如,在多个服务间频繁交互且对安全要求极高的场合,若Istio配置出现失误,可能引发服务间通信的安全风险,或是流量分配出现不均等问题。

生成准确的Istio配置需对集群内各服务间的联系和具体需求有深刻理解。不同服务可能对流量和安全有不同要求,因此需对每个服务的特点进行详细分析,进而制定恰当的配置。这对众多工程师而言是一大挑战。您在工作中是否遇到过关于配置Istio的难题?阅读本文或许能帮助您更深入地了解集群配置的相关知识。同时,欢迎点赞及转发,让更多同行从中受益。

[root@master ~]# kubectl get pv
No resources found

显示全部内容...