本文档目的是指导用户熟悉建立Amazon EKS集群的过程,并利用AWS相关的服务和插件部署一套常见应用程序。
部署流程如下:
- 请确保您有海外AWS账号的IAM user,该用户有创建相关资源的权限。
- 可以使用默认的VPC或者创建新的VPC, 可以参考这个文档创建新的VPC。
请点击如下链接在各AWS区域创建跳板机:
在Quick create stack页面填入相应参数:
- InstanceType: 跳板机实例类型,可以保持默认参数。
- SubnetId: 跳板机所在的子网,私有子网或公有子网都可以,如果是私有子网,请确保有NAT网关或NAT实例可访问外网。
- VpcId: 跳板机所在VPC,请确保SubnetId是在VpcId所在的VPC内。
勾选 "我确认,AWS CloudFormation 可能创建 IAM 资源"
约5分钟后,CloudFormation堆栈创建完成:
-
创建eksctl config文件。在此配置文件中,node group 使用了mixed instances nodegroup,按需实例和竞价实例搭配使用。更多信息请参考此文档
cd ~ REGION=`curl -sS http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region` cat <<EOF >>eks-config.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: eks-workshop region: $REGION nodeGroups: - name: ng-1 minSize: 3 maxSize: 5 privateNetworking: true iam: attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy withAddonPolicies: autoScaler: true albIngress: true instancesDistribution: instanceTypes: ["t3.small", "t3.medium"] onDemandBaseCapacity: 0 onDemandPercentageAboveBaseCapacity: 50 spotInstancePools: 2 EOF
-
运行eksctl创建新的EKS集群:
eksctl create cluster -f ./eks-config.yaml
更多参数可参考eksctl官方文档。
所有资源创建可能需要15分钟左右。
在本部分中,您将创建一个2048小游戏来测试新集群。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.1/docs/examples/2048/2048-namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.1/docs/examples/2048/2048-deployment.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.1/docs/examples/2048/2048-service.yaml
部署 AWS ALB Ingress controller所需的RBAC Roles 和 RoleBindings:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.1/docs/examples/rbac-role.yaml
下载 AWS ALB Ingress controller YAML:
curl -sS "https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.1/docs/examples/alb-ingress-controller.yaml" > alb-ingress-controller.yaml
修改 –cluster-name 为上述步骤创建的EKS集群名字:
部署ingress controller:
kubectl apply -f alb-ingress-controller.yaml
下载ingress YAML:
curl -sS https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.1/docs/examples/2048/2048-ingress.yaml -o 2048-ingress.yaml
编辑 2048-ingress.yaml
文件, 在annotations中增加 alb.ingress.kubernetes.io/target-type: ip
. 本示例中我们将用ip mode
作为目标类型,这样ALB的流量将会直接转发到Pod上。
然后创建ingress
kubectl apply -f 2048-ingress.yaml
获取ingress资源的Address
属性:
kubectl -n 2048-game describe ing/2048-ingress
kubectl delete -f 2048-ingress.yaml
eksctl delete cluster eks-workshop --region $REGION