AWS学习笔记-EKS创建and升级集群笔记

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: AWS学习笔记-EKS创建and升级集群笔记

前置条件


相关文档

aws官网文档

eksctl使用文档

当然你需要先申请一个aws账号(必备:信用卡)


提前认识<<计算节点组概念>>

概念点解释:

nodegroup:节点组,是eks的node组合概念,分为自管理节点组,托管节点组,用来配置多台资源配置的节点资源方式,相关参数有:最大,最小节点数量、系统基础配额、可用区等信息,后续用来快速kuo平滑升级时,也能发挥大作用


EKS托管节点组会在web页面显示创建方式-web页面创建、命令行创建、yaml配置文件使用managedNodeGroups定义nodegroup类型

优点:适合运维能力较弱的公司团队使用,可在web页面升级,使用简单,但是自定义程度低,功能简单

自管理节点组web不显示创建方式-命令行创建时使用--managed=false参数、yaml配置文件使用nodeGroups定义nodegroup类型


yaml模板文件

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test-eks01-1-16
  region: ap-northeast-1
  version: "1.17" #指定版本 默认为最新
vpc: #加入vpc
  id: "vpc-0c5772731331faf1c"
  subnets:
    private:
      ap-northeast-1d:
        id: "subnet-09593b4fc19416371"
      ap-northeast-1a:
        id: "subnet-0e2ec95462826a769"
      ap-northeast-1c:
        id: "subnet-06d1ea445c2d75506"
  #     ap-northeast-1c:
  #         id: "subnet-07b057c0481f60720"
  #     ap-northeast-1d:
  #         id: "subnet-09ff2d8c908309b97"
  #     ap-northeast-1d:
  #         id: "subnet-049ee3fe1eed8bf97"
  clusterEndpoints: ##公网和内网访问master
    publicAccess: true
    privateAccess: true
nodeGroups: #节点组类型
  - name: test-eks01-nodegroup-1-17-2
    privateNetworking: true #node节点只有内网地址 nat网关模式上网 false 即分配公网ip 
    instanceType: t3.medium #实例类型
    minSize: 1
    maxSize: 3
    desiredCapacity: 1
    kubeletExtraConfig: #节点压力驱逐配置
      kubeReserved: #kubenernetes组件 预留配置
        cpu: "300m"
        memory: "300Mi"
        ephemeral-storage: "1Gi"
      kubeReservedCgroup: "/kube-reserved"
      systemReserved: #系统组件预留配置
        cpu: "300m"
        memory: "300Mi"
        ephemeral-storage: "1Gi"
      evictionHard: #硬驱逐条件
        memory.available:  "200Mi"
        nodefs.available: "10%"
      featureGates: 
        RotateKubeletServerCertificate: true #固定打开  或者不生效
    volumeSize: 50
    ssh: # import default public key (~/.ssh/id_rsa.pub)
      allow: true
    labels: {role: k8s-worker}
    #taints: #污点
    #  feaster: "true:NoSchedule"
    tags: #节点标签
      nodegroup-role: worker-test
    preBootstrapCommands: 
      # node节点创建后执行的命令
      - "echo 'the is node1.17' >> /usr/local/testcmd.txt "


创建集群方式选择


推荐使用的第二种命令行创建方式

1.AWS-Web页面创建方式(简单方便,自定义程度低,默认节点组为托管节点组)

iam权限管理很头大,我也还没玩明白,所以最后还是选择了使用命令行方式创建,集群创建需要一个,创建节点组时也需要一个


1.提前创建好一个iam for eks 集群角色,用来代替你执行AWS相关资源调用的集群角色

iam账号创建文档

注意选择eks集群管理的权限,否则下一步创建集群时会无可用iam角色


