28、Kubernetes在AWS和GCP上的部署与升级指南

Kubernetes在AWS和GCP上的部署与升级指南

1. Kubernetes在AWS EKS上的应用

1.1 使用Network Load Balancer(NLB)

EKS已开始支持使用AWS的新型L4负载均衡器Network Load Balancer(NLB)。若要使用NLB,需要添加额外的注解,示例如下:

metadata:
  name: nginx-external
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"

1.2 升级Kubernetes版本

当Kubernetes发布新版本时,EKS会及时为用户提供最新版本。以下是在EKS上升级Kubernetes版本的典型步骤:
1. 升级Kubernetes主节点 :通过AWS CLI指定EKS名称和期望的新版本,此操作大约需要30分钟完成。在此期间,通过 kubectl 访问Kubernetes API服务器可能会失败,但Pod和服务不受影响。

$ aws eks update-cluster-version --name chap10 --kubernetes-version 1.11

执行上述命令后,会返回一个更新ID,可使用该ID检查升级状态:

$ aws eks describe-update --name chap10 --update-id 09688495-4d12-4aa5-a2e8-dfafec1cee17

当状态从 InProgress 变为 Successful 时,可通过以下命令查看API服务器的新版本:

$ kubectl version --short
  1. 升级工作节点 :目前尚无AWS CLI支持,需要手动执行以下步骤:
    • 创建新的工作节点 :使用CloudFormation创建新的工作节点,并指定新的AMI版本,如 ami-0b4eb1d8782fc3aea 。可从 AWS文档 获取AMI ID列表。
    • 更新安全组 :更新新旧工作节点的安全组,以允许它们之间的网络流量。可通过AWS CLI或AWS Web控制台查找安全组ID,更多详细信息请参考 AWS文档
    • 更新ConfigMap :添加新工作节点的实例ARN,示例如下:
$ vi aws-auth-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    #
    # new version of Worker Nodes
    #
    - rolearn: arn:aws:iam::xxxxxxxxxxxx:role/chap10-v11-NodeInstanceRole-10YYF3AILTJOS
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
    #
    # old version of Worker Nodes
    #
    - rolearn: arn:aws:iam::xxxxxxxxxxxx:role/chap10-worker-NodeInstanceRole-8AFV8TB4IOXA
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
$ kubectl apply -f aws-auth-cm.yaml
- **迁移Pod**:通过`taint`和`drain`操作将旧节点上的Pod迁移到新节点:
$ kubectl taint nodes ip-10-0-2-218.ec2.internal key=value:NoSchedule
$ kubectl taint nodes ip-10-0-4-74.ec2.internal key=value:NoSchedule
$ kubectl drain ip-10-0-2-218.ec2.internal --ignore-daemonsets --delete-local-data
$ kubectl drain ip-10-0-4-74.ec2.internal --ignore-daemonsets --delete-local-data
- **移除旧节点**:从集群中移除旧节点并再次更新ConfigMap:
$ kubectl delete node ip-10-0-2-218.ec2.internal
$ kubectl delete node ip-10-0-4-74.ec2.internal
$ kubectl edit configmap aws-auth -n kube-system

1.3 AWS EKS的优缺点

  • 优点 :AWS是最流行的公共云服务,提供API以编程方式控制基础设施。EKS使在AWS上部署Kubernetes变得容易,控制平面采用高可用性设计,减轻了大量管理工作。
  • 缺点 :升级Kubernetes版本需要一定的AWS知识,涉及多个步骤和技术难度。使用ALB作为入口控制器需要额外的配置工作。

2. Google Cloud Platform(GCP)简介

2.1 GCP概述

GCP由谷歌提供,在公共云行业中越来越受欢迎。它提供了与AWS类似的概念,如VPC、Compute Engine、Persistent Disk、Load Balancing和多个托管服务。对于Kubernetes用户来说,最重要的服务是Google Kubernetes Engine(GKE),这是一个托管的Kubernetes服务,可减轻Kubernetes的安装、升级和管理工作。

2.2 GCP组件及使用

2.2.1 访问GCP

GCP提供了Web控制台和命令行界面(CLI),使用时需要Google账户。若要通过CLI控制GCP组件,需安装Cloud SDK,并通过以下命令进行配置:

$ gcloud init
2.2.2 VPC

GCP的VPC策略与AWS不同,无需为VPC设置CIDR前缀,而是直接向VPC添加子网。GCP VPC有自动和自定义两种子网模式:
- 自动模式 :使用以下命令创建自动模式的VPC,它会在每个区域创建预定义CIDR块的子网:

$ gcloud compute networks create my-auto-network --subnet-mode auto

