EKS 训练营-样例微服务(2)

介绍

我们要部署的样例微服务架构如下图所示(包括一个前端和两个后端合计三个服务,前端使用负载均衡器做分发):

image-20210521140834610

下载样例清单

cd ~/environment
git clone https://github.com/brentley/ecsdemo-frontend.git
git clone https://github.com/brentley/ecsdemo-nodejs.git
git clone https://github.com/brentley/ecsdemo-crystal.git

部署

部署NodeJS后端组件

通过如下方式部署后端 NodeJS 组件

cd ~/environment/ecsdemo-nodejs
kubectl apply -f kubernetes/deployment.yaml
kubectl apply -f kubernetes/service.yaml

kubectl get deployment ecsdemo-nodejs

约几秒钟即可Ready。

部署NodeJS后端组件


通过如下方式部署后端 NodeJS 组件

cd ~/environment/ecsdemo-nodejs
kubectl apply -f kubernetes/deployment.yaml
kubectl apply -f kubernetes/service.yaml

kubectl get deployment ecsdemo-nodejs

约几秒钟即可Ready。

部署Crystal后端组件


通过如下方式部署后端 Crystal 后端组件

cd ~/environment/ecsdemo-crystal
kubectl apply -f kubernetes/deployment.yaml
kubectl apply -f kubernetes/service.yaml

kubectl get deployment ecsdemo-crystal

约几秒钟即可Ready。

检查对外提供的服务内容


检查前端服务定义(此处的代码不用执行),注意此处的“LoadBalancer”表示使用 aws 的 elb 服务,如果是自己创建的话,此处可能是 ClusterIP

cat ~/environment/ecsdemo-frontend/kubernetes/service.yaml
......
apiVersion: v1
kind: Service
metadata:
  name: ecsdemo-frontend
spec:
  selector:
    app: ecsdemo-frontend
  type: LoadBalancer
  ports:
   -  protocol: TCP
      port: 80
      targetPort: 3000

确认ELB的Role


确认 ELB 的Role存在并被正确使用(没有就会创建)

aws iam get-role --role-name "AWSServiceRoleForElasticLoadBalancing" || aws iam create-service-linked-role --aws-service-name "elasticloadbalancing.amazonaws.com"

部署前端服务


现在开始部署前端服务(会注册到 aws elb 服务)

cd ~/environment/ecsdemo-frontend
kubectl apply -f kubernetes/deployment.yaml
kubectl apply -f kubernetes/service.yaml

kubectl get deployment ecsdemo-frontend

服务Ready很快,但是注册到 elb 和 dns 广播,需要一段时间,从1分钟到几分钟不等(尤其是从国内访问的时候)

wangzan:~/environment/ecsdemo-frontend (main) $ kubectl get svc
NAME               TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)        AGE
ecsdemo-crystal    ClusterIP      10.100.78.196    <none>                                                                    80/TCP         9m48s
ecsdemo-frontend   LoadBalancer   10.100.168.232   a83f2348f61054276b599d5264c5ec3c-2031264905.eu-west-1.elb.amazonaws.com   80:32382/TCP   6m14s
ecsdemo-nodejs     ClusterIP      10.100.241.113   <none>                                                                    80/TCP         10m
kube-ops-view      LoadBalancer   10.100.251.161   a441ece0dd2bf430d8cb8df6ab958ebd-6819833.eu-west-1.elb.amazonaws.com      80:30823/TCP   27h
kubernetes         ClusterIP      10.100.0.1       <none>

打开负载均衡的地址,可以看到页面是一直刷新的,因为是单 pod,所以 IP 是不变化的。

image-20210521142812190

扩容

弹性扩容后端服务


通过如下方式扩容后端的 NodeJS 和 Crystal 服务(由最开始的1个pod变成3个副本的pod)

kubectl scale deployment ecsdemo-nodejs --replicas=3
kubectl scale deployment ecsdemo-crystal --replicas=3
kubectl get deployments

扩容过程和结果(后端服务由1个pod变成了3个pod)

打开浏览器,可以看到服务依然只有3个,但是后端的IP地址其实在不停的更换(因为后端各有3个pod在提供服务)

image-20210521143228354

弹性扩容前端服务


通过如下方式扩容前端的 Rails 服务(由最开始的1个pod变成3个副本的pod)

kubectl get deployments
kubectl scale deployment ecsdemo-frontend --replicas=3
kubectl get deployments

此时,如果去浏览器页面查看,会发现前端分发的 ip 地址也会在不停的变化,因为也有3个pod在提供服务,此处不再重复截图。

清理

清理环境


当你完成整个动手实验时,可以通过如下方式删除

cd ~/environment/ecsdemo-frontend
kubectl delete -f kubernetes/service.yaml
kubectl delete -f kubernetes/deployment.yaml

cd ~/environment/ecsdemo-crystal
kubectl delete -f kubernetes/service.yaml
kubectl delete -f kubernetes/deployment.yaml

cd ~/environment/ecsdemo-nodejs
kubectl delete -f kubernetes/service.yaml
kubectl delete -f kubernetes/deployment.yaml

kubectl get pods

欢迎大家扫码关注,获取更多信息

</none
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值