aws(学习笔记第二十八课) aws eks使用练习(hands on)

aws(学习笔记第二十八课)

  • 使用aws eks

学习内容:

  • 什么是aws eks
  • aws ekshands on
  • aws eks的创建application
  • ekskubernetes简介

1. 使用aws eks

  1. 什么是aws eks

    • aws eks的概念
      aws ekskubernetesaws上包装出来 的新的方式,旨在更加方便结合aws,在aws上使用 kubernetes。实际上aws eksaws上的managed service。作为执行containerserver来说,可以使用EC2或者Fargate都是可以的。
    • aws eksECS的区别
      区别在于orchestration tool‌的不同,aws eks使用的kubernetes作为orchestration tool‌,如果onpromise上使用的是kubernetes,那么同样的架构能够在aws同样使用。
      ECS使用的orchestration tool‌aws独自的,智能在aws上使用。
    • 什么是orchestration tool‌
      orchestration tool‌是指一种用于协调和管理系统资源、服务和应用程序的工具,以确保它们能够高效、可靠地运行。这种工具通常用于自动化和优化资源的分配和管理,特别是在云计算和容器化环境中。
  2. aws eks的架构
    在这里插入图片描述

  3. aws上的示例程序
    aws上提供了示例程序,能够使用练习eks
    eks的示例程序

