k8s部署StarRocks——helm部署
集群规模,一个master节点,两个node节点。这里创建k8s集群步骤省略。
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,缺失时会自动创建, 已经存在的不会再创建
更多推荐
所有评论(0)