2.开始创建eks集群加入托管节点组(官网链接

第一页:基础信息


第二页,集群配置


第三页:附加组件选择

第4页,总览全部配置,下一步完成创建集群

这样一个还没加入计算节点的eks集群就创建完成了,下面开始配置node节点

第一页:基础配置和node标签污点添加

node基础配置,缩放配置等

网络相关

总览全部配置,完成创建


3.升级集群和node节点

web操作即可

分为两步

1.先升级master(10分钟左右)

2.再升级nodegroup即可(根据pod数量变化)


4.升级默认插件

我这里自管理集群没有资源,web方式的话 自己点升级就行


2.eksctl命令行方式创建,首先需要安装aws-cli及eksctl,然后需要配置好账号信息,使用命令创建集群等资源

第一步:aws-cli安装方法 (配置账密信息)

相关配置文件

命令行配置user-config信息 
aws configure
vim ~/.aws/credentials #静态修改
vim ~/.aws/config #静态修改


第二步:eksctl安装方法 (eks命令行管理命令)

注意:eksctl默认使用aws账号创建相关资源,敲每一个命令时,谨慎严行!!

1.创建一个简单集群步骤

相关命令

##创建集群命令行方式 
# eksctl create cluster \
--region ap-northeast-1 \
--name test-eks \
--nodegroup-name eks-workers \
--node-type m6.large \
--nodes 2 \
--nodes-min 1 \
--nodes-max 3 \
--node-volume-size=50 \
--alb-ingress-access \
--ssh-access \
--node-private-networking \
--vpc-cidr 172.0.0.0/16
##yaml配置文件方式创建
# eksctl create cluster -f cluster.yaml
##创建集群跳过创建节点组
# eksctl create cluster --config-file=<path>|--name=<k8s-name>  --without-nodegroup
##查看你的集群
# eksctl get cluster


删除集群格式化,创建集群时所有资源一键清空!!!!!!!!

eksctl delete cluster -f cluster.yaml

2.创建一个节点组

##命令行方式创建
eksctl create nodegroup \
  --cluster <my-cluster> \
  --name <al-nodes> \
  --node-type <t3.medium> \
  --nodes <3> \
  --nodes-min <1> \
  --nodes-max <4> \
  --ssh-access \
  --ssh-public-key <my-key>
##yaml文件方式部署节点组(自动部署到集群中)
eksctl create nodegroup --config-file=<path>
##查看所有节点组
eksctl get nodegroup --cluster=<k8s-name> 
##从节点中删除节点组
eksctl delete nodegroup --cluster=<k8s-name> --name=<nodegroup-name>
##缩放管理节点组(max~min之间)
eksctl scale nodegroup --cluster=<k8s-name> --nodes=3 <nodegroup-name>
##缩放节点组并改变max\min大小
eksctl scale nodegroup --cluster=test-eks01-1-16 --nodes=4 --name=test-eks01-nodegroup-1-17 [ --nodes-min=2 ] [ --nodes-max=6 ]


实例yaml文件

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test-eks01-1-16
  region: ap-northeast-1
  version: "1.17" #指定版本 默认为最新 注意:全局参数 创建nodegroup时也会使用这配置
vpc: #加入vpc
  id: "vpc-0c5772731331faf1c"
  subnets:
    private:
      ap-northeast-1d:
        id: "subnet-09593b4fc19416371"
      ap-northeast-1a:
        id: "subnet-0e2ec95462826a769"
      ap-northeast-1c:
        id: "subnet-06d1ea445c2d75506"
  #     ap-northeast-1c:
  #         id: "subnet-07b057c0481f60720"
  #     ap-northeast-1d:
  #         id: "subnet-09ff2d8c908309b97"
  #     ap-northeast-1d:
  #         id: "subnet-049ee3fe1eed8bf97"
  clusterEndpoints: ##公网和内网访问master
    publicAccess: true
    privateAccess: true
nodeGroups:
  - name: test-eks01-nodegroup-1-17-2
    privateNetworking: true #node节点只有内网地址 nat网关模式上网 
    instanceType: t3.medium
    minSize: 1
    maxSize: 3
    desiredCapacity: 1 #默认数量
    kubeletExtraConfig: #节点压力驱逐配置
      kubeReserved: #kubenernetes组件 预留配置
        cpu: "300m"
        memory: "300Mi"
        ephemeral-storage: "1Gi"
      kubeReservedCgroup: "/kube-reserved"
      systemReserved: #系统组件预留配置
        cpu: "300m"
        memory: "300Mi"
        ephemeral-storage: "1Gi"
      evictionHard: #硬驱逐条件
        memory.available:  "200Mi"
        nodefs.available: "10%"
      featureGates: 
        TaintBasedEvictions: true 
        RotateKubeletServerCertificate: true #固定打开  或者不生效
    volumeSize: 50
    ssh: # import default public key (~/.ssh/id_rsa.pub)
      allow: true
    labels: {role: k8s-worker} #节点标签
    #taints: #污点
    #  feaster: "true:NoSchedule"
    tags: 
      nodegroup-role: worker-test
    preBootstrapCommands: 
      # node节点创建后执行的命令
      - "echo 'the is node1.17' >> /usr/local/testcmd.txt "


查看相关资源


3.升级集群和node节点

参考官方文档

eksctl文档


升级集群

eksctl upgrade cluster --name <my-cluster> --approve

或者点击web页面升级参考web部署方式升级


升级节点组

升级托管节点组
eksctl upgrade nodegroup --name=managed-ng-1 --cluster=<k8s-name> --kubernetes-version=1.17


自管理节点组

人为方式升级

思路: 1.升级master节点 2.修改yaml的version字段 3.部署新的节点组 4.修改就调度组不可调度 5.修改pod的yaml差异和兼容性api-version等 6.驱逐旧调度上pod到新建节点组 7.删除旧节点组


详细部署命令


1.升级master节点

# eksctl upgrade cluster --name <my-cluster> --approve

2.修改yaml的version字段后 部署

# cat new-nodegroup.yaml |grep version
  version: "1.16" #指定版本 默认为最新

3.部署新的节点组

# eksctl create nodegroup --config-file=<path>

4.修改旧节点不可调度

不可调度不影响当前pod
# kubectl cordon <node-name>
取消不可调度
# kubectl uncordon <node-name>


5.修改yaml的version字段

略…


参考k8s官网更新日志和社区文档 yaml 格式,镜像,api-version


6.驱逐旧调度上pod到新建节点组

# kubectl drain --ignore-daemonsets <node-name1>
# kubectl drain --ignore-daemonsets <node-name2>

7.删除旧节点组`

# eksctl delete nodegroup --cluster=<k8s-name> --name=<nodegroup-name> --approve

4.自带集群插件升级

自行选择升级,其实底层为更换image版本,建议停机维护时升级,方便事故回退!!


要更新kube-proxy,请运行:
eksctl utils update-kube-proxy --cluster=<clusterName>
要更新aws-node,请运行:
eksctl utils update-aws-node --cluster=<clusterName>
要更新coredns,请运行:
eksctl utils update-coredns --cluster=<clusterName>
升级后,请务必运行kubectl get pods -n kube-system并检查所有插件 pod 是否处于就绪状态,您应该看到如下内容:
NAME                       READY   STATUS    RESTARTS   AGE
aws-node-g5ghn             1/1     Running   0          2m
aws-node-zfc9s             1/1     Running   0          2m
coredns-7bcbfc4774-g6gg8   1/1     Running   0          1m
coredns-7bcbfc4774-hftng   1/1     Running   0          1m
kube-proxy-djkp7           1/1     Running   0          3m
kube-proxy-mpdsp           1/1     Running   0          3m
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
NoSQL Cloud Native Linux
通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair
通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair
|
6月前
|
监控 Serverless 对象存储
Serverless 应用引擎常见问题之用ECI部署Traefik时设置如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
289 2
|
3月前
|
JSON 数据可视化 数据格式
【Azure 环境】中国区Azure是否可以根据资源组的模板,生成一个可视化的架构图呢?
【Azure 环境】中国区Azure是否可以根据资源组的模板,生成一个可视化的架构图呢?
【Azure 环境】中国区Azure是否可以根据资源组的模板,生成一个可视化的架构图呢?
|
3月前
|
Kubernetes 文件存储 容器
【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
|
3月前
|
存储 Linux 数据中心
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
|
4月前
|
Kubernetes API 索引
|
5月前
|
Kubernetes 前端开发 Serverless
Serverless 应用引擎产品使用合集之如何调用Kubernetes集群内服务
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
6月前
|
SQL Kubernetes 调度
【技术解析 | 实践】部署Kubernetes模式的Havenask集群
本次分享内容为havenask的kubernetes模式部署,由下面2个部分组成(部署Kubernetes模式Havenask集群、 Kubernetes模式相关问题排查),希望可以帮助大家更好了解和使用Havenask。
59736 9
|
SQL Cloud Native Go
云服务部署:AWS、Azure和GCP比较
云服务部署:AWS、Azure和GCP比较
459 0
|
Kubernetes 前端开发 NoSQL
【K8S】使用 Azure 门户部署 Azure Kubernetes 服务 (AKS) 群集
【K8S】使用 Azure 门户部署 Azure Kubernetes 服务 (AKS) 群集
409 0