跳到主要内容

Kubernetes 部署

Chart:curvine/curvine,版本 0.3.2-alpha

前置条件

  • Kubernetes 1.20+
  • Helm 3.x
  • 集群具备默认 StorageClass(供 master/worker PVC 使用)

架构说明

Helm release curvine 部署于 namespace curvine

资源说明
StatefulSet curvine-master元数据、Raft journal
StatefulSet curvine-worker数据节点
Service curvine-masterHeadless,RPC 8995
Service curvine-workerHeadless,RPC 8997

默认 openKruise.enabled=false,StatefulSet 使用 apps/v1

部署

添加仓库

helm repo add curvine https://curvineio.github.io/helm-charts
helm repo update

安装

helm upgrade --install curvine curvine/curvine \
--version 0.3.2-alpha \
-n curvine \
--create-namespace \
--wait --timeout 10m

验证

kubectl get pods,svc,pvc -n curvine

Web UI:

kubectl port-forward -n curvine svc/curvine-master 9000:9000

Master 地址

单副本:

curvine-master.curvine.svc.cluster.local:8995

三副本:

curvine-master-0.curvine-master.curvine.svc.cluster.local:8995,curvine-master-1.curvine-master.curvine.svc.cluster.local:8995,curvine-master-2.curvine-master.curvine.svc.cluster.local:8995

升级

helm upgrade curvine curvine/curvine \
--version 0.3.2-alpha \
-n curvine \
--reuse-values \
--set worker.replicas=3

master.replicas 安装后不可修改。

卸载

helm uninstall curvine -n curvine
kubectl delete pvc -n curvine -l app.kubernetes.io/instance=curvine
kubectl delete namespace curvine

故障排查

现象命令原因
Pod Pendingkubectl describe pod -n curvine <name>资源不足;无 StorageClass
master 启动慢kubectl logs curvine-master-0 -n curvineRaft 回放中
PVC Pendingkubectl get sc无可用 StorageClass

配置参考

Chart 版本 0.3.2-alpha。下表默认值与 helm show values curvine/curvine --version 0.3.2-alpha 一致。

全局

参数默认值说明
global.clusterDomaincluster.localKubernetes 集群域名

集群

参数默认值说明
cluster.idcurvine集群 ID
cluster.formatMasterfalse启动时格式化 master 数据
cluster.formatWorkerfalse启动时格式化 worker 数据
cluster.formatJournalfalse启动时格式化 journal 数据

镜像

参数默认值说明
image.repositoryghcr.io/curvineio/curvine镜像仓库
image.tag""空值使用 v{Chart.AppVersion}
image.pullPolicyIfNotPresent镜像拉取策略
image.pullSecrets[]镜像拉取密钥

OpenKruise

默认 openKruise.enabled=false,master/worker 使用标准 apps/v1 StatefulSet。

openKruise.enabled=true 时安装 kruise 子 chart,并将 master/worker 切换为 Advanced StatefulSet(apps.kruise.io/v1beta1)。

参数默认值说明
openKruise.enabledfalse启用 Advanced StatefulSet
openKruise.podUpdatePolicyInPlaceOnlyInPlaceOnly | InPlaceIfPossible | ReCreate
openKruise.persistentPodState.autoGeneratetrue自动生成 PersistentPodState
openKruise.persistentPodState.preferredPersistentTopologykubernetes.io/hostname首选拓扑键
openKruise.persistentPodState.requiredPersistentTopology""强制拓扑键(可选)
kruise.installation.namespacekruise-systemKruise 子 chart 命名空间(启用时)
kruise.installation.createNamespacetrue创建 Kruise 命名空间

Master

参数默认值说明
master.replicas1须为奇数(1、3、5…)
master.rpcPort8995RPC 端口
master.journalPort8996Journal/Raft 端口
master.webPort9000Web UI 端口
master.web1Port9001附加 Web 端口
master.startupProbe.enabledtrue启动探针
master.startupProbe.failureThreshold90允许较长 Raft 回放
master.storage.meta.enabledtrue启用元数据 PVC
master.storage.meta.storageClass""空值使用 default StorageClass
master.storage.meta.size5Gi元数据 PVC 大小
master.storage.meta.hostPath""无 StorageClass 时使用 hostPath
master.storage.meta.mountPath/opt/curvine/data/meta挂载路径
master.storage.journal.enabledtrue启用 journal PVC
master.storage.journal.storageClass""空值使用 default StorageClass
master.storage.journal.size10Gijournal PVC 大小
master.storage.journal.hostPath""无 StorageClass 时使用 hostPath
master.storage.journal.mountPath/opt/curvine/data/journal挂载路径
master.resources.requests.cpu500mCPU request
master.resources.requests.memory1Gi内存 request
master.resources.limits.cpu1000mCPU limit
master.resources.limits.memory2Gi内存 limit
master.antiAffinity.enabledfalsePod 反亲和
master.antiAffinity.typerequiredrequiredpreferred
master.persistentTopology.enabledtruePersistentPodState 拓扑
master.persistentTopology.keykubernetes.io/hostname拓扑键
master.nodeSelector{}节点选择器
master.tolerations[]容忍度
master.affinity{}亲和规则