2. aws ekshands on

  1. 环境(软件安装)准备
    • 练习用的ec2
      这里依然采用方便的cloudshell进行练习
    • aws cli的版本确认
      aws --version
      
    • 安装eksctl
      curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
      eksctl version
      
    • 安装kubectl
      如果使用cloudshell,不用安装kubectl,如果使用的EC2,那么执行下面的命令。
      curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.8/2020-09-18/bin/linux/amd64/kubectl
      chmod +x ./kubectl
      sudo mv ./kubectl /usr/local/bin
      kubectl version --client
      
  2. 对于需要的权限设定role进行作成
    • eksClusterRole的创建
      这里的role主要是赋予给eks服务足够的权利。role的名字是eksClusterRole
      保存到文件,之后使用cloudformation进行创建role的操作。
      AWSTemplateFormatVersion: '2010-09-09'
      Description: 'Amazon EKS Cluster Role'Resources:eksClusterRole:Type: 'AWS::IAM::Role'Properties:AssumeRolePolicyDocument:Version: '2012-10-17'Statement:- Effect: AllowPrincipal:Service:- eks.amazonaws.comAction:- sts:AssumeRoleManagedPolicyArns:- arn:aws:iam::aws:policy/AmazonEKSClusterPolicyOutputs:RoleArn:Description: 'The role that Amazon EKS will use to create AWS resources for Kubernetes clusters'Value: !GetAtt eksClusterRole.ArnExport:Name: !Sub '${AWS::StackName}-RoleArn'
      
    • eks-nodegroup-role的创建
      还需要创建work node的需要的权限role,这个代码由aws提供。
      -> aws work node role link
    AWSTemplateFormatVersion: "2010-09-09"Description: Amazon EKS - Node Group RoleMappings:ServicePrincipals:aws-cn:ec2: ec2.amazonaws.com.cnaws-us-gov:ec2: ec2.amazonaws.comaws:ec2: ec2.amazonaws.comResources:NodeInstanceRole:Type: "AWS::IAM::Role"Properties:AssumeRolePolicyDocument:Version: "2012-10-17"Statement:- Effect: AllowPrincipal:Service:- !FindInMap [ServicePrincipals, !Ref "AWS::Partition", ec2]Action:- "sts:AssumeRole"ManagedPolicyArns:- !Sub "arn:${AWS::Partition}:iam::aws:policy/AmazonEKSWorkerNodePolicy"- !Sub "arn:${AWS::Partition}:iam::aws:policy/AmazonEKS_CNI_Policy"- !Sub "arn:${AWS::Partition}:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"Path: /Outputs:NodeInstanceRole:Description: The node instance roleValue: !GetAtt NodeInstanceRole.Arn
    
  3. 创建eks所在的vpc
    • 使用cloudformation来创建vpc
      这个vpc的创建jsonaws提供示例代码。->eks所在的vpc示例json
      这里在subnet指定采用了hardcoding,如果不进行hardcoding发现总是提示错误,暂定对应。
      ---
      AWSTemplateFormatVersion: '2010-09-09'
      Description: 'Amazon EKS Sample VPC - Public subnets only'Parameters:VpcBlock:Type: StringDefault: 192.168.0.0/16Description: The CIDR range for the VPC. This should be a valid private (RFC 1918) CIDR range.Subnet01Block:Type: StringDefault: 192.168.64.0/18Description: CidrBlock for subnet 01 within the VPCSubnet02Block:Type: StringDefault: 192.168.128.0/18Description: CidrBlock for subnet 02 within the VPCSubnet03Block:Type: StringDefault: 192.168.192.0/18Description: CidrBlock for subnet 03 within the VPC. This is used only if the region has more than 2 AZs.Metadata:AWS::CloudFormation::Interface:ParameterGroups:-Label:default: "Worker Network Configuration"Parameters:- VpcBlock- Subnet01Block- Subnet02Block- Subnet03BlockConditions:Has2Azs:Fn::Or:- Fn::Equals:- {Ref: 'AWS::Region'}- ap-south-1- Fn::Equals:- {Ref: 'AWS::Region'}- ap-northeast-2- Fn::Equals:- {Ref: 'AWS::Region'}- ca-central-1- Fn::Equals:- {Ref: 'AWS::Region'}- cn-north-1- Fn::Equals:- {Ref: 'AWS::Region'}- sa-east-1- Fn::Equals:- {Ref: 'AWS::Region'}- us-west-1HasMoreThan2Azs:Fn::Not:- Condition: Has2AzsResources:VPC:Type: AWS::EC2::VPCProperties:CidrBlock:  !Ref VpcBlockEnableDnsSupport: trueEnableDnsHostnames: trueTags:- Key: NameValue: !Sub '${AWS::StackName}-VPC'InternetGateway:Type: "AWS::EC2::InternetGateway"VPCGatewayAttachment:Type: "AWS::EC2::VPCGatewayAttachment"Properties:InternetGatewayId: !Ref InternetGatewayVpcId: !Ref VPCRouteTable:Type: AWS::EC2::RouteTableProperties:VpcId: !Ref VPCTags:- Key: NameValue: Public Subnets- Key: NetworkValue: PublicRoute:DependsOn: VPCGatewayAttachmentType: AWS::EC2::RouteProperties:RouteTableId: !Ref RouteTableDestinationCidrBlock: 0.0.0.0/0GatewayId: !Ref InternetGatewaySubnet01:Type: AWS::EC2::SubnetMetadata:Comment: Subnet 01Properties:MapPublicIpOnLaunch: trueAvailabilityZone:  ap-northeast-1aCidrBlock:Ref: Subnet01BlockVpcId:Ref: VPCTags:- Key: NameValue: !Sub "${AWS::StackName}-Subnet01"- Key: kubernetes.io/role/elbValue: 1Subnet02:Type: AWS::EC2::SubnetMetadata:Comment: Subnet 02Properties:MapPublicIpOnLaunch: trueAvailabilityZone: ap-northeast-1cCidrBlock:Ref: Subnet02BlockVpcId:Ref: VPCTags:- Key: NameValue: !Sub "${AWS::StackName}-Subnet02"- Key: kubernetes.io/role/elbValue: 1Subnet03:Condition: HasMoreThan2AzsType: AWS::EC2::SubnetMetadata:Comment: Subnet 03Properties:MapPublicIpOnLaunch: trueAvailabilityZone:  ap-northeast-1dCidrBlock:Ref: Subnet03BlockVpcId:Ref: VPCTags:- Key: NameValue: !Sub "${AWS::StackName}-Subnet03"- Key: kubernetes.io/role/elbValue: 1Subnet01RouteTableAssociation:Type: AWS::EC2::SubnetRouteTableAssociationProperties:SubnetId: !Ref Subnet01RouteTableId: !Ref RouteTableSubnet02RouteTableAssociation:Type: AWS::EC2::SubnetRouteTableAssociationProperties:SubnetId: !Ref Subnet02RouteTableId: !Ref RouteTableSubnet03RouteTableAssociation:Condition: HasMoreThan2AzsType: AWS::EC2::SubnetRouteTableAssociationProperties:SubnetId: !Ref Subnet03RouteTableId: !Ref RouteTableControlPlaneSecurityGroup:Type: AWS::EC2::SecurityGroupProperties:GroupDescription: Cluster communication with worker nodesVpcId: !Ref VPCOutputs:SubnetIds:Description: All subnets in the VPCValue:Fn::If:- HasMoreThan2Azs- !Join [ ",", [ !Ref Subnet01, !Ref Subnet02, !Ref Subnet03 ] ]- !Join [ ",", [ !Ref Subnet01, !Ref Subnet02 ] ]SecurityGroups:Description: Security group for the cluster control plane communication with worker nodesValue: !Join [ ",", [ !Ref ControlPlaneSecurityGroup ] ]VpcId:Description: The VPC IdValue: !Ref VPC
      
  4. eks所在的vpc中创建eks cluster
    • 选择自定义配置
      注意,这里千万不要选择EKS自治模式-全新,如果选择,后面创建的work node会出现错误!在这里插入图片描述

    • 设定cluster名字和role
      这里设定eks-clusterrole选择上面创建的eksClusterRole
      在这里插入图片描述

    • 设置IAM角色
      这里设置administor的权限,ec-role
      在这里插入图片描述

    • ec2-role的权限设定
      在这里插入图片描述

    • 设置vpc
      这里设置前面已经创建的vpc
      在这里插入图片描述

    • 集群端点访问设定
      这里设置成public
      在这里插入图片描述

    • 等待cluster创建
      这里大概要等待10分钟
      在这里插入图片描述

  5. eks所在的cluster中创建kubeconfig
    • 作成kubeconfig文件
      如果不做成kubeconfig文件,无法访问eks cluster
      aws eks --region ap-northeast-1 update-kubeconfig --name eks-cluster
      
      在这里插入图片描述
  6. 尝试链接eks所在的cluster
    • 链接测试
      kubectl get svc
      
      在这里插入图片描述
  7. 作成eks cluster中的work node
    • 启动work node group
      在这里插入图片描述
    • 这是work node group的名字和IAM role
      这里设定的role就是前面创建的role。名字设置为work-node-group
      在这里插入图片描述
    • 设定ec2 type,节点数和磁盘大小
      在这里插入图片描述
    • 等待work node group创建,这里需要5分钟
      在这里插入图片描述
    • 检查ec2
      可以看到这里作成了三个ec2 instances
      在这里插入图片描述