自动模式适合初学者,但无法指定CIDR前缀,且所有区域的18个子网可能不适合某些使用场景。
- 自定义模式 :使用以下命令创建自定义模式的VPC,然后手动添加具有所需CIDR前缀的子网:

$ gcloud compute networks create my-custom-network --subnet-mode custom

添加子网示例:

$ gcloud compute networks subnets create subnet-a --network=my-custom-network --range=10.0.1.0/24 --region=us-west1
$ gcloud compute networks subnets create subnet-b --network=my-custom-network --range=172.16.1.0/24 --region=us-east1
$ gcloud compute networks subnets create subnet-c --network=my-custom-network --range=192.168.1.0/24 --region=asia-northeast1
2.2.3 子网

GCP的子网跨区域的多个可用区,创建子网时需指定整个区域。与AWS不同,GCP没有明显的公共和私有子网概念,所有子网都有通往互联网网关的路由。GCP使用网络标签进行主机级别的访问控制,以确保网络安全。

2.2.4 防火墙规则

GCP的防火墙规则比AWS的安全组更简单灵活。防火墙规则和VM实例通过网络标签松散耦合,以下是创建防火墙规则的示例:

$ gcloud compute firewall-rules create public-ssh --network=my-custom-network --allow="tcp:22" --source-ranges="0.0.0.0/0" --target-tags="public"
$ gcloud compute firewall-rules create public-http --network=my-custom-network --allow="tcp:80" --source-ranges="0.0.0.0/0" --target-tags="public"
$ gcloud compute firewall-rules create private-ssh --network=my-custom-network --allow="tcp:22" --source-tags="public" --target-tags="private"
$ gcloud compute firewall-rules create internal-icmp --network=my-custom-network --allow="icmp" --source-tags="public,private"
2.2.5 VM实例

GCP的VM实例与AWS EC2类似,可选择不同硬件配置的机器类型和操作系统。在启动VM实例之前,需要创建SSH公钥:

$ gcloud compute config-ssh

以下是在GCP上启动VM实例的示例:

$ gcloud compute instances create public-on-subnet-a --machine-type=f1-micro --network=my-custom-network --subnet=subnet-a --zone=us-west1-a --tags=public
$ gcloud compute instances create public-on-subnet-b --machine-type=f1-micro --network=my-custom-network --subnet=subnet-b --zone=us-east1-c --tags=public
$ gcloud compute instances create private-on-subnet-a --machine-type=g1-small --network=my-custom-network --subnet=subnet-a --zone=us-west1-a --tags=private

可通过以下命令查看创建的VM实例列表:

$ gcloud compute instances list

2.3 验证防火墙规则

可登录到创建的机器上验证防火墙规则是否按预期工作。首先,将SSH密钥添加到 ssh-agent

$ ssh-add ~/.ssh/google_compute_engine

然后,验证ICMP防火墙规则是否能拒绝外部流量,以及公共主机是否允许SSH连接。还可以在私有主机上安装Tomcat,并在公共主机上安装Nginx:

$ ssh 35.196.228.40 "sudo apt-get -y install nginx"
$ ssh 35.199.171.31 "sudo apt-get -y install nginx"
$ curl -I http://35.196.228.40/

2.4 GCP的优缺点

  • 优点 :GKE是托管的Kubernetes服务,可减轻管理工作。GCP的VPC和防火墙规则设计更灵活,便于网络扩展。
  • 缺点 :需要一定的GCP基础知识,如使用Cloud SDK和理解网络标签的概念。

3. 总结

本文介绍了在AWS EKS和GCP GKE上部署和管理Kubernetes的方法。AWS EKS适合熟悉AWS基础设施的用户,而GCP GKE则为用户提供了更成熟的托管Kubernetes服务。在选择时,用户应根据自身需求和技术栈进行综合考虑。

3.1 对比表格

对比项 AWS EKS GCP GKE
服务成熟度 相对较新,仍需改进 更成熟
管理难度 升级需一定AWS知识 托管服务,管理更轻松
网络灵活性 传统VPC和安全组 VPC和防火墙规则更灵活
成本 按使用量计费 按使用量计费

3.2 流程图

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A[选择云平台]:::process --> B{AWS EKS}:::process
    A --> C{GCP GKE}:::process
    B --> D[使用NLB]:::process
    B --> E[升级Kubernetes版本]:::process
    C --> F[了解GCP组件]:::process
    C --> G[使用GKE]:::process

通过以上内容,你可以根据自己的需求和技术背景,选择适合的云平台来部署和管理Kubernetes集群。在实际操作中,建议仔细阅读相关文档,并进行充分的测试。

4. AWS EKS与GCP GKE的技术细节分析

