前置条件
相关文档
当然你需要先申请一个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相关资源调用的集群角色
注意选择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账号创建相关资源,敲每一个命令时,谨慎严行!!
相关命令
##创建集群命令行方式 # 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 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