3. aws eks的创建application

  1. 部署redis数据库

    • 使用下面的github上的官方sample程序
      redis-master-controller
      git clone https://github.com/kubernetes/examples.git
      cd examples/guestbook-go
      
    • 之后进入example文件夹,启动redis controller
      kubectl apply -f redis-master-controller.yaml
      
      在这里插入图片描述
    • 启动redis service
      kubectl apply -f redis-master-service.yaml
      
      在这里插入图片描述
  2. 部署guest-book服务

    1. 启动guest-book
      kubectl apply -f guestbook-controller.yaml
      kubectl apply -f guestbook-service.yaml
      
    2. 确定external ip
      kubectl get pod,svc -o wide
      
      这里看出external ip没有已经成功。
      [cloudshell-user@ip-10-132-94-203 guestbook-go]$ kubectl get pod,svc -o wide
      NAME                     READY   STATUS    RESTARTS   AGE   IP                NODE                                                 NOMINATED NODE   READINESS GATES
      pod/guestbook-fpcrt      1/1     Running   0          36s   192.168.140.31    ip-192-168-187-37.ap-northeast-1.compute.internal    <none>           <none>
      pod/guestbook-gm9sh      1/1     Running   0          36s   192.168.115.254   ip-192-168-101-164.ap-northeast-1.compute.internal   <none>           <none>
      pod/guestbook-l8hkb      1/1     Running   0          36s   192.168.200.226   ip-192-168-226-52.ap-northeast-1.compute.internal    <none>           <none>
      pod/redis-master-tl8wh   1/1     Running   0          70s   192.168.190.37    ip-192-168-187-37.ap-northeast-1.compute.internal    <none>           <none>NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP                                                                    PORT(S)          AGE    SELECTOR
      service/guestbook      LoadBalancer   10.100.160.68    a2a85261d601c46049d98728d4861990-1486435799.ap-northeast-1.elb.amazonaws.com   3000:30560/TCP   26s    app=guestbook
      service/kubernetes     ClusterIP      10.100.0.1       <none>                                                                         443/TCP          169m   <none>
      service/redis-master   ClusterIP      10.100.153.210   <none>                                                                         6379/TCP         49s    app=redis,role=master
      
  3. 访问guest-book服务

    http://a2a85261d601c46049d98728d4861990-1486435799.ap-northeast-1.elb.amazonaws.com:3000
    

    guest-book服务启动成功。在这里插入图片描述