Worker

参数默认值说明
worker.replicas1Worker 副本数
worker.rpcPort8997RPC 端口
worker.webPort9001Web UI 端口
worker.s3Gateway.enabledfalse启用 S3 网关
worker.s3Gateway.listen0.0.0.0:9900S3 网关监听地址
worker.s3Gateway.enableDistributedAuthtrueS3 分布式认证
worker.s3Gateway.service.typeClusterIPS3 Service 类型
worker.hostNetworkfalse使用 host 网络
worker.dnsPolicyClusterFirstDNS 策略
worker.usePodIPAsHostnamefalse使用 Pod IP 作为 worker 主机名
worker.privilegedtrue特权模式(FUSE)
worker.storage.dataDirs[0].namedata1数据目录名称
worker.storage.dataDirs[0].typeSSD存储类型
worker.storage.dataDirs[0].enabledtrue启用数据目录
worker.storage.dataDirs[0].size20GiPVC 大小
worker.storage.dataDirs[0].storageClass""空值使用 default StorageClass
worker.storage.dataDirs[0].hostPath""无 StorageClass 时使用 hostPath
worker.storage.dataDirs[0].mountPath/data/data1挂载路径
worker.resources.requests.cpu500mCPU request
worker.resources.requests.memory1Gi内存 request
worker.resources.limits.cpu1000mCPU limit
worker.resources.limits.memory2Gi内存 limit
worker.antiAffinity.enabledtruePod 反亲和
worker.antiAffinity.typepreferredrequiredpreferred
worker.nodeSelector{}节点选择器
worker.tolerations[]容忍度
worker.affinity{}亲和规则

Service

参数默认值说明
service.master.typeClusterIPHeadless(ClusterIP: None
service.worker.typeClusterIPHeadless(ClusterIP: None
service.masterExternal.enabledfalse外部访问 master
service.masterExternal.typeClusterIP外部 Service 类型
service.masterExternal.loadBalancerIP""LoadBalancer IP

ServiceAccount 与 RBAC

参数默认值说明
serviceAccount.createtrue创建 ServiceAccount
serviceAccount.name""空值自动生成
rbac.createtrue创建 RBAC 资源

Curvine 配置(config.*

参数默认值说明
config.master.metaDir/opt/curvine/data/metaMaster 元数据目录
config.journal.enabletrue启用 journal
config.journal.journalDir/opt/curvine/data/journalJournal 目录
config.journal.snapshotInterval6h快照间隔
config.journal.snapshotEntries1000000快照条目阈值
config.client.blockSizeStr64MB客户端块大小
config.log.levelINFO日志级别
config.log.logDir/opt/curvine/logs日志目录
config.log.consoletrue日志输出到 stdout

配置覆盖(configOverrides.*

按 TOML 分段覆盖,无需替换完整配置:

参数默认值说明
configOverrides.master{}Master 段覆盖
configOverrides.journal{}Journal 段覆盖
configOverrides.worker{}Worker 段覆盖
configOverrides.client{}Client 段覆盖
configOverrides.log{}Log 段覆盖

存储方式

方式配置
PVC(默认)storageClass: "" 使用集群 default StorageClass
指定 StorageClassmaster.storage.*.storageClassworker.storage.dataDirs[].storageClass
hostPathstorageClass: "" 并设置 hostPath

示例

降低资源 request:

helm upgrade curvine curvine/curvine -n curvine --reuse-values \
--set master.resources.requests.cpu=200m \
--set master.resources.requests.memory=512Mi \
--set worker.resources.requests.cpu=200m \
--set worker.resources.requests.memory=512Mi

完整参数:

helm show values curvine/curvine --version 0.3.2-alpha