1.环境准备

1. 创建k8s集群

集群规模,一个master节点,两个node节点。这里创建k8s集群步骤省略。

2.安装helm

2.1下载二进制文件

wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz

2.2 解压安装

tar -zxvf helm-v3.2.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/

2.3 检测安装

helm version

2.4 添加仓库

helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 

2.部署操作

添加 StarRocks 的 Helm Chart Repo。Helm Chart 包括 StarRocks Operator 和定制资源 StarRocksCluster 的定义。

2.1添加Helm Chart Repo

helm repo add starrocks-community https://starrocks.github.io/starrocks-kubernetes-operator

2.2更新Helm Chart Repo

helm repo update

在这里插入图片描述

2.3查看所添加的Helm Chart Repo

helm search repo starrocks-community

在这里插入图片描述

2.4部署StarRocks

可以使用Helm Chart 默认的 values.yaml 来部署 StarRocks Operator 和 StarRocks 集群,也可以新建 YAML 文件并且自定义配置来部署。这里使用的是自定义values.yaml来部署。
执行如下命令,部署StarRocks。

helm install -f values.yaml starrocks starrocks-community/kube-starrocks

返回以下结果,表示正在部署StarRocks operator 和StarRocks集群
在这里插入图片描述
可以通过如下命令查看集群部署状态

kubectl get pods 

在这里插入图片描述
如果所有 Pod 处于 Running 状态且 Pod 内所有容器都 READY,则表示已经成功部署。

3.访问StarRocks

查询pod详细信息

kubectl get pod -o wide

在这里插入图片描述
我们可以看到FE被调度到node2节点上,集群内部虚拟IP为10.244.104.17
访问StarRocks: mysql -h10.244.104.17 -P9030 -uroot -proot
这里需要密码是因为配置了初始化密码。
在这里插入图片描述

4.配置初始化密码

以helm方式部署的StarRocks,设置初始化密码与直接在虚拟机上部署的StarRocks方式不同。
配置初始化密码:
(1)可以使用secret来设置根密码:

kubectl create secret generic starrocks-root-password --from-literal=password=root

(2)也可以修改values.yaml:
在这里插入图片描述

修改完成后保存退出,更新集群:

kubectl upgrade -f values.yaml starrocks starrocks-community/kube-starrocks

查询集群状态时发现,starrocks-initpwd 中的STATUS为Error,这是因为starrocks-initpwd 是一个job,它的任务是访问FE进行密码修改,类似于我们的执行:set password = passwor(“xxx”)这样只有FE启动以后这个任务才能完成。
在这里插入图片描述
在这里插入图片描述

5.卸载StarRocks Operator 和 StarRocks 集群

如果想要卸载StarRocks Operator 和 StarRocks 集群,可以使用以下命令:

helm uninstall starrocks

6.配置持久化存储

这里使用NFS做持久化存储
NFS 可以作为一种持久化存储解决方案,用于存储和共享数据。NFS 存储适用于需要多个 Pod 共享相同数据的场景,如数据库、文件共享、日志文件存储等。它提供了可靠的数据持久性和高可用性,使多个 Pod 可以访问和修改相同的文件。

6.1 安装NFS

下载nfs服务:
yum -y install nfs-utils rpcbind
配置NFS_PATH文件夹:

vim /etc/exports
/data *(rw,sync,no_root_squash,no_subtree_check)

启动nfs服务

systemctl start nfs
systemctl status nfs

6.2 NFS制备器配置

vim nfs-provisioner-deployment.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  namespace: kube-system
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: kube-system
  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-client-provisioner
      containers:
        - name: nfs-client-provisioner
#          image: quay.io/external_storage/nfs-client-provisioner:latest
          image: registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs   # 自定义制备器名称
            - name: NFS_SERVER
              value: 192.168.110.186 #nfs服务器地址
            - name: NFS_PATH
              value: /data #nfs服务器挂载的文件路径
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.110.186
            path: /data
vim nfs-provisioner-rbac.yaml

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
- apiGroups: [""]
  resources: ["persistentvolumes"]
  verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
  resources: ["persistentvolumeclaims"]
  verbs: ["get", "list", "watch", "update"]
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get", "list", "watch", "create", "update", "patch"]
- 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
  namespace: kube-system
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
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
subjects:
- kind: ServiceAccount
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: kube-system
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io
vim nfs-storage-class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs
parameters:
  archiveOnDelete: "false"

provisioner: fuseim.pri/ifs  # 外部制备器提供者,编写为提供者的名称
parameters:
  archiveOnDelete: "false"  # 是否存档,false 表示不存档,会删除 oldPath 下面的数据,true 表示存档,会重命名路径
reclaimPolicy: Retain # 回收策略,默认为 Delete 可以配置为 Retain
volumeBindingMode: Immediate  # 默认为 Immediate,表示创建 PVC 立即进行绑定,只有 azuredisk 和 AWSelasticblockstore 支持其他值

修改完成后执行命令:

kubectl apply -f nfs-provisioner-rbac.yaml
kubectl apply -f nfs-provisioner-deployment.yaml
kubectl apply -f nfs-storage-class.yaml

6.3 配置pv,pvc

修改values.yaml文件
修改starrocksFESpec/starrocksBeSpec 下的storageSpec

starrocksFESpec:
    # number of replicas to deploy for a fe statefulset.
    replicas: 1
    image:
      repository: starrocks/fe-ubuntu
      tag: 3.1.0 #选择存算分离版本
    annotations: {}
    runAsNonRoot: false
    service:
      type: "NodePort"
      loadbalancerIP: ""
      annotations: {}
      ports: []
    imagePullSecrets: []
    serviceAccount: ""
    nodeSelector: {}
    podLabels: {}
    hostAliases: []
    schedulerName: ""
    feEnvVars: []
    affinity: {}
    tolerations: []
    storageSpec:
      name: "fe-meta"  #自定义pvc前缀
      storageClassName: "managed-nfs-storage"  #需要绑定pv名称
      storageSize: 10Gi  #需要绑定pv的容量期望

修改完成后更新集群:

helm upgrade -f values.yaml starrocks starrocks-community/kube-starrocks

注:通过helm部署集群时,是使用sc自动创建的pv和pvc,当uninstall集群后再次install,只要使用相同的集群名, 就会复用之前的pv/pvc, 不要手动删除pv/pvc。
values.yaml中需要指定sc,缺失时会自动创建, 已经存在的不会再创建

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