4. aws ekskubernetes简介

  1. 关于 aws ekskubernetes
    EKS(Elastic Kubernetes Service)就是aws提供的managed Kubenetes服务。通过awsmanaged封装,能够便利的管理Kubenetes服务,减轻运用的负担。并且,通过awsmanaged服务,更好的利用kubenetes提供的各种resource
    Kubenetes(K8S)是Google公司开发的Borg项目为基础的OSS(Open Source Software)Kubenetes(K8S)能够对container化的应用程序进行部署(deploy),自动的scaling,并且进行管理。非常多的云(cloud)提供商的系统本身就是使用的Kubenetes
    以下是Kubenetes的整体架构。
    在这里插入图片描述

  2. 什么是Control Plain(master node)
    Control Plain(master node)就是集群cluster内部的work nodecontainer管理的节点node。在eks cluster之后存在着两种节点。

    • Control Plain(master node)
    • work node

    Control Plain(master node)保持着kubernetes中对象的状态,接受从client来的command,进行API Action的执行,进行container部署。或者,schdulerControl Plain(master node)进行动作,通知work node上的kubelet(agent)进行动作。kubelet(agent),接受Control plain(master)的指示启动container

  3. 什么是work node
    work node就是实际上就是接受Control Plain(master node) 的指示,启动containerwork node既可以选择ec2,也可以选择fargate

  4. aws eks的构成
    在这里插入图片描述

  5. 什么是工作负载workload resource
    工作负载workload resource指的是在kubenetes上执行的应用程序application。这里面包括PodReplicaSetDeploymentDaemonSetJob等资源。
    这些资源,通过kubectl命令,读取资源设定的yaml manifest文件,进行部署(deploy)。
    未完待续。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20436.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IM聊天系统架构实现

一、IM系统整体架构 二、企业级IM系统如何实现心跳与断线重连机制&#xff1b; 1、重连机制&#xff08;服务端下线&#xff09; 服务端下线&#xff0c;客户端netty可以感知到&#xff0c;在感知的方法中进行重连的操作&#xff0c;注意重连可能连接到旧的服务器继续报错&…

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)

KubeadmContainerd部署k8s(v1.28.2)集群&#xff08;非高可用版&#xff09; KubeadmContainerd部署k8s高可用版本 文章目录 KubeadmContainerd部署k8s(v1.28.2)集群&#xff08;非高可用版&#xff09;一.环境准备1.服务器准备2.环境配置3.设置主机名4.修改国内镜像源地址5.配…

HarmonyOS进程通信及原理

大家好&#xff0c;我是学徒小z&#xff0c;最近在研究鸿蒙中一些偏底层原理的内容&#xff0c;今天分析进程通信给大家&#xff0c;请用餐&#x1f60a; 文章目录 进程间通信1. 通过公共事件&#xff08;ohos.commonEventManager&#xff09;公共事件的底层原理 2. IPC Kit能…

移动通信发展史

概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通&#xff1a;成立于 2000 年…

CAS单点登录(第7版)10.多因素身份验证

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 多因素身份验证 概述 多因素身份验证 &#xff08;MFA&#xff09; 多因素身份验证&#xff08;Multifactor Authentication MFA&#xff09;是一种安全机制&#xff0c;要求用户提供两种…

#渗透测试#批量漏洞挖掘#Fastjson 1.2.24 远程命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Fastjson 1.2.24 远程命令执行漏洞综合分析…

【设计模式】 代理模式(静态代理、动态代理{JDK动态代理、JDK动态代理与CGLIB动态代理的区别})

代理模式 代理模式是一种结构型设计模式&#xff0c;它提供了一种替代访问的方法&#xff0c;即通过代理对象来间接访问目标对象。代理模式可以在不改变原始类代码的情况下&#xff0c;增加额外的功能&#xff0c;如权限控制、日志记录等。 静态代理 静态代理是指创建的或特…

动态规划

简介 动态规划最核心两步&#xff1a; 状态表示&#xff1a;dp[i]代表什么状态转移方程&#xff1a;如何利用已有的dp求解dp[i] 只要这两步搞对了&#xff0c; 就完成了动态规划的%95 剩下的就是细节问题&#xff1a; dp初始化顺序&#xff08;有时是倒序&#xff09;处理边…

