K8Sアーキテクチャの説明と使用

、K8Sインフラ

1.1マスターノード:

1.APIサーバー

API ServerはRESTfulなスタイルのAPIを提供し、APIサーバーは、インタフェースK8Sクラスタです。クライアントツール

(Kublet)とクラスタ内の他の構成要素K8Sクラスタを管理するためのリソースのさまざまなスルー。

2.scheduler

スケジューラは、実行するノード上でポッドを決定する責任があります

3.Controllerマネージャー

クラスタ内のリソースの管理を担当するコントローラマネージャは、リソースが状態を期待されていることを確認します。

コントローラコントローラ疥癬は、レプリケーション・コントローラ、名前空間として、種々の構成しました

コントローラ、エンドポイントコントローラ

4.etcd

クラスタ構成情報の保存や各種ステータス情報を担います

5.podのネットワーク

ポッドの間で通信する必要があるが、ネットワークは、ポッドを展開する必要があります。一つの解決策は、フランネルです

1.2ノードのノード:

1.kublet

kubletは、エージェントのノードであるノードポッド、ポッド意志で実行した場合、スケジューラは判断し

特定の設定情報(画像、ボリューム、等)は、ノードをkublet、作成した情報内容に応じて実行kublet

、マスターの動作状態への報告

2.kubeプロキシ

KUBE-プロキシサービスは、バックエンドのポッドコンポーネントに転送され、KUBE-プロキシロードバランシングは、転送され、それはiptablesのルールによって動作しますが、バックエンドポッドへ

3.podのネットワーク

ポッドは、互いに通信する、ネットワークは、ポッドを展開する必要があります。

二、K8Sの実装プロセス

2.1 k8s 集群概述

我们现在采用的是阿里云的托管版 k8s 集群,master 节点是由阿里云进行管理,三个

worker 节点由我们自己管理,通过不同的 namespace 来隔离不同的资源。

2.2 数据库层

数据库采用的是自建的 mysql 和 mongo 主从架构。

2.3 中间件层

1.redis-cluster

我们现在有 6 套环境,redis-cluster 是可以共用的。所以 redis-cluster 放在一台 ecs 上(深圳可用 E 区 10.111.0.0/16 网段,可以于 k8s 网络互通)

2. Zookeeper

Zookeeper 作为注册中心是不能公用的,所以在每个 namespace 里面都跑了一个注册中心,各个环境不相互干扰

3. Rocketmq

Rocketmq 作为消息队列也是不能公用的,所以需要放在不通的 namespace 中。

2.4 应用层

1.usercenter

先跑了user-center,这就涉及到怎么访问公用的redis-cluster,相互隔离的zookeeper,rocketmq 的问题了。

(1) 我们首先在 private-zone 里面定义了 rediscluster1[sk.rediscluster1].mg.addr .. 的域名,然后把这个 private-zone 关联到 k8s

集群所在的 vpc 网络就可以对整个集群生效 了。

(2) zookeeper 和 rocketmq 因 为 是 隔 离 的 , 如 果 在 采 用 private-zone 的 方 式 zk.mg.addr 自能解析到一个地址,这显然是

无法满足不同的不用 namespace 需要不同的 zk.mg.addr 的。那怎么来解决这个问题呢?

答案是: serviceName

原理是这样的:

user-center 应 用 程 序 运 行 在 area-b(namespace) 中 , 首 先 会 去 读 mogu-user-center-server-dubbo.properties 的 dubbo-mg-addr, 我 们 把 area-b 中 zookeeper 的 serviceName 定义成dubbo-mg-addr,这样应用访问 serviceName 就可 以访问到 zookeeper 的 service 的 clusterip【底层是通过coreDNS来实现的】,clusterip 底层通过 iptables 规则负载均衡的 把请求调度到后端的每一个 pod。

2.hqclient

hqclient 的配置文件修改和 usercenter 同理。

3.financial-shop

Financial-shop 这个服务是需要被公网访问的,所以他的 service 需要配置成

LoadBalance 类型,然后关联阿里云的 slb 即可实现公网访问

2.5 前端层

1. Slb

Slb 所在区域是深圳可用 E 区 k8s 集群所在网络(10.111.0.0/16),slb 需要添加的后端服务器 为 financial-svc 调度池中的 node。

2. Nginx

因为 nginx(189)前端服务所在网络是经典网络,需要配置 classlink 才能与 vpc 网络互通, 配置完成后就可以通过 10.111.1.117:6223 调度到 slb,slb 再找到 financial-srv , financial-srv 在找到真正提供服务的后端 pod。至此,蘑菇的 k8s 整条链路就基本跑通了。下面就要介绍怎么通过 jenkins 在 git 上拉取代 码,编译,打包成镜像,上传到镜像仓库,滚动更新的过程。

三、k8s 的应用

3.1 更新应用

    1. 更新应用主要是在 git 上拉取代码,编译,编译后的代码打包成镜像,镜像上传到阿里云的远程镜像仓库

    2.重置 deployment yaml 文件里面的 image,更新 service 后端 pod。

主要说明:

1.根据 Dockerfile 打包编译好的代码成镜像