4.1 网络负载均衡器与防火墙规则对比

4.1.1 AWS EKS的NLB

在AWS EKS中,使用Network Load Balancer(NLB)需要添加特定注解。以下是详细步骤:
1. 添加注解 :在服务的元数据中添加注解,示例如下:

metadata:
  name: nginx-external
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
  1. 原理 :NLB是AWS的新型L4负载均衡器,通过注解告知Kubernetes使用该负载均衡器,实现对流量的高效分发。
4.1.2 GCP的防火墙规则

GCP的防火墙规则通过网络标签进行灵活配置。以下是创建不同类型防火墙规则的示例及原理:
- 公共主机SSH访问规则

$ gcloud compute firewall-rules create public-ssh --network=my-custom-network --allow="tcp:22" --source-ranges="0.0.0.0/0" --target-tags="public"

原理:允许任何来源的流量通过TCP 22端口访问带有“public”标签的主机。
- 公共主机HTTP访问规则

$ gcloud compute firewall-rules create public-http --network=my-custom-network --allow="tcp:80" --source-ranges="0.0.0.0/0" --target-tags="public"

原理:允许任何来源的流量通过TCP 80端口访问带有“public”标签的主机。
- 私有主机SSH访问规则

$ gcloud compute firewall-rules create private-ssh --network=my-custom-network --allow="tcp:22" --source-tags="public" --target-tags="private"

原理:允许带有“public”标签的主机通过TCP 22端口访问带有“private”标签的主机。
- 内部ICMP访问规则

$ gcloud compute firewall-rules create internal-icmp --network=my-custom-network --allow="icmp" --source-tags="public,private"

原理:允许带有“public”或“private”标签的主机之间进行ICMP通信。

4.2 Kubernetes版本升级对比

4.2.1 AWS EKS升级流程

AWS EKS升级Kubernetes版本需要分别对主节点和工作节点进行操作,具体步骤如下:
1. 升级主节点

$ aws eks update-cluster-version --name chap10 --kubernetes-version 1.11

此操作大约需要30分钟,期间通过 kubectl 访问Kubernetes API服务器可能会失败。可使用返回的更新ID检查升级状态:

$ aws eks describe-update --name chap10 --update-id 09688495-4d12-4aa5-a2e8-dfafec1cee17
  1. 升级工作节点
    • 创建新工作节点,指定新的AMI版本,如 ami-0b4eb1d8782fc3aea
    • 更新安全组,允许新旧工作节点之间的网络流量。
    • 更新ConfigMap,添加新工作节点的实例ARN:
$ vi aws-auth-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    #
    # new version of Worker Nodes
    #
    - rolearn: arn:aws:iam::xxxxxxxxxxxx:role/chap10-v11-NodeInstanceRole-10YYF3AILTJOS
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
    #
    # old version of Worker Nodes
    #
    - rolearn: arn:aws:iam::xxxxxxxxxxxx:role/chap10-worker-NodeInstanceRole-8AFV8TB4IOXA
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
$ kubectl apply -f aws-auth-cm.yaml
- 通过`taint`和`drain`操作迁移Pod:
$ kubectl taint nodes ip-10-0-2-218.ec2.internal key=value:NoSchedule
$ kubectl taint nodes ip-10-0-4-74.ec2.internal key=value:NoSchedule
$ kubectl drain ip-10-0-2-218.ec2.internal --ignore-daemonsets --delete-local-data
$ kubectl drain ip-10-0-4-74.ec2.internal --ignore-daemonsets --delete-local-data
- 移除旧节点并再次更新ConfigMap:
$ kubectl delete node ip-10-0-2-218.ec2.internal
$ kubectl delete node ip-10-0-4-74.ec2.internal
$ kubectl edit configmap aws-auth -n kube-system
4.2.2 GCP GKE升级流程

GCP GKE作为托管的Kubernetes服务,升级相对简单,通常由Google自动处理。用户只需在控制台或通过CLI发起升级请求,GKE会自动完成主节点和工作节点的升级,减少了用户的手动操作。

4.3 网络架构对比

4.3.1 AWS EKS的网络架构

AWS EKS使用传统的VPC和安全组进行网络隔离和访问控制。Pod和持久卷需要考虑可用性区域的关联性,子网分为公共子网和私有子网,分别通过互联网网关(IGW)和NAT网关进行网络访问。

4.3.2 GCP GKE的网络架构

GCP GKE的VPC和子网设计更加灵活。VPC无需设置CIDR前缀,可直接添加不同CIDR前缀的子网。子网跨区域的多个可用区,所有子网都有通往互联网网关的路由。GCP使用网络标签进行主机级别的访问控制,简化了网络管理。

