前言
随着公司的逐渐发展,开拓了更加多的子项目与小程序,这些都需要进行宣传,但是管理以及部署新的应用是一个繁琐的工程,部署麻烦而且更新业务的时候非常不方面。尤其面向用户的时候,体验感很差。于是想要使用docker镜像进行部署,再通过k8s对docker镜像进行管理。借用docker和k8s官方给出的镜像,搭建一台master和一台node,能够成功搭建起kubernetes结构,并且可以成功的访问连接在master节点上的node节点,并拉取到docker容器中的Nginx镜像。
但是考虑到普通k8s的模块维护比较繁琐,维护成本较高,尤其是对于小公司。甚至出现问题我们需要解决底层问题。
EKS——最佳选择
在这种情况下,选择使用开源社区提供的发行版和各种管理工具,就成为一个并不经济的选项。对于企业来说,找到一个可以以最低心智负担接入的 Kubernetes 服务,才是最佳选择。相比于社区的众多发行版,Amazon EKS 屏蔽了 Kubernetes 底层的基础设施的部分,将 Worker 层面的工作保留给用户,既可以给予用户一定的自由,同时又可以让用户可以无痛的从传统架构切换至云原生架构上。
对于企业而言,Amazon 的 EKS 服务,无疑是一个最佳的选择。
亚马逊云科技提供了100余种产品免费套餐。其中,计算资源Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量。
https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all&trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&sc_channel=el
Amazon EKS 通过托管控制平面节点,尽可能的降低用户在维护整个集群的成本。在使用 Amazon EKS 后,企业只需要维护执行业务所需的 Worker 节点,就可以搞定整个集群的运转。剩下的工作,就交给 AWS 来完成。AWS 为用户提供了一个可以跨多个 AWS 可用区,可扩展且高度可用的控制平面,从而确保无论在什么情况下 Kubernetes API 和 etcd 服务都可以正常运转。从而确保业务的可用性。
不仅如此,Amazon EKS 还通过整合 AWS 的其他业务,诸如 Elastic Load Balancing、Amazon CloudWatch 等服务,让整个 Kubernetes 集群可以更加动态的完成业务的请求而不会崩溃。
和一般的 Kuberntes 服务相比, Amazon EKS 提供了和上游 Kubernetes 一致的 API,这意味着如果企业希望使用 Kubernetes 生态中的插件或工具,都可以直接无痛接入,从而享受到来自 Kubernetes 社区的赋能。
同时,Amazon EKS 和上游保持一致也使得 Amazon EKS 可以十分轻松的完成 Kubernetes 集群的升级。Amazon EKS 会自动将正在运行的集群更新到最新的 Kubernetes 版本,对于企业来说,无需任何关注,集群就已经完成了整体的升级,让企业的集群可以享受到 Kubernetes 的最新特性。
下面让我们开启EKS之旅吧!
https://aws.amazon.com/cn/eks/?nc2=h_ql_prod_ct_eks&trk=c9e61d5e-4432-4aa4-9c86-e210c20e7415&sc_channel=el
EKS常规操作
一、创建基础环境网络
方案一
本方案参考文档 https://baijiahao.baidu.com/s?id=1726091106781949858&wfr=spider&for=pc
创建VPC
创建InternetGateway 并关联至VPC
创建Public Subnet 的路由表
编辑路由规则,添加图中所示路由规则
创建Pubilc Subnet,两个, 选择不同的 Availability Zone,并将路由表关联为 Pubilc Route
创建NAT Gateway,选择NAT Gateway所在子网为Pubilc Subnet
创建Private Subnet 路由表,并编辑路由规则
创建Private Subnet选择不同的可用区,并关联至Private Route
至此网络环境搭建完毕,可在Pubilc subnet 和 Private Subnet 启动EC2进行测试
方案二
本方案流程参照文档https://blog.csdn.net/zhuyunier/article/details/86538525
1、登录AWS,点击服务中的VPC,打开 Amazon VPC 控制台;
2、在导航窗格中,选择 VPC 控制面板。在控制面板中,选择 Launch VPC Wizard (启动 VPC 向导);
3、选择带单个公有子网的VPC,点击选择;
4、在配置页面上的 VPC 名称字段中输入您的 VPC 的名称,并在子网名称字段中输入您的子网的名称,确认信息无误后点击创建;
5、创建成功后在VPC的列表便能看到新创建的VPC;
6、通过向导创建后的VPC,会自动创建Internet网关,并附加到创建的VPC上;同时也会自动创建路由表,将创建子网关联到路由表中,并添加一条访问外网的路由;
7、向 VPC 关联 IPv6 CIDR 块。选择您的 VPC,然后选择操作和 编辑CIDRs。选择添加 IPv6 CIDR 块后,选择关闭。
8、在导航窗格中,选择 Internet 网关。您可以通过查看 VPC 列找到与您的 VPC 连接的 Internet 网关,该列显示了 VPC 的 ID 和名称 。
9、在导航窗格中,选择 路由表。有两个路由表与 VPC 关联。选择自定义路由表 (Main 列显示 No),然后选择 Routes 选项卡以便在详细信息窗格中显示路由信息:
该表格中的第一行是本地路由,可允许 VPC 内的实例进行通信。此路由默认情况下存在于每个路由表中,您不能删除它。
第二行显示了 Amazon VPC 向导添加的路由,它允许目标为 VPC (0.0.0.0/0) 外部的 IPv4 地址的流量从子网流向 Internet 网关。
9、选择主路由表。主路由表拥有一个本地路由,但没有其他路由。
10、打开 Amazon VPC 控制台,在导航窗格中,选择子网、点击创建子网;
11、根据需要指定子网详细信息,然后选择创建;
12、选择创建好的子网,点击操作,设置修改自动分配IP设置;
13、勾选启用自动分配共有IPv4地址,点击保存;
14、打开 Amazon VPC 控制台 https://console.aws.amazon.com/vpc/。
15、在导航窗格中,选择安全组,点击Create Security Group。
16、在 Group name 字段中,输入 WebServerSG 作为安全组的名称,并提供说明。从 VPC 菜单中选择您 VPC 的 ID,确认信息无误后点击Create。
17、选择您刚刚创建的 WebServerSG 安全组 (可在 Group Name 列中查看其名称)。
18、在 Inbound Rules 选项卡上,选择 Edit,然后添加入站流量规则,以下为RDS数据库规则:
方案三
1、打开控制台点击服务,搜索 cloudformation,点击进入
2、点击创建堆栈
3、点击 Amazon S3 URL,输入 https://cf-templates-2ok3jb255bix-cn-north-1.s3.cnnorth-1.amazonaws.com.cn/amazon-eks-vpc-private-subnets-bj.yaml
4、在堆栈名称中输入 L2C-EKS,并点击下一步
5、页面拉至最下方,出现下图内容,点击下一步
6、页面拉至最下方,勾选我确认,并创建堆栈。
7、等待资源由 CREATE_IN_PROGRESS 状态变为 CREATE_COMPLETE 的状态
8、相关资源,点击服务,搜索 VPC,点击进入。会发现一个名称为 L2C-eks-VPC 的 VPC
9、点击子网,可以看到已经创建完成 2 个公有子网与 2 个私有子网
10、点击路由表,可以看到已经创建完成的一个公有路由表与 2 个私有路由表
11、点击公有路由表,可以看到已经配置好的路由规则
12、点击私有路由表,可以看到已经配置好的路由规则
13、点击安全组,可以看到已经创建好的安全组,并查看相关的入站规则,如否为如下图所
示。
14、点击服务,输入 IAM 点击进入
15、点击角色,在搜索框里输入 eks,可以看到 L2C-EKS 和 L2C-EKS-node 两个角色
二、创建 EKS 集群
1、点击服务,在搜索框中搜索 EKS,点击进入 EKS 的控制台
2、点击集群,选择创建集群
3、输入名称为 L2C-EKS,选择版本为 1.19,并选择角色为 L2C-EKS 点击下一步
4、选择刚刚创建的 L2C-eks-VPC
5、选择安全组为创建的 L2C-EKS,点击下一步
6、下滑页面在集群终端节点访问中选择私有
7、保持默认,点击下一步
8、点击创建集群,等待集群创建完毕。
9、选择选择已经创建好的集群点击配置,选择计算,点击添加节点组
10、添加名称,选择 L2C-EKS-node 点击下一步,并选择 IAM 角色
10、选择 AMI 类型为 Amzon Linux2 的镜像,实例类型选择 t3.medium,其余保持默认,点
击下一步
11、指定子网,选择创建的 4 个子网点击下一步
12、点击创建等待计算节点创建成功
三、创建堡垒机
1、点击做上角的服务按钮,选择 ec2,进入 ec2 控制台
2、在左侧菜单栏里面选择实列
3、点击右上角启动实力
4、在快速启动中,选中 Amazon Linux 2,点击选择镜像
5、选择 t2.mirco 的实例,点击下一步
6、在实例配置中选择已经创建好的 L2C-eks-VPC
7、选择一个公有子网
8、开启自动分配公有 ip,配置完成后点击下一步
9、选择默认存储设置,点击下一步
10、添加如下标签点击下一步
11、选择已经创建好的 L2C-EKS 安全组
12、点击审核与启动,在确认与上述操作无误后点击启动
13、选择创建一个新的密钥对
14、输入 L2C,并点击下载密钥对,保存好密钥对之后,点击启动实例
15、稍等一会之后我们可以看到已经创建好的实例,选中我们可以看到实例的详细信息,并复制公有 ip 地址
16、开起一个终端窗口,链接到刚才的跳板机
17、登录实例成功
18、在 aws 控制台打开 IAM 的控制台,在左侧菜单栏选择用户,点你你自己的用户
19、选择安全证书,点击创建密钥,保存相关文件
20、在已经连接好的 ec2 实例中输入 sudo -I 进入 root 权限
21、在已经连接好的 ec2 实例中输入 aws configure 命令,输入刚才已经保存的 AKSK 文件,region 填写为 cn-north-1,default output format 填写为 json
22、接着运行以下命令
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-
05/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export
PATH=$PATH:$HOME/bin
kubectl version --short –client
并看到如下图所示的输出
23、接着输入 aws eks --region cn-north-1 update-kubeconfig --name L2C-EKS
命令,连接到 eks,
24、并运行 kubectl get node 可以看到已经启动的计算节点
25、我们将我们的nginx应用部署到上面, 采用yaml的文件形式,将进行一个Namespace(命名空间)、Deployment、Service的创建
通过Nodeport的形式映射nginx服务
26、我们应用这个文件,我们可以看到这些文件被创建成功
27、我们查看刚才创建再yulong的命名空间下的 pod和service,从中我们可以看到映射关系为service的8888端口映射到了宿主机的30934
28、我们查看pod运行在哪个节点上,并对30934端口进行访问、
至此我们就完成了nginx的发布
29、为了更好的展示EKS的deployment部署模式,我们将pod调成两个
我们再次应用这个文件,看到他已经更新
接着我们查看pod的数量
我们可以设定一个期望值,希望有多少至少可用的pod运行在我们的EKS上
30、现在我们手动杀掉其中一个
然后我们再次查看发现又有一个新的pod加入到了里面
这是因为我们的期望值是两个,所以他会自动为我们自动保持两个nginx,即使把他们全部干掉也会自动生成
EKS——YYDS
创建EKS集群后,EKS会自动创建k8s的master节点,我们只需要添加 worker节点即可,就可以进行连接部署应用了。
Amazon EKS消除了这种复杂性,并交付了可供生产环境使用的架构,该架构可跨多个可用区自动运行Kubernetes管理基础架构,消除单点故障。Amazon EKS自动检测并替换不正常的节点,为管理基础架构打补丁,并且按需执行版本升级。这使得由Amazon EKS管理的Kubernetes基础架构具有弹性,即使丢失整个可用区也能正常运行。
虽然我们上面的部署流程中不足以看出EKS的独特优势,但是我们的EKS完美的让k8s运行在aws上。无需我们过多的去维护底层,只要将我们应用部署上即可,EKS的强势之处还在于:
-
高可用和自动处理可用区规划问题
EKS可跨多个可用区自动运行Kubernetes管理基础架构,消除单点故障。Amazon EKS自动检测并替换不正常的节点,为管理基础架构打补丁,并且按需执行版本升级。这使得由Amazon EKS管理的Kubernetes基础架构具有弹性,即使丢失整个可用区也能正常运行。
Amazon EKS的服务帮助你能够更好的运行托管的Kubernetes的平台。Amazon EKS上,用户可以建立一个横跨三个AZ可用区的kubernetes集群,运行你的master nodes(控制平面),提供高可用的API服务。
三个master nodes上又有不同的etcd 能够做同步,也提供了API的功能,Scheduler的功能,controller的功能,让你横跨三个AZ,稳定的运行。
利用EKS全授管的特性,你只需要自己去搭建你所需要的worker nodes工作群组即可。你不需要自建master nodes,也不再去需要关心master nodes如何解决高可用的问题。 -
企业级工作负载
EKS是为了更好的运行企业级工作负载而设计的。你可以把最核心的业务运行在AWS上,而不需要关心每日备份、管理等复杂的工作。 -
与AWS服务无缝集成
EKS 与诸如 Amazon CloudWatch、Auto Scaling 组、AWS Identity and Access Management (IAM) 和 Amazon Virtual Private Cloud (VPC) 之类的服务深度集成,为您带来监控、扩展和负载平衡应用程序的无缝体验。 -
原声Kubernetes
EKS跟上游kubernetes社区保持同步,上游kubernetes的功能完整的继承在Amazon EKS里面,为您提供kubernetes原生体验。所有在EKS里做出的功能和优化,AWS团队都会将这些内容完整的贡献到上游kubernetes社区,成为开源项目的一部分,让所有社区成员都能共享这一功能。 -
易迁移
所有标准 Kubernetes 环境上运行的应用程序均完全兼容,并可轻松迁移到 Amazon EKS。
写在最后
亚马逊云科技专为开发者们打造了多种学习平台:
- 入门资源中心:从0到1 轻松上手云服务,内容涵盖:成本管理,上手训练,开发资源。https://aws.amazon.com/cn/getting-started/?nc1=h_ls&trk=32540c74-46f0-46dc-940d-621a1efeedd0&sc_channel=el
- 架构中心:亚马逊云科技架构中心提供了云平台参考架构图表、经过审查的架构解决方案、Well-Architected 最佳实践、模式、图标等。https://aws.amazon.com/cn/architecture/?intClick=dev-center-2021_main&trk=3fa608de-d954-4355-a20a-324daa58bbeb&sc_channel=el
- 构建者库:了解亚马逊云科技如何构建和运营软件。https://aws.amazon.com/cn/builders-library/?cards-body.sort-by=item.additionalFields.sortDate&cards-body.sort-order=desc&awsf.filter-content-category=*all&awsf.filter-content-type=*all&awsf.filter-content-level=*all&trk=835e6894-d909-4691-aee1-3831428c04bd&sc_channel=el
- 用于在亚马逊云科技平台上开发和管理应用程序的工具包:https://aws.amazon.com/cn/tools/?intClick=dev-center-2021_main&trk=972c69e1-55ec-43af-a503-d458708bb645&sc_channel=el
【专属福利】
福利一:100余种产品免费套餐。其中,计算资源Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量。
https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all&trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&sc_channel=el
福利二:最新优惠大礼包,200数据与分析抵扣券,200数据与分析抵扣券,200数据与分析抵扣券,200机器学习抵扣券,200$微服务与应用开发抵扣券。
https://www.amazonaws.cn/campaign/?sc_channel=el&sc_campaign=credit-acts-ldr&sc_country=cn&sc_geo=chna&sc_category=mult&sc_outcome=field&trkCampaign=request-credit-glb-ldr&trk=f45email&trk=02faebcb-3f61-4bcb-b68e-c63f3ae33c99&sc_channel=el
福利三:解决方案CloudFormation一键部署模版库
https://aws.amazon.com/cn/quickstart/?solutions-all.sort-by=item.additionalFields.sortDate&solutions-all.sort-order=desc&awsf.filter-tech-category=*all&awsf.filter-industry=*all&awsf.filter-content-type=*all&trk=afdbbdf0-610b-4421-ac0c-a6b31f902e4b&sc_channel=el