【论文笔记】On Generative Agents in Recommendation

论文信息 标题&#xff1a; On Generative Agents in Recommendation 会议&#xff1a; SIGIR 24 —— CCF-A 作者&#xff1a; An Zhang, Yuxin Chen, Leheng Sheng 文章链接&#xff1a; On Generative Agents in Recommendation 代码链接&#xff1a; On Generative Agents…

【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】

需求说明 软件功能需求&#xff1a;反向代理功能&#xff08;描述&#xff1a;apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…

【深度学习】如何一步步实现SGD随机梯度下降算法

如何一步步实现SGD随机梯度下降算法 文章目录 如何一步步实现SGD随机梯度下降算法SGD随机梯度下降算法的作用MNIST_SAMPLE数据集SGD算法的七大步骤Step1. 初始化模型参数Step2. 计算预测值predictionsStep3. 计算损失lossStep4. 计算梯度gradientsStep5. 更新模型参数Step6. 重…

Flutter 3.29.0 新特性 CupertinoNavigationBar 可配置bottom属性

Flutter 3.29版本优化了开发流程并提升了性能&#xff0c;对 Impeller、Cupertino、DevTools 等进行了更新。 CupertinoNavigationBar和CupertinoSliverNavigationBar现在接受底部小部件&#xff0c;通常是搜索字段或分段控件。 例如本小节内容就是放置了一个输入框&#xff…

Vue 3最新组件解析与实践指南:提升开发效率的利器

目录 引言 一、Vue 3核心组件特性解析 1. Composition API与组件逻辑复用 2. 内置组件与生命周期优化 3. 新一代UI组件库推荐 二、高级组件开发技巧 1. 插件化架构设计 2. 跨层级组件通信 三、性能优化实战 1. 惰性计算与缓存策略 2. 虚拟滚动与列表优化 3. Tree S…

数据结构----哈希表的插入与输出

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> typedef int datatype;typedef struct Node {struct Node *next;datatype data; }*Linklist;//创建节点 Linklist Create_node() {Linklist p(Linklist)malloc(sizeof(…

QT QLabel加载图片等比全屏自适应屏幕大小显示

最近在工作项目中,遇到一个需求: 1.使用QLabel显示一张图片; 2.当点击这个QLabel时,需要全屏显示;但不能改变原来的尺寸; 3.当点击放大后的QLabel时,恢复原有大小. 于是乎,就有了本篇博客,介绍如何实现这样的功能. 一、演示效果 在一个水平布局中&#xff0c;添加两个Lable用…

eNSP防火墙综合实验

一、实验拓扑 二、ip和安全区域配置 1、防火墙ip和安全区域配置 新建两个安全区域 ip配置 Client1 Client2 电信DNS 百度web-1 联通DNS 百度web-2 R2 R1 三、DNS透明代理相关配置 1、导入运营商地址库 2、新建链路接口 3、配置真实DNS服务器 4、创建虚拟DNS服务器 5、配置D…

ios苹果手机使用AScript应用程序实现UI自动化操作,非常简单的一种方式

现在要想实现ios的ui自动化还是非常简单的&#xff0c;只需要安装AScript这个自动化工具就可以了&#xff0c;而且安卓&#xff0c;iso还有windows都支持&#xff0c;非常好用。 在ios端安装之后&#xff0c;需要使用mac电脑或者windows电脑激活一下 使用Windows电脑激活​ 激…

CommonLang3-使用介绍

摘自&#xff1a;https://www.cnblogs.com/haicheng92/p/18721636 学习要带着目的&#xff0c;参照现实问题 本次目标&#xff1a; 了解 CommonsLang3 API 文档&#xff0c;找对路后以后开发直接查询 API 文档&#xff0c;摈弃盲目的百度掌握基础的字符串、日期、数值等工具…

Qt:多元素控件

目录 多元素控件介绍 QListWidget QTableWidget QTreeWidget 多元素控件介绍 多元素控件表示这个控件中包含了很多的元素&#xff0c;元素可能指的是字符串&#xff0c;也可以指的是更加复杂的数据结构、图片等等 Qt 中提供的多元素控件有: QListWidgetQListViewQTableW…

基于YOLO11深度学习的心脏超声图像间隔壁检测分割与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割、人工智能

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…