5. 实际应用场景与选择建议

5.1 不同场景下的选择

应用场景 推荐平台 原因
熟悉AWS生态系统 AWS EKS 与AWS现有基础设施集成方便,可利用AWS的各种服务和工具。
需要更成熟的托管服务 GCP GKE GKE提供更自动化的管理,减少用户的管理工作量。
对网络灵活性要求高 GCP GKE GCP的VPC和防火墙规则设计更灵活,便于网络扩展和配置。
有大量EC2实例 AWS EKS 可与现有的EC2实例更好地协同工作,降低迁移成本。

5.2 选择流程图

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A[确定应用场景]:::process --> B{熟悉AWS生态}:::process
    A --> C{需要成熟托管服务}:::process
    A --> D{对网络灵活性要求高}:::process
    A --> E{有大量EC2实例}:::process
    B -- 是 --> F[选择AWS EKS]:::process
    B -- 否 --> G[继续评估]:::process
    C -- 是 --> H[选择GCP GKE]:::process
    C -- 否 --> G
    D -- 是 --> H
    D -- 否 --> G
    E -- 是 --> F
    E -- 否 --> G

6. 总结与展望

6.1 总结

本文详细介绍了在AWS EKS和GCP GKE上部署和管理Kubernetes的方法,包括网络负载均衡器、防火墙规则、Kubernetes版本升级、网络架构等方面的技术细节。通过对比分析,我们了解了两者的优缺点和适用场景。

6.2 展望

随着云计算和Kubernetes技术的不断发展,AWS EKS和GCP GKE都将不断改进和完善。未来,我们可以期待更自动化、更灵活的管理方式,以及更好的性能和安全性。在选择云平台时,用户应持续关注技术发展趋势,结合自身需求做出更明智的决策。

内容概要:本文介绍了一个基于多传感器融合的定位系统设计方案,采用GPS、里程计电子罗盘作为定位传感器,利用扩展卡尔曼滤波(EKF)算法对多源传感器数据进行融合处理,最终输出目标的滤波后位置信息,并提供了完整的Matlab代码实现。该方法有效提升了定位精度稳定性,尤其适用于存在单一传感器误差或信号丢失的复杂环境,如自动驾驶、移动采用GPS、里程计电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)机器人导航等领域。文中详细阐述了各传感器的数据建模方式、状态转移观测方程构建,以及EKF算法的具体实现步骤,具有较强的工程实践价值。; 适合人群:具备一定Matlab编程基础,熟悉传感器原理滤波算法的高校研究生、科研人员及从事自动驾驶、机器人导航等相关领域的工程技术人员。; 使用场景及目标:①学习掌握多传感器融合的基本理论实现方法;②应用于移动机器人、无人车、无人机等系统的高精度定位导航开发;③作为EKF算法在实际工程中应用的教学案例或项目参考; 阅读建议:建议读者结合Matlab代码逐行理解算法实现过程,重点关注状态预测观测更新模块的设计逻辑,可尝试引入真实传感器数据或仿真噪声环境以验证算法鲁棒性,并进一步拓展至UKF、PF等更高级滤波算法的研究对比。
内容概要:文章围绕智能汽车新一代传感器的发展趋势,重点阐述了BEV(鸟瞰图视角)端到端感知融合架构如何成为智能驾驶感知系统的新范式。传统后融合前融合方案因信息丢失或算力需求过高难以满足高阶智驾需求,而基于Transformer的BEV融合方案通过统一坐标系下的多源传感器特征融合,在保证感知精度的同时兼顾算力可行性,显著提升复杂场景下的鲁棒性系统可靠性。此外,文章指出BEV模型落地面临大算力依赖高数据成本的挑战,提出“数据采集-模型训练-算法迭代-数据反哺”的高效数据闭环体系,通过自动化标注长尾数据反馈实现算法持续进化,降低对人工标注的依赖,提升数据利用效率。典型企业案例进一步验证了该路径的技术可行性经济价值。; 适合人群:从事汽车电子、智能驾驶感知算法研发的工程师,以及关注自动驾驶技术趋势的产品经理技术管理者;具备一定自动驾驶基础知识,希望深入了解BEV架构数据闭环机制的专业人士。; 使用场景及目标:①理解BEV+Transformer为何成为当前感知融合的主流技术路线;②掌握数据闭环在BEV模型迭代中的关键作用及其工程实现逻辑;③为智能驾驶系统架构设计、传感器选型算法优化提供决策参考; 阅读建议:本文侧重技术趋势分析系统级思考,建议结合实际项目背景阅读,重点关注BEV融合逻辑数据闭环构建方法,并可延伸研究相关企业在舱泊一体等场景的应用实践。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值