AWS EKS是一项无Master托管服务。对我们来说,AWS帮助我们托管了Master,并做了集群高可用;
PS:可以创建Fargate类型的集群,此集群类似serverless模式,任何节点不需要自己管理,仅需要部署服务,价格相对贵一些,但是避免了资源浪费,具体需要那种,自己选择;
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
$ aws configure
AWS Access Key ID [None]: xxxx
AWS Secret Access Key [None]: xxxxx
Default region name [None]: us-west-2
Default output format [None]: json
#PS: 你的 Access Key ID和Access Key需要在控制台先创建出来
执行条命令查看是否授权成功
aws s3 ls
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
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: test-cluster
region: us-west-2
nodeGroups: #非托管节点组
- name: Global #节点组名
privateNetworking: true #私有IP,不带公网
instanceType: c5.2xlarge #实例类型,多种实力类型:["c3.xlarge", "c4.xlarge"]
volumeSize: 100 #磁盘大小
desiredCapacity: 2 #需要的实例数
ssh:
publicKeyName: eks #选择的现有的密钥对名称
managedNodeGroups: #托管节点组
- name: managedworkers
labels: { role: workers }
instanceType: m5.xlarge
minSize: 5
desiredCapacity: 10
maxSize: 20
volumeSize: 80
privateNetworking: true
ssh:
publicKeyName: eks
#创建过程中可以去CloudFormation查看创建进度
dev-cluster.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: test-cluster
region: us-west-2
managedNodeGroups: #托管节点组
- name: dev-managed-workers
labels: { role: workers }
instanceType: m5.xlarge
minSize: 5
desiredCapacity: 10
maxSize: 20
volumeSize: 80
privateNetworking: true
ssh:
publicKeyName: eks
eksctl create nodegroup --config-file=./dev-cluster.yaml
#如果yaml配置文件中有多个节点组,可通过--include=${GROUP_NAME} --exclude=${GROUP_NAME} ,例如
eksctl create nodegroup --config-file=<path> --include='ng-prod-*-??' --exclude='ng-test-1-ml-a,ng-test-2-?'
查看工作负载运行在非托管节点上
kubectl get pod -n $NAMESPACE_NAME -o wide
kubectl get nodes
进行驱逐
eksctl drain nodegroup --cluster=$EKS_CLUSTER_NAME --name=$EKS_UNMANAGED_NODEGROUP_NAME
查看工作负载的情况
kubectl get pod -n $NAMESPACE_NAME -o wide 或 kubectl get pod --all-namespaces |grep -v kube-system
删除非托管节点组
eksctl delete nodegroup --cluster $EKS_CLUSTER_NAME --name $EKS_UNMANAGED_NODEGROUP_NAME
实时查看节点删除情况
kubectl get nodes -w