赞
踩
该笔记来源于 RisingWave 社区用户投稿,若你对该项目感兴趣或者你要投稿,可联系社区小助手 risingwave_assistant
本文分为三个部分: 离线环境如何用 yum 安装软件,离线环境安装 k8s 安装 helm,离线环境安装 RisingWave,可以按需使用 ):
本文适用场景:离线环境、使用yum工具进行安装包管理的linux操作系统、没有内网自建yum镜像源(或更新不及时)
以centos7.9.2009操作系统为例,本文介绍一种在离线linux环境中使用yum包管理工具安装软件的通用方法
要求系统发型版本尽可能一致,最好是相同的,至少不能有大版本差别 推荐使用docker容器,尽可能模拟出干净的离线环境机器 本文在联网环境中使用如下命令构建centos容器,用于下载安装包
# 以centos7.9为例,在联网机器启动一个docker容器
docker run -d --name centos centos:centos7.9.2009 /sbin/init
进入centos容器docker exec -it centos /bin/bash
在容器内执行如下操作
# 修改yum.conf文件,保证yum安装的包源文件不会被删除 sed -i 's/keepcache=0/keepcache=1/g' /etc/yum.conf # sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.conf # 可以关闭gpg校验,加快安装速度 # 替换yum源(可选,此处以清华源为例),也可以试试直接安装软件,如果网速没问题的话,可沿用官方源 # [清华centos源使用帮助](https://mirrors.tuna.tsinghua.edu.cn/help/centos/) sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-*.repo yum clean all && yum makecache yum update -y yum instal 你需要的软件 # 打包需要上传到离线环境的文件 rm -rf /tmp/yum_cache && mkdir -p /tmp/yum_cache/var/cache/ && cd /tmp/yum_cache # 第一次可以将路径 /etc/yum*、/var/cache/yum/* 下的所有文件都拷贝到离线环境 cp -R /var/cache/yum /tmp/yum_cache/var/cache/yum mkdir /tmp/yum_cache/etc && cp -R /etc/yum* /tmp/yum_cache/etc/ # ls -R tar -zcf /tmp/yum_cache/yum_cache.tgz /tmp/yum_cache/var /tmp/yum_cache/etc # 可以测试解压缩覆盖原路径 tar zxfv yum_cache.tgz -C / # 后续不定期增量安装个别软件时,可以只打包当天变动的文件,如当天下载的包、当天修改的yum源文件等 # rm -rf /tmp/yum_cache && mkdir /tmp/yum_cache && cd /tmp/yum_cache # find /var/cache/yum/ -ctime 0 -type f | xargs -I {} cp --parents {} /tmp/yum_cache # find /etc/yum*/ -ctime 0 -type f | xargs -I {} cp --parents {} /tmp/yum_cache # # ls -R tar -zcf /tmp/yum_cache/yum_cache.tgz /tmp/yum_cache/var /tmp/yum_cache/etc
退出容器,将容器内打包好的文件拷贝到宿主机,并上传到离线环境
docker cp centos:/tmp/yum_cache/yum_cache.tgz /tmp/yum_cache.tgz
解压缩文件并安装软件
# 将tar包拷贝到离线服务器,解压到根目录下,相同目录结构会覆盖
tar zxf yum_cache.tgz -C /
yum install 你在联网环境安装过的包名 # yum会自动使用本地缓存文件进行安装
一些云原生开源软件(如RisingWave)依赖于k8s集群进行部署,针对公司内网环境,没有公共基础设施团队支持的情况,本文演示如何离线安装k8s集群、helm工具以及kube-prometheus-stack监控组件
下一篇将基于此介绍如何离线安装RisingWave
本文使用的基础环境为: 三台linux虚拟机 操作系统: centos7.9.2009 docker版本: 18.06.1 k8s版本: V1.13.3 helm版本: 3.7.0 kube-prometheus-stack版本: 58.7.2
注: 本文未考虑k8s集群master节点高可用
以下步骤不依赖于网络环境,直接在待部署的所有节点上执行
# 在所有集群节点上执行
systemctl stop firewalld
systemctl disable firewalld
# 在所有集群节点上执行
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
# 在所有集群节点上执行
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
# 在所有集群节点上执行
cat >> /etc/hosts <<EOF
192.168.0.11 k8s-master
192.168.0.12 k8s-node1
192.168.0.13 k8s-node2
EOF
便于后续通过从主节点复制文件到从节点等操作
# 在所有集群节点上执行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub root@k8s-node1:~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub root@k8s-node2:~/.ssh/authorized_keys
docker和helm的安装依赖联网环境,你需要有一台联网的机器(操作系统最好保持和离线环境一致),然后将安装包下载到本地,再上传到离线环境中安装
关于如何在离线环境中使用yum安装软件,请参考上一篇文档
以下展示联网环境中的安装操作步骤,描述相对简洁,如果某个环节遇到特殊问题,网上有很多资料可以参考
# 建议运行`yum update -y`命令,更新系统软件包
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 如果阿里云下载太慢,换成清华源试试
# sed -i 's+mirrors.aliyun.com+mirrors.tuna.tsinghua.edu.cn+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 在线环境中,yum install 命令还可以加上 --downloadonly 参数,仅下载安装包而不安装
systemctl enable docker --now
# 后续如遇到docker镜像下载缓慢问题,可以配置docker镜像加速器,例如阿里云加速器
# https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
# 离线环境中,需要在所有集群节点上执行 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # 如果希望安装指定版本,可以使用如下命令查看和安装可用版本 # yum list --showduplicates kubeadm --disableexcludes=kubernetes # yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
# 通过下面这条命令查看k8s集群启动所需的镜像列表,然后在联网环境中下载这些镜像 kubeadm config images list # 在我的环境中,输出如下: # registry.k8s.io/kube-apiserver:v1.28.11 # registry.k8s.io/kube-controller-manager:v1.28.11 # registry.k8s.io/kube-scheduler:v1.28.11 # registry.k8s.io/kube-proxy:v1.28.11 # registry.k8s.io/pause:3.9 # registry.k8s.io/etcd:3.5.9-0 # registry.k8s.io/coredns/coredns:v1.10.1 # 下载k8s镜像,以registry.k8s.io/kube-apiserver:v1.28.11为例 # 这一步骤可以先直接尝试 docker pull registry.k8s.io/kube-apiserver:v1.28.11 # 如果下载不下来,可以尝试到dockerhub上找到对应的镜像,然后下载并重命名 # 推荐一个备用镜像地址:https://hub.docker.com/r/kubesphere docker pull kubesphere/kube-apiserver:v1.28.11 docker tag kubesphere/kube-apiserver:v1.28.11 registry.k8s.io/kube-apiserver:v1.28.11 # 下载完所有依赖镜像后,导出镜像并压缩 docker save -o k8s-images.tar registry.k8s.io/kube-apiserver:v1.28.11 registry.k8s.io/kube-controller-manager:v1.28.11 registry.k8s.io/kube-scheduler:v1.28.11 registry.k8s.io/kube-proxy:v1.28.11 registry.k8s.io/pause:3.9 registry.k8s.io/etcd:3.5.9-0 registry.k8s.io/coredns/coredns:v1.10.1 tar -czvf k8s-images.tar.gz k8s-images.tar # 将压缩文件上传到离线环境
首先按照在线环境操作的相同步骤,将docker、kubectl、kubelet、kubeadm、helm的安装包上传到离线环境中
为了减少不必要的麻烦,建议所有节点都执行相同的安装步骤
启动docker、kubelet服务
systemctl enable docker --now
systemctl enable kubelet --now
为了减少不必要的麻烦,建议每台节点都导入所有docker镜像
# 在离线环境中,将k8s-images.tar.gz文件解压并导入镜像
tar zxf k8s-images.tar.gz
docker load -i k8s-images.tar
# 在主节点上执行
kubeadm init # 可以参考其他博客文档,添加一些参数,不添加使用默认配置也没啥问题
# 初始化输出中会包含后续用于从节点加入集群的命令,如果遗忘了,也可以使用以下命令打印token和hash
kubeadm token create --print-join-command
# 在从节点上执行上述主节点输出的join命令,例如
kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash <hash>
至此,离线环境安装k8s集群
# 在线环境中,可以直接下载helm二进制文件
#访问 https://github.com/helm/helm ,进入releases页面,下载对应版本的helm二进制文件
# 例如下载v3.7.0版本
yum install -y wget
wget https://get.helm.sh/helm-v3.15.2-linux-amd64.tar.gz
# 后续将此压缩包上传到离线环境中,以相同方式解压安装
tar -zxvf helm-v3.15.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
根据上一篇文章,我们已经将k8s集群的基础环境配置好,并安装了helm工具,现在我们将使用helm安装Risingwave。
本文使用helm离线安装chart的步骤也适用于其他chart项目,比如kube-prometheus-stack、nfs-client-provisioner等
# 在联网环境中,下载risingwave的helm chart包
helm repo add risingwavelabs https://risingwavelabs.github.io/helm-charts/ --force-update
helm repo update
# 通过helm pull命令下载chart压缩包,后续假设你下载的压缩包名称为risingwave-0.1.63.tgz
helm pull risingwavelabs/risingwave
ls ./risingwave-0.1.63.tgz
可以先解压缩下载好的chart包,查看默认配置文件模板,然后根据需要修改配置项
# 解压缩下载好的chart包
tar -zxvf risingwave-0.1.63.tgz
# 查看默认配置文件
cat ./risingwave/values.yaml
# 复制一份配置文件,以便修改
mv ./risingwave/values.yaml ./my_rw_values.yaml
接下来你必决定最终以何种配置方式部署Risingwave(主要是决定使用什么metastore
和statestore
组件),然后按需构造一个合适的自定义values.yaml
文件
相关配置参考RisingWave官方helm-chart项目
编写好你的部署配置文件后,可以在联网环境中检查一下是否有错误
helm install --dry-run --debug -f values.yaml risingwave ./risingwave
本文最后也会给出一个实际的values.yaml示例文件,并针对一些特殊项目的设置进行说明
helm的安装依赖一些docker镜像,可以在联网环境通过docker pull
进行下载,然后上传到离线环境中安装(每个k8s节点都需要安装) 至于如何确认需要哪些镜像,可以使用如下命令
helm template risingwave ./risingwave-0.1.63.tgz -f my_rw_values.yaml | grep image: | sort | uniq
# 如果你计划基于 etcd+minio 组件安装risingwave,也可以简单使用以下命令获取镜像列表
# helm template rw ./risingwave-0.1.63.tgz --set tags.bundle=true | grep image: | sort | uniq
# 启用监控配置(通过grafana面板观察集群状况),如开启,建议一并在集群中安装 kube-prometheus-stack 监控组件 monitor: podMonitor: enabled: true namespace: "monitoring" # 使用nodePort方式暴露服务,并指定固定端口 # 这里4566端口,k8s默认是不支持的,需要修改/etc/kubernetes/manifests/kube-apiserver.yaml的配置文件 # 添加--service-node-port-range=1-32767参数 service: type: NodePort nodePort: "4566" tags: bundle: true # 使用etcd+minio组件 metaComponent: # 配置副本数 replicas: 1 # 配置资源限制 resources: limits: cpu: 4 memory: 8Gi requests: cpu: 2 memory: 4Gi # 配置额外的volume,使用场景是挂载kafka集群kerberos认证使用的配置文件 # 需要提前将krb5.conf文件创建为configMap,将kafka.keytab文件创建为secret extraVolumes: - name: krb5-volume configMap: name: krb5-config - name: kafka-secret secret: secretName: kafka-secret extraVolumeMounts: - mountPath: /etc/krb5.conf name: krb5-volume subPath: krb5.conf - mountPath: /etc/kafka.keytab name: kafka-secret subPath: kafka.keytab # 修改容器中的hosts文件,使得容器内部可以通过hostname访问其他服务器,针对一些只能使用域名访问的场景 # 要使以下配置生效,需要修改helm chart对应的template # 解压缩chart包后,可以在templates目录下找到meta-sts.yaml、compute-sts.yaml文件,修改其中的hostAliases配置 hostAliases: - ip: "10.1.18.11" hostnames: - "nn1" - ip: "10.1.18.12" hostnames: - "nn2" computeComponent: replicas: 2 resources: limits: cpu: 8 memory: 20Gi requests: cpu: 4 memory: 16Gi extraVolumes: - name: krb5-volume configMap: name: krb5-config - name: kafka-secret secret: secretName: kafka-secret extraVolumeMounts: - mountPath: /etc/krb5.conf name: krb5-volume subPath: krb5.conf - mountPath: /etc/kafka.keytab name: kafka-secret subPath: kafka.keytab # 要使以下配置生效,需要修改helmchart对应的template hostAliases: - ip: "10.1.18.11" hostnames: - "nn1" - ip: "10.1.18.12" hostnames: - "nn2" compactorComponent: replicas: 2 resources: limits: cpu: 4 memory: 8Gi requests: cpu: 2 memory: 4Gi frontendComponent: replicas: 1 resources: limits: cpu: 4 memory: 8Gi requests: cpu: 2 memory: 4Gi
# 将本地的krb5.conf文件创建为configMap
kubectl create -n risingwave configmap krb5-config --from-file=./krb5.conf
kubectl get configmap
# 将本地的kafka.keytab文件创建为secret
kubectl create -n risingwave secret generic kafka-secret --from-file=./kafka.keytab
kubectl get secret
# 解压缩chart包后,可以在templates目录下找到meta-sts.yaml、compute-sts.yaml文件,修改其中的hostAliases配置
# 找到hostPID所在行,下面添加hostAliases配置
hostAliases:
{{ toYaml .Values.metaComponent.hostAliases | nindent 8 }}
{{- end }}
{{- if .Values.metaComponent.shareProcessNamespace }}
修改配置文件后可以重新压缩打包chart包,然后在离线环境中安装 shell
cd risingwave # 进入解压缩后的chart包目录
tar -zcvf ../risingwave-0.1.63.tgz risingwave
cd ..
helm install risingwave ./risingwave-0.1.63.tgz -f my_rw_values.yaml
helm也支持直接基于文件夹配置安装
cd risingwave # 进入解压缩后的chart包目录
helm install risingwave ./risingwave -f my_rw_values.yaml
参考文档基于helm部署kube-prometheus stack全家桶
如果你的Risingwave使用etc+minio组件,那么需要k8s集群配置了默认的的动态存储类(provisioner),才能够支持rw进行动态存储申请,否则rw启动时会报错,无法创建或找到对应的pvc
# 查看集群中的存储类
kubectl get sc
# 如果没有默认的存储类,可以通过以下命令创建一个
参考部署文档k8s 进阶实战笔记 | NFS 动态存储类的部署与使用
RisingWave 是一款开源的分布式流处理数据库,旨在帮助用户降低实时应用的开发成本。RisingWave 采用存算分离架构,提供 Postgres-style 使用体验,具备比 Flink 高出 10 倍的性能以及更低的成本。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。