docker build -t registry.cn-shenzhen.aliyuncs.com/moguyun/mogutest-b:${tag} . --no-cache

2.把打包好的镜像 push 到远程镜像仓库

docker push registry.cn-shenzhen.aliyuncs.com/moguyun/mogutest-b:${tag}

3. 通过 kubectl set image 修改 deployment 里面的镜像

kubectl set image deployment/${deploymentName}-dpm ${deploymentName}-dpm=registry-vpc.cn-shenzhen.aliyuncs.com/moguyun/mogutest-b:${tag} -n area-b

4. Jenkins 更新地址

https://jenkins.moguyun.com/view/%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A

2%83/job/Test-B%E7%8E%AF%E5%A2%83-119.23.135.6-K8S/

3.2 回滚应用

1. 回滚应用原理是通过切换不同的 yaml 文件来回滚的,可以通过命令来回滚也可以通过阿里云控制台来回滚。

主要说明

1.查看 financial-dpm 这个 deployment 的发布历史

kubectl rollout history deployment financial-dpm -n area-b

2. 回滚到指定版本

kubectl rollout undo deployment user-dpm --to-revision=5 -n area-b

3. 阿里云回滚地址

https://cs.console.aliyun.com/?spm=5176.2020520101.aliyun_sidebar.daliyun_side

bar_csk.697d4df57ZKZhI#/k8s/deployment/detail/cn-shenzhen/cd868c5e9514341

21bb4a868d8194840d/area-b/financial-dpm/history

3.3 弹性扩容

弹性扩容本质是是弹性增加或减少 service 调度池中 pod 的数量。

主要说明:

1.修改 financial-dpm 后端 pod 为 5 个

kubectl scale deployment financial-dpm --replicas=5 -n area-b

2. 阿里云弹性扩容地址

https://cs.console.aliyun.com/?spm=5176.2020520101.aliyun_sidebar.daliyun_side

bar_csk.697d4df57ZKZhI#/k8s/deployment/list

3.4 日志采集

阿里云容器服务 Kubernetes 集群集成了日志服务,可在创建集群时启用日志服务,快速采集 Kubernetes 集群的容器日志

1. 创建应用时配置日志服务

2. 应用日志查看地址

https://sls.console.aliyun.com/next/project/k8s-log-c32a5e3014cc24e9180d5e25e

e366dedf/logsearch/financail-logstore

四、k8s 压测结果

4.1 服务器配置

 

 

服务器 

 数量

 服务器配置

部署应用

WEB接入 服务器(ECS)

1

OS:Centos7.3 64bit

CPU:4核

内存:16GB

硬盘:60GB

nginx

配置弹性流量带宽,最大100MB

负载均衡slb服务器

1

简约型I (slb.s1.small)

该规格最大可以支持连接数: 5000,新建连接数 (CPS): 3000,每秒查询数 (QPS): 1000

Web应用服务器(容器组)

2

OS:Centos7.3 64bit

CPU:4核

内存:8GB

硬盘:80GB

financial-shop-server 蘑菇小店接口(容器Tomcat)

 

中间件服务(ECS)

1

OS:Centos7.3 64bit

CPU:2核

内存:4GB

硬盘:80GB

Redis-Cluster

中间件服务(容器组)

2

OS:Centos7.6 64bit

CPU:2核

内存:512M

硬盘:80GB

Zookeeper

MQ-Namesrv 消息服务Namesrv

MQ-Broker 消息服务Broker

 

MongoDB(ECS)

1

CPU:4核

内存:16GB

硬盘:200GB

自建MongoDB 3.4版

Mysql(ECS)

1

CPU:4核

内存:16GB

硬盘:200GB

自建 mysql 5.6版

4.2 测试报告

1.查找客户接口在 31000RPS,122181 总请求的压力下,平均响应时间为 185.89ms,出错

率为 1.75%,平均流量为 326.04KB。所以查找用户接口的处理能力为 8000RPS。

 

2.小店首页接口在 5 分钟、1000RPS、108595 请求的压力下,平均响应时间为 86.49ms,

出错率为 0.01%,平均流量为 209.50KB。所以查找用户接口的处理能力为 1000RPS。

4.3 压测过程

1. 查找客户接口

(1)小店压测需要拿到登录信息,所以需要先访问一个登录接口,拿到用户 cookie,然后拿到这个 cookie 去压测

https://hx168test.moguyun.com/financial-shop-server/intf/h5/userv3/login?mobil

e=13000000000&pwd=a111111&ignoreCsrfToken=1

(2)查找用户接口 url

https://hx168test.moguyun.com/financial-shop-server/intf/h5/shopuser/queryUse

rs?v=1563440531865&pageNo=1&pageSize=10&nickname=&tags=&orderType

=1&ignoreCsrfToken=1

2. 小店首页接口

(1) 小店首页接口 url

https://hx168test.moguyun.com/financial-shop-server/intf/h5/shop/queryShopCo

mponentsByPage?v=1563450528141&type=1&pageNo=1&pageSize=10¬Sho

wActivity=&ignoreCsrfToken=1

发布了161 篇原创文章 · 获赞 40 · 访问量 12万+

おすすめ

転載: blog.csdn.net/qq_36441027/article/details/101206363
おすすめ