12.1、基于阿里云的全面云上业务(两节)
容器服务 ACK控制台:https://cs.console.aliyun.com/?spm=5176.12818093_47.categories-n-products.dcsk.60eb16d0N97QLB#/k8s/cluster/list
容器服务Kubernetes版产品文档:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ack-cluster-overview
12.2、基于AWS的全面云上业务(两节)
一、什么是 Amazon EKS?
https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/what-is-eks.html
官方文档:https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/create-cluster.html
工作台搜索:EKS(Elastic Kubernetes Service)
二、基于AWS 创建EKS
创建:
集群配置:
集群版本选择:
配置网络相关:
配置日志记录:
选择插件:
配置选定的插件设置:
确认&创建:
集群配置
这样一个还没加入计算节点的 EKS 集群就创建完成了,下面开始配置node节点:
基础配置和node标签污点添加:
计算节点及扩展(node基础配置,缩放配置等):
子网&SSH:
eksctl命令方式创建
安装awscli:
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
配置授权:
这里使用了一台Amazon EC2来操作EKS集群,然后需要分配给这台EC2 操作EKS集群的权限:
1 通过IAM role 分配
2 通过 aws configure 配置ak、sk
$ vim ~/.aws/credentials #静态修改
$ vim ~/.aws/config #静态修改
两种方式都可以,建议使用IAM role的形式,附加到EC2上。
配置eksctl:
eksctl 是一个用于在EKS上创建和管理 Kubernetes 集群的简单命令行实用程序
$ curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
$ sudo mv /tmp/eksctl /usr/local/bin
测试安装是否成功:
$ eksctl version
注意:eksctl默认使用aws账号创建相关资源,敲每一个命令时,谨慎严行!!
创建集群步骤:
##创建集群命令行方式
$ eksctl create cluster \
--region ap-northeast-1 \
--name test-eks-zhdya \
--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
创建一个节点组:
##命令行方式创建
$ 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 <nodegroupname>
##缩放节点组并改变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.27" # 指定版本,默认为最新。注意:全局参数,创建 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: # Kubernetes 组件预留配置
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: # 导入默认公钥 (~/.ssh/id_rsa.pub)
allow: true
labels:
role: k8s-worker # 节点标签
# taints: # 污点
# feaster: "true:NoSchedule"
tags:
nodegroup-role: worker-test
preBootstrapCommands: # 节点创建后执行的命令
- "echo 'this is node 1.17' >> /usr/local/testcmd.txt"
升级集群和node节点:
官方文档:https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/launch-workers.html
-
升级集群
$ eksctl upgrade cluster --name <my-cluster> --approve
或者点击web页面升级
参考web部署方式升级
-
升级节点组
人为方式升级【思路】:$ eksctl upgrade nodegroup --name=managed-ng-1 --cluster=<k8s-name> --kubernetes-version=1.27
-
升级master节点
-
修改yaml的version字段
-
部署新的节点组
-
修改就调度组不可调度
-
修改pod的yaml差异和兼容性api-version等
-
驱逐旧调度上pod到新建节点组
-
删除旧节点组
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-name>
7.删除旧节点组
$ eksctl delete nodegroup --cluster=<k8s-name> --name=<nodegroup-name> --approve
8.集群插件升级
要更新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
标签:eksctl,node,基于,day39,--,cluster,云上,nodegroup,节点 From: https://www.cnblogs.com/pythonlx/p/17977528