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

简介: 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
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4月前
|
Kubernetes Cloud Native Linux
云原生|kubernetes|kubernetes集群部署神器kubekey安装部署高可用k8s集群(半离线形式)
云原生|kubernetes|kubernetes集群部署神器kubekey安装部署高可用k8s集群(半离线形式)
112 1
|
4月前
|
Kubernetes Cloud Native Linux
云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)
云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)
62 0
|
10月前
|
容器
阿里云最新产品手册——阿里云核心产品——分布式云容器平台ACK One——ACK One GitOps简介
阿里云最新产品手册——阿里云核心产品——分布式云容器平台ACK One——ACK One GitOps简介自制脑图
87 1
|
Kubernetes 网络协议 Cloud Native
云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)(二)
云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)
457 0
|
10月前
|
容器
阿里云最新产品手册——阿里云核心产品——分布式云容器平台ACK One——ACK One GitOps优势
阿里云最新产品手册——阿里云核心产品——分布式云容器平台ACK One——ACK One GitOps优势自制脑图
85 1
|
Kubernetes Linux Docker
Kubernetes 安装部署(国内源)
Kubernetes 安装部署(国内源)
3434 1
|
Kubernetes Cloud Native Linux
云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)(一)
云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)
376 0
云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)(一)
EMQ
|
存储 JSON 安全
使用 Terraform 在 AWS 上快速部署 MQTT 集群
本文将以 MQTT 消息服务器 EMQX 为例,采用 AWS 作为公有云平台,介绍如何使用 Terraform 快速部署一个高可用的 MQTT 集群。
EMQ
206 0
使用 Terraform 在 AWS 上快速部署 MQTT 集群
|
Serverless 开发工具 数据安全/隐私保护
使用阿里云Serverless部署Heimdallr并配置群晖DSM推送
本文将从Heimdallr的部署以及群晖DSM推送的配置两个部分讲解如何使用Heimdallr作为通知网关转发群晖的通知。
643 0