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账号创建文档
AWS学习笔记-EKS创建and升级集群笔记_第1张图片
注意选择eks集群管理的权限,否则下一步创建集群时会无可用iam角色

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

第一页:基础信息
AWS学习笔记-EKS创建and升级集群笔记_第2张图片
AWS学习笔记-EKS创建and升级集群笔记_第3张图片
第二页,集群配置
AWS学习笔记-EKS创建and升级集群笔记_第4张图片

AWS学习笔记-EKS创建and升级集群笔记_第5张图片
第三页:附加组件选择
AWS学习笔记-EKS创建and升级集群笔记_第6张图片
第4页,总览全部配置,下一步完成创建集群
AWS学习笔记-EKS创建and升级集群笔记_第7张图片
这样一个还没加入计算节点的eks集群就创建完成了,下面开始配置node节点
第一页:基础配置和node标签污点添加
AWS学习笔记-EKS创建and升级集群笔记_第8张图片
AWS学习笔记-EKS创建and升级集群笔记_第9张图片
node基础配置,缩放配置等
AWS学习笔记-EKS创建and升级集群笔记_第10张图片
网络相关
AWS学习笔记-EKS创建and升级集群笔记_第11张图片
总览全部配置,完成创建

3.升级集群和node节点

AWS学习笔记-EKS创建and升级集群笔记_第12张图片
web操作即可
分为两步
1.先升级master(10分钟左右)
2.再升级nodegroup即可(根据pod数量变化)

4.升级默认插件
AWS学习笔记-EKS创建and升级集群笔记_第13张图片
我这里自管理集群没有资源,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=|--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 "

查看相关资源AWS学习笔记-EKS创建and升级集群笔记_第14张图片

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  --approve
2.修改yaml的version字段后 部署
# cat new-nodegroup.yaml |grep version
  version: "1.16" #指定版本 默认为最新
3.部署新的节点组
# eksctl create nodegroup --config-file=
4.修改旧节点不可调度
不可调度不影响当前pod
# kubectl cordon 

取消不可调度
# kubectl uncordon 
5.修改yaml的version字段

略…

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

6.驱逐旧调度上pod到新建节点组
# kubectl drain --ignore-daemonsets 
# kubectl drain --ignore-daemonsets 
7.删除旧节点组`
# eksctl delete nodegroup --cluster= --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

你可能感兴趣的:(AWS使用日记,aws,k8s)