aws的各种坑-乙

发现eksctl竟然提供了指定启动模版的功能,我可高兴了,仔细一看,还能指定启动模版的版本号,相当于可以用一个模版开多个节点组,每个节点组一种实例(不一定是实例类型不同,也可以是EBS不同,key不同,详细启动信息不同)

这人啊,乐翻了天之后就容易乐极生悲。光顾着看新功能没仔细对着文档咬文嚼字,傻乎乎的去指定aws定制的eks节点ami,又在高级详细信息里手动echo了一个daemon.json文件,方便指定公司内网的registry。喜滋滋的保存了然后eksctl create ng –-config-file走起

run起来一看,为毛新增的实例死活没出现在集群里?再翻了一大圈,为毛我指定的高级详细信息里的东西全没了?cloudformation里跑得好好的,但为毛实例创建好之后就是个莫名其妙的报错,然后实例就接二连三的嗝屁了?虽然嗝屁,但短时间内实例还在,仔仔细细翻了一遍,连用户数据都看过了,但是,但是,为毛有我指定的东西(比如重写docker的daemon.json),却没有aws自身加入集群向主节点注册的那一堆东西了?类似如下格式

1
2
3
4
5
6
7
8
9
10
11
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
set -ex
B64_CLUSTER_CA=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJd01Ea3dNekF5TkRReE4xb1hEVE13TURrd01UQXlORFF4TjFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTjgrCmswMlVlOFVaenVxSkp4b29oRUZnMEYvK3d6L3ZvQ1B5UktGbGV5Ulc0ektWanFzOHBHRDRacDdzcGIyaEFRamMKTFlSOEpwR2xwcUJpRDh4Q2R3eGRzVktJSlBYZHplMitXbGlJYkdPYnRCSi9qTXkyc3FSTjUwdnRpZlZQRWVidgoySDhTVyswcGdocTVvM0Z6VXBneXZ2aldKcnNub0FuVnM3eGhsdS9MQVhrN2pjSndxT01HMkdqRVdXRzBIcS92CndRV0Uwb2RsQWI4NTQyT0RRT2twaUxMUHZDRVVRY3owN2g3eU1KUW9RODZ5NW1yWFdhY0VpN2lsL0xiWTFWcnYKVGZXa3RoVDJzM3ZPa0pXakJZL2tpWEJsK1o0a2VmbktUT0ZLSFlTVHB3T2dDWlJkQTZvN29NWlliZ3IxdDMzRwpuK0R5UHFMNnU4MWxjQ1NIb0ZjQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFDbW8wTnB1ZVQ4eFpxdjgxcDZuSWlzWklQelkKcmlyQjZYNlE1R2hPcmMxMWhjZFJ5UEJVR05HZjIxYW5lN2lEcy9DQ1p5YkNESnNVUWR1anZuKzhvakVtMDZHNApyYjVUblBUTWJkQis4WkpqY0xEb1lhelFnd3R2UWhOOFd6SklGUUZGcHF3cjBoVGpVOGZTMXBmM1FJUnZyYUdBClNjakNwVmt6OG01ajh3TUdRRHdaU0hCUkJtbTh0VGo0bUNxWVNuUjNvRFVxaEVNV3ZFY2NYYi91OXNZY0V5RkgKZEtjZm5xRDBHVTVpSUZWR0Q4azVsUUhkTmp6VzBkSytZaFVkYmVxd0dxaVpMaGdBL2xwREpBbFRIcng3QUhaMgpseXdGZVJjejBRdXBiQWxwOHdnTmpzbExjdEc4TGlNMmZSOXZ5b0Y2SGsvYUgrVnM2RWFuS3VYVmpUaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
API_SERVER_URL=https://D43080B09223D14E4EEDB696D643C9B0.yl4.ap-east-1.eks.amazonaws.com
K8S_CLUSTER_DNS_IP=10.100.0.10
/etc/eks/bootstrap.sh ci --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=2,alpha.eksctl.io/cluster-name=ci,alpha.eksctl.io/nodegroup-name=9s3yxi9,eks.amazonaws.com/nodegroup-image=ami-06b66b6d7fe7589e6,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=9s3yxi9,consul-ns=ci,node-service=ci,eks.amazonaws.com/sourceLaunchTemplateId=lt-0b5aafd1997571d24' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP


--==MYBOUNDARY==--

翻来覆去各种尝试,虽然没试出个结果,倒是意外的多看了两眼cloud-init的东西,顺便了解了下mime那玩意

当然,最后只能找support,答案很简单:

note

答复:你指定的启动模版里的内容,提交创建节点组请求后,会进行一次merge动作。merge时如果你指定了ami,则不会再对高级详细信息里的内容做任何处理 我:哪怕我指定的就是你们的eks节点专用ami?只要指定了,就不会再处理高级详细信息里的内容了? 答复:yes,一定要留空。 https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/launch-templates.html#launch-template-user-data

好吧,怪我没仔细看那个链接。里面确实写了:
!!! note
使用自定义 AMI 时,Amazon EKS 不会合并任何用户数据。相反,您负责为节点提供所需的引导命令以加入集群。如果您的节点未能加入集群,Amazon EKS CreateNodegroup 和 UpdateNodegroupVersion 操作也将失败。

但是!自定义AMI,在我看来是用户自己封的AMI啊!我用你自家的AMI也算“自定义”?


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!