作者简介
Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验。他目前领导YugabyteDB的社区和市场团队。
Longhorn是Kubernetes的云原生分布式块存储,易于部署和升级,100%开源且持久,由业界采用最为广w X y y N ` 8 G t泛的Kubernetes管理平台创建者Rancher Labs推出,并于去年10月捐献给CNCF。Longhorn的内置增量快照和备份功能可确保# Y Y G x W Bvolume数据的安全,而其直观的UI可以方便地管理持久卷的计划备份。使用Longhorn,你可以获得最细的管理粒度和最大的控制程度E + ! ^,并且可以轻松地在另一个Kubernetes中创建一个灾备恢复的volume,并在发生紧急情况时进行故障转移。
云原生基础设施堆栈:计算、部署、管理、存储和数据库
YugabyteDB是一个云原生分布式SQLG ! Y X数据库,它可以运行在Kubernetes环境中,所以它可以与Longhorn和9 N s G ^ M N 8许多其他CNCF项目互操作。YugabyteDB是一个开源的高性能分布式SQL数: W - / R P e据库,该数据库基于Google SpU C ^anner的可扩展性和容p 5 q | a v u u错设计而构建。Yk j y A & & R t 1ugabyte的SQW x M @ ~ p ZL API(YSQL)与PostgreSQL兼容。
如果你正在寻找一种方法来轻松地在100%的云原生基础架构之上开始应用程序开发,那么这篇文章正是为你准备的。我们将一步一步告诉你如何部署一个完整的云原生基础架构堆栈,该堆栈由Google Kubernetes Engine、Rancher企业级Kubernetes管理平台、Longhor( 1 . Tn分布式块存储以及YugabyteDB分布式SQL数据库组成。
为什么要使5 [ C C }用Lonj 5 y ; A u Oghorn和YugabyteDB?
YugabyteDB作为StatefulSet部署在Kubernetes上,并且需要持久存储。Longhorn可用于备G f & 0 / @ _ [份YugabyteDB本地磁盘,从而允许配置大规模持久卷。将Longhorn和YugabyteDB结合使用,有以下好处:
- 不必管理本地磁盘——它们由LongA d [ [ Yhorn进行管理
- Longhorn和YugabyteDB可以配置大规模的持久卷
- Longhorn和YugabyteDB都支持多云部署,可以帮助企业避免云厂商锁定
此外,Longhorn可以在一个地理区域内进行同步复制。如果YugabyteDB跨区域进行部署并且其中任意一个区域中的节点发生故障,那么YugabyteDB只能使用来自另一区域的数据重建该节点,这会产生跨区域流量。而这会导致成本更改,并且会降低所恢复的性能。而将Longhorn与Yug1 C ` j f rabytp ! 2 | }eDB结合使用,你可以无缝地重建该节点,因为Longhorn会在该区域内进行本地复制。这意味着YugabyteDB最终不必从另一个区域复制数据,进而降低了c z k b | R T j成本并提升了性能。在此部署设置中,如果整个区域发生故障,Yug~ c JabA W y ~ S ~ F z yteDB仅需执行一个跨区域节点重建。
前期准备
我们将在已经使用了Longhorn的Google Kubernetes集群上运行Yugabyte( 5 XDB集群:
- YugabyteDB(使用Helm Chart)-版本2.1.2https://docs.yugabyte.com/latest/quick-start/install/macos/
- Rancher(使用Docker Run)-版本2.4
- Longhorn(使用Rancher UI)-版本0.8.0
- 一个Goo| e h p A Hgle Cloud Platform账号 ) @ & ~ ) 2 s
在谷歌云平台上设置一个K8S集群和Rancher
Rancher是一个开源的企业级Kubernetes管理平台。它使得Run Kubernetes Everywq R n H S F Jhere更为轻松和简单,满足IT人员的需求并增强DevOps团队的能力。
Ram 8 I Tncher需要64位的UbuZ X I = y + N e Wntu16.04Y S $ 5或1k T ; #8.04和至少4GB内存的Linux主机。在此示例中,我们将使用% r = . 3 % y y安装在GCP VM实例上的Rancher UI设置Gof ) G S j S n pogle Kubernetes Engine(GKE)集群。
使用R^ K A j f C Iana V k L + y f ^ !cher在GJ [ : k M Y W / bCP上设置Kubernetes集群所需的步骤N - # q A 0 F s 8包括:
- 在GCP中n 0 ^ & w 1 v创建一个具有所需N ; ^IAM角色的Service Account
- 创建一个运行Ubuntu 18.04的VM实例
- 在VM实例上安装Rancher
- 生成一个Service Account密钥
- 通过Rancher UI设置GKE集群
创建一个Service Account和VD C ] q M z } m ?M实例
首先,我们需要创建一个附加到GCP项目的Servp R S 1 ) B p zice Account。要完成此操作,访问路径是:【IAM & admin > Service accounts: ; o # l W y】
选择Q 7 ( ) ( ! 1 I【Create New Service Account】,给其命名并点击【Create】。
接下来[ 5 8 & C ] A,我们需要添加所需的角色到Service Acco+ / $ { Q U sunt以便能够使用Rancher设置Kubernetes集群。添加下面显示的角色并创建Service Accr + d 2ount。
角色添加完成之后,点击【Continue and Dod Z z - 8 Une】。
现在我们需要创建一个Ubuntu VM实例,它将会被托管在GCP上。执行路径为:【Compute Engine > VM Instances > Create New Instance】
出于本次demo的目的,我选择了n1-standard-2机器类q L &型。选择Ubuntuz x H M k = p镜像,需要点击【Boot Disk > Change】并且在操作系统的选项中选择Ubuntu,版本选择Ubuntu 18.04 LTS。
需要检查一下是否允许HTTPS流量,检查路径为【7 + ( = ^ h { cFirewall > Allow HTTPe K ` ) ! bS traffic】
使用以上设置创建VM实{ Y z a : y例仅需几分钟。创建完成后,使用SSH连接到VM。在将terminal连接到VM的情况i C s } z ? {下,下一步是通过执行以下命令来安装R. L t n { I J ^ Xancher:
$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 ranche. n h * .r/rancher
注意:如果没有找到Docker,6 a X 3 ; 3 { V请按照以下说明在Ubuntu VM上安装它:
https://www.digitalocean.com/cL H Y * nommunity/tutori! ? Hals/how-to-instaq ~ ll-and-use-docker-} j 3 ; *on-ubuntu-18-04
创建GKE集群
要访问Rx ! a { z ) cancher server UI并创建登录名,请打开浏览器并3 , $ [ ] + ^ K转到安装它的IP地址。
例如:https://r t } G<external-ip>/login
注意:如果你在尝试访问Rancher UI时遇到任何问题,请尝E / O o O x c试使用Chrome Incognito模式加载页面或禁A ? [ 1用浏览器缓存。
按照提示创建一个新帐户。
创建帐户后,请转到https://<exter6 @ mnal-ipO V ; ` 3 | W 0>/g/clusters。然后单击【Add Cluster】以创建GKE集群。
选择Gv N C 4 bKE并给集群命名。
现在我们需要从之前创建的GCP SerE . wvice Account中添加私钥。可以在【IAM &am@ / % @ f j @ ? (p; admin > Service Accounts > Create Key】下找到。
这将生成一个包含私钥详细信息的JSON文件。
复制JSON文件的内容到Rancher UI中的Service Account部分并单击I ~ 5 S O A l ] 0【Next】。
考虑到本教程的目的,我选i 6 m $ ] $择了n1-standard-4机器类型,打开了【Node Pool Auto[ W :scaling】,并将最大节点数设置为24。单击【Create】。
通过确保将集群的状态设置为Active来验证是否已创建集群。请耐心等待,这将需要几分钟的时间。
还可以通过转到【KubernetY ) h y ! i c E $es Engine>Clusters】从GCP项目访问该集群。
在GKE上安N $ ? _ |装Longhorn
Rac { &ncher安装完成v ( z = e @ S u q后,我们可以使用其UI来在GKE集群上安装和设置Lonl m T x 6ghorn。
单击该集群,% K 9 5 ! K在本例中为longhorn-A Q idemo,然后选择【SystemG j x ; 5】。
接下来点击( 3 U t L # p【Apps>Launch】,搜索Longhorn,并点击D | ] A 7该卡片。
给deployment命名,也可以使用默认名称,然后点击【Launch】。安装完成后,你可以通过点击/index.html链接来访问Longhorn UI。
验证是否已安装Longhorh _ in,并且GKV = D D J I G b #E集群节点是否可见。
使用Helm在GKE集群U 5 P L L G E b Z上安2 i i H U r装YugabyteDB
下一步是在GKE集群上安装YugabyteDB。可以通过执行以下9 : I链接中的步骤来完- y 2 + Y成:
https://docs.yugabyte.com/latest/depO = e [ x m M Rloy/kubernetes/helmL , ; u R p-chart/
以下将概述这些步骤:
验证并升级Helm
首先,通过使用Helm版本命令来检查Helm是否已经安装:
$$ k ^ helm version
Client: &} ~ :verq % D z ^ J 5 t ision.Version0 a X 0{SemVer:\"v2.14.1\", GitCommit:\"5270352a09c7e8bf 4 z T H p :6e8c9593002a73535276507c0\", GitTreeState:\"clean\"}
Error: could not fC # nind tiller
如果你遇到与Tiller相关的问题,例如上述错误,则可e h 6 G j 7 W , T以使用升级选项初始化Helm:
$ helm iV : ^ v 6 } k q }nit --upgrade --wait
$HELM_S 3 0HOME has been configured at /home/jio = a ? ; ! u mmy/.helm.
TiS E u @ bller (the Helm server-side component) has been installed? S K X 1 Y s _ M into your Kuber} % Qnetes Cluster.
Please note: by default, Tiller is deployed with an insecure \'allow unauthenticated users\' policy.
To prevent this, run `helm init` with thT O Q f . /e --tiller-tls-verify flag.
For more information on securine O O 6 z [ t J ig your installation see:o R | w r U https:v { 2 w | N//docs.heU y N [ @ q Tlm.sh/using_helm/#securing-your-X [ 5 l x + . m Fhelm-installation
根据以下文e U s &档,你应该能够使用Helm chart来安装 ^ - h c A w ZYugabyteDB:
https://docs.yugabyte.com/latest/deploy/kubernetes/single-zop T K Une/oss/helm-chart/
创建一个Service accy a O Sount
在创建集群之前,你需要有一个service account,它应该被授予集群管理员的角色。使用以下命令创建一个yugabyte-helm service account,并授予cluster-admin的集群角( 1 W j k S X = q色。
$ kubectl create -f
https://raw.githubusercontent.com/yur ~ e K r M { sgabyt N i lte/charts/master/stable/yugabyte/yugabyte-rbac.yaml
servf Z 1 & Ficeaccount/yugabyte-helm created
clusterrolebinding.rbac.authorization.k8s.io/yugabyte-helm created
初始化Y O T B l ^ `Helm
$ helm init --service-account yugabyte-helm --upgrade --wait
$HELM_HOME has been configured at /home/jimmy/.helm.
Tiller (the Helm server-side compone) V . 3 z h ^ u 2nt) has been upgraded to the curren. a ` f ] V ~ 0t verA , W Usion.
创建一个命名空间
$ kubec1 s 6tl create namespF d ) } z U q =ace yb-demo
namespace/yb-de+ v S h I S ; umo created
添加chart镜像仓库
$ helm repo add yugabytedb https://chartk N V x $ ps.yugabyte.com
\"yugabytedb\" has been added to your repositories
从镜像仓库中获取更新
$ h1 R G Aelm repo update
Hang tight while we8 L D Z k grab the latJ 2 ( P d : m :est from your chart repositories...
...Skip local chart repository
...* i } = L & GSuccI f . 4 #essfully got an update from the \"yugabytp V H -edb\" chart repository
...Successfully got an update from the \"stable\" chart repository
Update Complete.
安装YugabyteDB
我们将p } I W w I使用Helm chart来安装YugabyteDB并且将c ! ] 3使用Load Balancer公开UI端点和YSQL、Yugabyte SQ* 4 N b @ x !L API。此外,我们将在资: X } :源不足的环境中使用Helm资源选项,并指定Longhorn存储类。这将需要一Z a段时间,需要U * J耐心等待。你可以在t c R I a L ( Z文档中找到关于Helm的详细说明:
https://docs.yugabyte.com/latt a q S 3 x B h lest/deploy/kubernetes/gkel F 2 & p J Q ?/helm-chart/
$ helm install yugabytedb/yugabyte --set resource., + S Z B ] 9master.requests.cpu=0.1,resource.masf qterW ) U X D.requests.meM a * R G ; Z Hmory=0.2Gi,resource.tserver.requests.cpu=0.1,resource.tservee v M r.requesh ( h G L D ~ts.memory=0.2Gi,E = n ) ?storage.master.storageClass=longhorn,st& N t 0 B G v ( $orage.tserver.storageClass=longhorn --namespace yb-demo --name yb-demo --tt V - Aimeout 1200 --U H d dwait
执行以下命令& w a ) 8 E y w }以检查YugabyteDB集群的状态:
$ helm status yb-demo
你还可以通过访问GKE的“Services & Ingress and Workloads”页面来验证是否已安装所有组件并进行通信。
你也可以通过访问端口7000上yb-masteV m , a y Z i C pr-ui服务的端点来查看管理UI中的YN D n f J u Y sugabyteDB~ s # i p o U D安装。
你还可以通过执行以下命令登录到PostgreSQL兼容的shell:
kubectl exec -n yb-demo -it yb-tserve| H M -r-0 /home/yugabyte/bin/ysqlsh -- -h yb-tserver-0.yb-tservers.yb-demo
ysqlsh (11.2-YB-2.0.12.0-b0)
Type \"helG T u x 4p\" for help.
yugabyte=#
现在,你可K * b以开始创建数据库对象和处理数据了。
使用Longhorn管理Yugaby{ T } ~tK t 9 q d HeDB volume
接下来,重] t z k新加载Lon: 3 E j ] mghorn dashboard,以验证YugabyteDB volume已正确设u f r ]置。r ; O 8 a ; 1 U jVolume的数a L . & m量现在应该处于可见状态:
单击【volume】以管理volume。各个volume应该可见。
现在可以通过] 0 - $ +选择它( D 5 L Q / 5 l们以及所需的操作7 $ ] ^来# ( 5 u 3 h管理volume。
就是它!现在,你已经可以在有Longhorn作为分布式 6 I $ k块存储的GKE上运行YugabyteDB了!
原文链 $ T接:
https://rancher.com/blog/2020/yugabyte