[{"data":1,"prerenderedAt":1688},["ShallowReactive",2],{"docs-navigation":3,"\u002Fdocs\u002Fsaving\u002Fupgrade-guides\u002Fupgrade-eks-instance-types":107},[4],{"title":5,"section":6,"to":7,"groups":8},"MilkStraw Saving","\u002Fdocs\u002Fsaving","\u002Fdocs\u002Fsaving\u002Fget-started\u002Fintroduction",[9,26,45,68,92],{"title":10,"links":11},"Get started",[12,14,18,22],{"title":13,"to":7},"Overview",{"title":15,"to":16,"icon":17},"How MilkStraw AI works","\u002Fdocs\u002Fsaving\u002Fget-started\u002Fhow-milkstraw-ai-works","IconLightBulb",{"title":19,"to":20,"icon":21},"Quickstart","\u002Fdocs\u002Fsaving\u002Fget-started\u002Fquickstart","IconPlugin1",{"title":23,"to":24,"icon":25},"Activate and track savings","\u002Fdocs\u002Fsaving\u002Fget-started\u002Factivate-savings","IconLightningBolt",{"title":27,"links":28},"Use MilkStraw AI",[29,33,37,41],{"title":30,"to":31,"icon":32},"Projects and findings","\u002Fdocs\u002Fsaving\u002Fuse-milkstraw-ai\u002Fprojects-and-findings","IconSquareChecklist",{"title":34,"to":35,"icon":36},"Spend","\u002Fdocs\u002Fsaving\u002Fuse-milkstraw-ai\u002Fspend","IconLineChart1",{"title":38,"to":39,"icon":40},"Milkman","\u002Fdocs\u002Fsaving\u002Fuse-milkstraw-ai\u002Fmilkman","IconChatBubbles",{"title":42,"to":43,"icon":44},"MilkStraw CLI","\u002Fdocs\u002Fsaving\u002Fuse-milkstraw-ai\u002Fcli","IconConsole",{"title":46,"links":47},"Upgrade guides",[48,52,56,60,64],{"title":49,"to":50,"icon":51},"Guides overview","\u002Fdocs\u002Fsaving\u002Fupgrade-guides\u002Foverview","IconBook",{"title":53,"to":54,"icon":55},"Amazon EKS","\u002Fdocs\u002Fsaving\u002Fupgrade-guides\u002Fupgrade-eks-instance-types","IconArrowUpCircle",{"title":57,"to":58,"icon":59},"Amazon EC2 Auto Scaling","\u002Fdocs\u002Fsaving\u002Fupgrade-guides\u002Fupgrade-asg-instance-types","IconBuildingBlocks",{"title":61,"to":62,"icon":63},"Amazon EBS gp2 to gp3","\u002Fdocs\u002Fsaving\u002Fupgrade-guides\u002Fupgrade-ebs-gp2-to-gp3","IconServer1",{"title":65,"to":66,"icon":67},"AWS Elastic Beanstalk","\u002Fdocs\u002Fsaving\u002Fupgrade-guides\u002Fupgrade-elastic-beanstalk-instance-types","IconGrowth",{"title":69,"links":70},"Resources",[71,75,79,82,85,89],{"title":72,"to":73,"icon":74},"Supported services","\u002Fdocs\u002Fsaving\u002Fresources\u002Fsupported-services","IconServer",{"title":76,"to":77,"icon":78},"Security","\u002Fdocs\u002Fsaving\u002Fresources\u002Fsecurity","IconShield",{"title":80,"to":81},"Permissions","\u002Fdocs\u002Fsaving\u002Fresources\u002Fpermissions",{"title":83,"to":84},"Roles","\u002Fdocs\u002Fsaving\u002Fresources\u002Froles",{"title":86,"to":87,"icon":88},"Billing","\u002Fdocs\u002Fsaving\u002Fresources\u002Fbilling","IconBanknote2",{"title":90,"to":91},"Cancellation","\u002Fdocs\u002Fsaving\u002Fresources\u002Fcancellation",{"title":93,"links":94},"Get help",[95,99,103],{"title":96,"to":97,"icon":98},"FAQ","\u002Fdocs\u002Fsaving\u002Fget-help\u002Ffaq","IconCircleQuestionmark",{"title":100,"to":101,"icon":102},"Troubleshooting","\u002Fdocs\u002Fsaving\u002Fget-help\u002Ftroubleshooting","IconHammer",{"title":104,"to":105,"icon":106},"Contact & support","\u002Fdocs\u002Fsaving\u002Fget-help\u002Fcontact","IconSupport",{"path":54,"data":108,"meta":112,"nodes":192},{"title":109,"description":110,"navigation":111},"Upgrade EC2 instance types for Amazon EKS","Step-by-step guide to upgrade EC2 instance types for an existing Amazon EKS cluster.",{"title":53,"icon":55},{"toc":113,"key":184,"source":185,"stem":186,"extension":187,"kind":188,"type":189,"partial":190,"hash":191},{"title":114,"searchDepth":115,"depth":115,"links":116},"",2,[117,120,140,162,165,181],{"id":118,"depth":115,"text":119},"before-you-start","Before you start",{"id":121,"depth":115,"text":122,"children":123},"step-1-create-a-new-node-group-with-the-target-instance-type","Step 1 · Create a new node group with the target instance type",[124,128,131,134,137],{"id":125,"depth":126,"text":127},"step-1-create-a-new-node-group-with-the-target-instance-type-_11-open-the-eks-cluster-and-add-a-node-group",3,"1.1 Open the EKS cluster and add a node group",{"id":129,"depth":126,"text":130},"step-1-create-a-new-node-group-with-the-target-instance-type-_12-basics","1.2 Basics",{"id":132,"depth":126,"text":133},"step-1-create-a-new-node-group-with-the-target-instance-type-_13-compute-configuration","1.3 Compute configuration",{"id":135,"depth":126,"text":136},"step-1-create-a-new-node-group-with-the-target-instance-type-_14-networking","1.4 Networking",{"id":138,"depth":126,"text":139},"step-1-create-a-new-node-group-with-the-target-instance-type-_15-create-and-verify-node-readiness","1.5 Create and verify node readiness",{"id":141,"depth":115,"text":142,"children":143},"step-2-move-workloads-to-the-new-node-group","Step 2 · Move workloads to the new node group",[144,147,150,153,156,159],{"id":145,"depth":126,"text":146},"step-2-move-workloads-to-the-new-node-group-using-self-managed-node-groups-instead","Using self-managed node groups instead",{"id":148,"depth":126,"text":149},"step-2-move-workloads-to-the-new-node-group-_21-taint-the-old-node-group-eks-managed-taint","2.1 Taint the old node group (EKS-managed taint)",{"id":151,"depth":126,"text":152},"step-2-move-workloads-to-the-new-node-group-_22-cordon-the-old-nodes","2.2 Cordon the old nodes",{"id":154,"depth":126,"text":155},"step-2-move-workloads-to-the-new-node-group-_23-drain-the-old-nodes","2.3 Drain the old nodes",{"id":157,"depth":126,"text":158},"step-2-move-workloads-to-the-new-node-group-_24-watch-workloads-reschedule","2.4 Watch workloads reschedule",{"id":160,"depth":126,"text":161},"step-2-move-workloads-to-the-new-node-group-_25-validate-migration","2.5 Validate migration",{"id":163,"depth":115,"text":164},"step-3-remove-the-old-node-group","Step 3 · Remove the old node group",{"id":166,"depth":115,"text":167,"children":168},"rollback-move-workloads-back-to-the-old-node-group","Rollback · Move workloads back to the old node group",[169,172,175,178],{"id":170,"depth":126,"text":171},"rollback-move-workloads-back-to-the-old-node-group-scale-the-old-node-group","Scale the old node group",{"id":173,"depth":126,"text":174},"rollback-move-workloads-back-to-the-old-node-group-pause-scheduling-on-the-new-group","Pause scheduling on the new group",{"id":176,"depth":126,"text":177},"rollback-move-workloads-back-to-the-old-node-group-re-enable-scheduling-on-the-old-group","Re-enable scheduling on the old group",{"id":179,"depth":126,"text":180},"rollback-move-workloads-back-to-the-old-node-group-drain-the-new-nodes","Drain the new nodes",{"id":182,"depth":115,"text":183},"extra-resources","Extra resources","docs\u002F2.saving\u002F3.upgrade-guides\u002F2.upgrade-eks-instance-types.md","docs","2.saving\u002F3.upgrade-guides\u002F2.upgrade-eks-instance-types",".md","document","text\u002Fmarkdown",false,"e1a46cd615482584",[193,197,210,213,216,219,350,352,354,357,360,363,391,393,396,499,501,508,669,671,676,716,718,721,727,744,749,758,769,793,795,797,800,811,817,819,826,843,845,852,907,909,912,964,967,969,972,1020,1023,1052,1055,1092,1094,1097,1120,1131,1190,1197,1199,1202,1255,1257,1259,1262,1264,1298,1303,1318,1320,1322,1325,1328,1342,1345,1347,1350,1359,1362,1373,1375,1380,1429,1432,1474,1476,1481,1530,1533,1576,1578,1584,1627,1630,1650,1653,1655,1657],[194,195,196],"p",{},"This guide walks you through upgrading EC2 instance types for an existing Amazon EKS cluster by creating a new managed node group, migrating workloads, and then tearing down the old group.",[198,199,201,202,205,206,209],"callout",{"type":200},"note","If a MilkStraw AI task sent you here, open it from your project on the ",[203,204,13],"strong",{}," page and use the instance type it recommends in the steps below. When you're done, set the task to ",[203,207,208],{},"Solved"," so MilkStraw AI can check the change.",[211,212],"hr",{},[214,215,119],"h2",{"id":118},[194,217,218],{},"Make sure:",[220,221,222,238,302,315],"ul",{},[223,224,225,226,229,230,233,234,237],"li",{},"You can log in to the AWS Console and have IAM permissions for ",[203,227,228],{},"EKS",", ",[203,231,232],{},"EC2",", and ",[203,235,236],{},"IAM",".",[223,239,240,247],{},[194,241,242,246],{},[243,244,245],"code",{},"kubectl"," is installed and configured for the correct cluster:",[248,249,252],"pre",{"language":250,"class":251},"bash","shiki shiki-themes github-light-default github-dark-default dark:github-dark-default",[243,253,255],{"class":254},"language-bash",[256,257,260,264,268,271,275,279,282,286,289,292,294,297,300],"span",{"class":258,"style":259},"line","display: inline",[256,261,263],{"style":262},"color:#953800;--shiki-dark:#FFA657","aws",[256,265,267],{"style":266},"color:#0A3069;--shiki-dark:#A5D6FF"," eks",[256,269,270],{"style":266}," update-kubeconfig",[256,272,274],{"style":273},"color:#0550AE;--shiki-dark:#79C0FF"," --region",[256,276,278],{"style":277},"color:#CF222E;--shiki-dark:#FF7B72"," \u003C",[256,280,281],{"style":266},"REGIO",[256,283,285],{"style":284},"color:#1F2328;--shiki-dark:#E6EDF3","N",[256,287,288],{"style":277},">",[256,290,291],{"style":273}," --name",[256,293,278],{"style":277},[256,295,296],{"style":266},"CLUSTER_NAM",[256,298,299],{"style":284},"E",[256,301,288],{"style":277},[223,303,304,307],{},[194,305,306],{},"You know whether your workloads require:",[220,308,309,312],{},[223,310,311],{},"GPU nodes, and\u002For",[223,313,314],{},"Spot capacity (only use Spot if you understand interruption behavior and have workloads that tolerate it).",[223,316,317,324],{},[194,318,319,320,323],{},"If you use ",[203,321,322],{},"public subnets"," for nodes:",[220,325,326,332],{},[223,327,328,331],{},[243,329,330],{},"MapPublicIpOnLaunch=true"," is set.",[223,333,334,337],{},[194,335,336],{},"Subnets have the standard EKS tags:",[220,338,339,344],{},[223,340,341],{},[243,342,343],{},"kubernetes.io\u002Fcluster\u002F\u003CCLUSTER_NAME> = shared",[223,345,346,349],{},[243,347,348],{},"kubernetes.io\u002Frole\u002Felb = 1"," (for public subnets).",[211,351],{},[214,353,122],{"id":121},[194,355,356],{},"You'll first add a new node group using the new instance type(s). This lets you migrate workloads safely before deleting the old group.",[358,359,127],"h3",{"id":125},[194,361,362],{},"In the AWS Console:",[364,365,366,375,378,385],"ol",{},[223,367,368,369,371,372,237],{},"Go to ",[203,370,53],{}," → ",[203,373,374],{},"Clusters",[223,376,377],{},"Select your cluster.",[223,379,380,381,384],{},"Open the ",[203,382,383],{},"Compute"," tab.",[223,386,387,388,237],{},"Choose ",[203,389,390],{},"Add node group",[358,392,130],{"id":129},[194,394,395],{},"Configure:",[220,397,398,425,435,456],{},[223,399,400,405,408,419],{},[194,401,402],{},[203,403,404],{},"Name",[194,406,407],{},"Use something descriptive and versioned, for example:",[248,409,411],{"language":410,"class":251},"text",[243,412,414],{"class":413},"language-text",[256,415,416],{"class":258,"style":259},[256,417,418],{},"production-core-ng-v2",[194,420,421,422,237],{},"A good pattern is: ",[243,423,424],{},"env-project-function-version",[223,426,427,432],{},[194,428,429],{},[203,430,431],{},"Node IAM role",[194,433,434],{},"Choose the role with standard EKS worker node permissions, or create one if needed.",[223,436,437,442,445],{},[194,438,439],{},[203,440,441],{},"(Optional) Launch template",[194,443,444],{},"Use a launch template if you need:",[220,446,447,450,453],{},[223,448,449],{},"Custom AMI or user data",[223,451,452],{},"Specific disk types \u002F encryption settings",[223,454,455],{},"Extra EC2-level configuration",[223,457,458,463],{},[194,459,460],{},[203,461,462],{},"(Optional) Labels \u002F Taints \u002F Tags",[220,464,465,479],{},[223,466,467,470],{},[194,468,469],{},"Example label:",[248,471,472],{"language":410,"class":251},[243,473,474],{"class":413},[256,475,476],{"class":258,"style":259},[256,477,478],{},"nodepool = new",[223,480,481,484],{},[194,482,483],{},"Example taint (useful for GPU-only workloads or to keep pods off until you're ready):",[248,485,486],{"language":410,"class":251},[243,487,488,493,494],{"class":413},[256,489,490],{"class":258,"style":259},[256,491,492],{},"key = no-scheduling","\n",[256,495,496],{"class":258,"style":259},[256,497,498],{},"effect = NoSchedule",[358,500,133],{"id":132},[194,502,503,504,507],{},"Under ",[203,505,506],{},"Compute configuration",":",[220,509,510,545,566,598,621],{},[223,511,512,517],{},[194,513,514],{},[203,515,516],{},"AMI type",[220,518,519,534],{},[223,520,521,531],{},[194,522,523,524,527,528,237],{},"General-purpose: ",[203,525,526],{},"AL2023"," or ",[203,529,530],{},"Bottlerocket",[194,532,533],{},"AWS stopped publishing EKS-optimized Amazon Linux 2 AMIs on November 26, 2025. If you're moving from Amazon Linux 2, AL2023 has different defaults; validate compatibility for your workloads.",[223,535,536,537,540,541,544],{},"GPU: ",[203,538,539],{},"AL2023 NVIDIA"," (or the ",[203,542,543],{},"Bottlerocket NVIDIA"," variant if you use Bottlerocket).",[223,546,547,552],{},[194,548,549],{},[203,550,551],{},"Capacity type",[220,553,554,560],{},[223,555,556,559],{},[203,557,558],{},"On-Demand"," for predictable capacity.",[223,561,562,565],{},[203,563,564],{},"Spot"," only if your workloads tolerate interruption and you have a proper Spot strategy.",[223,567,568,573],{},[194,569,570],{},[203,571,572],{},"Instance types",[220,574,575,589,592],{},[223,576,577,580],{},[194,578,579],{},"Example general-purpose instance:",[248,581,582],{"language":410,"class":251},[243,583,584],{"class":413},[256,585,586],{"class":258,"style":259},[256,587,588],{},"m6a.xlarge",[223,590,591],{},"If a MilkStraw AI task sent you here, use the instance type that the task recommends.",[223,593,594,595,237],{},"If the new instance type is smaller, make sure your largest pod requests still fit on one node. Pods that don't fit stay ",[243,596,597],{},"Pending",[223,599,600,605],{},[194,601,602],{},[203,603,604],{},"Disk size",[220,606,607,614],{},[223,608,609,610,613],{},"For most applications: ",[203,611,612],{},"50–100 GiB"," root volume is sufficient.",[223,615,616,617,620],{},"Increase if pods make heavy use of ",[243,618,619],{},"emptyDir"," volumes or local caching.",[223,622,623,628],{},[194,624,625],{},[203,626,627],{},"Scaling",[220,629,630,666],{},[223,631,632,644,647],{},[194,633,634,635,229,638,233,641,237],{},"Set ",[203,636,637],{},"Desired",[203,639,640],{},"Min",[203,642,643],{},"Max",[194,645,646],{},"For example:",[248,648,649],{"language":410,"class":251},[243,650,651,493,656,493,661],{"class":413},[256,652,653],{"class":258,"style":259},[256,654,655],{},"Desired capacity: 2",[256,657,658],{"class":258,"style":259},[256,659,660],{},"Min size:         1",[256,662,663],{"class":258,"style":259},[256,664,665],{},"Max size:         10",[223,667,668],{},"If you run Cluster Autoscaler, ensure these values work with your expected scale range.",[358,670,136],{"id":135},[194,672,503,673,507],{},[203,674,675],{},"Networking",[220,677,678,704],{},[223,679,680,685],{},[194,681,682],{},[203,683,684],{},"Subnets",[220,686,687,690],{},[223,688,689],{},"Select the subnets where you want worker nodes to live.",[223,691,692,695],{},[194,693,694],{},"For public subnets, confirm:",[220,696,697,701],{},[223,698,699],{},[243,700,330],{},[223,702,703],{},"Proper EKS tags as mentioned above.",[223,705,706,711],{},[194,707,708],{},[203,709,710],{},"(Optional) SSH key pair",[220,712,713],{},[223,714,715],{},"Add an SSH key only if you need direct SSH access to nodes.",[358,717,139],{"id":138},[194,719,720],{},"Create the node group and wait for nodes to join the cluster.",[194,722,723,724,507],{},"Watch nodes until they are ",[243,725,726],{},"Ready",[248,728,729],{"language":250,"class":251},[243,730,731],{"class":254},[256,732,733,735,738,741],{"class":258,"style":259},[256,734,245],{"style":262},[256,736,737],{"style":266}," get",[256,739,740],{"style":266}," nodes",[256,742,743],{"style":273}," --watch",[745,746,748],"h4",{"id":747},"step-1-create-a-new-node-group-with-the-target-instance-type-_15-create-and-verify-node-readiness-gpu-clusters","GPU clusters",[194,750,751,752,755,756,237],{},"If these are ",[203,753,754],{},"GPU nodes",", install the NVIDIA device plugin after the nodes are ",[243,757,726],{},[194,759,760,761,764,765,768],{},"In the NVIDIA ",[243,762,763],{},"k8s-device-plugin"," GitHub repo, locate the latest ",[203,766,767],{},"DaemonSet"," manifest and apply it:",[248,770,771],{"language":250,"class":251},[243,772,773],{"class":254},[256,774,775,777,780,783,785,788,791],{"class":258,"style":259},[256,776,245],{"style":262},[256,778,779],{"style":266}," apply",[256,781,782],{"style":273}," -f",[256,784,278],{"style":277},[256,786,787],{"style":266},"NVIDIA_DEVICE_PLUGIN_YAML_UR",[256,789,790],{"style":284},"L",[256,792,288],{"style":277},[211,794],{},[214,796,142],{"id":141},[194,798,799],{},"You now have both old and new node groups attached to the cluster. The goal is to:",[364,801,802,805,808],{},[223,803,804],{},"Stop new pods from landing on the old nodes.",[223,806,807],{},"Let the scheduler and Cluster Autoscaler move workloads to the new group.",[223,809,810],{},"Drain and empty the old nodes.",[194,812,813,814,237],{},"The examples below assume you're using ",[203,815,816],{},"Managed Node Groups",[358,818,146],{"id":145},[194,820,821,822,825],{},"Self-managed nodes don't have the ",[243,823,824],{},"eks.amazonaws.com\u002Fnodegroup"," label, so the steps differ:",[364,827,828,831,840],{},[223,829,830],{},"Create a new Auto Scaling group from a launch template version with the target instance type. Keep the node IAM role and the user data that joins nodes to your cluster.",[223,832,833,834,836,837,237],{},"When the new nodes are ",[243,835,726],{},", cordon and drain the old nodes. To list them, run ",[243,838,839],{},"kubectl get nodes -l node.kubernetes.io\u002Finstance-type=\u003COLD_TYPE>",[223,841,842],{},"Delete the old Auto Scaling group.",[358,844,149],{"id":148},[194,846,847,848,851],{},"First, add a taint to the old node group to prevent ",[203,849,850],{},"new pods"," from scheduling on it while existing pods continue running:",[248,853,854],{"language":250,"class":251},[243,855,856,493,868,493,883,493,899],{"class":254},[256,857,858,860,862,865],{"class":258,"style":259},[256,859,263],{"style":262},[256,861,267],{"style":266},[256,863,864],{"style":266}," update-nodegroup-config",[256,866,867],{"style":277}," \\",[256,869,870,873,875,877,879,881],{"class":258,"style":259},[256,871,872],{"style":273},"  --cluster-name",[256,874,278],{"style":277},[256,876,296],{"style":266},[256,878,299],{"style":284},[256,880,288],{"style":277},[256,882,867],{"style":277},[256,884,885,888,890,893,895,897],{"class":258,"style":259},[256,886,887],{"style":273},"  --nodegroup-name",[256,889,278],{"style":277},[256,891,892],{"style":266},"OLD_NODE_GROUP_NAM",[256,894,299],{"style":284},[256,896,288],{"style":277},[256,898,867],{"style":277},[256,900,901,904],{"class":258,"style":259},[256,902,903],{"style":273},"  --taints",[256,905,906],{"style":266}," addOrUpdateTaints='[{key=no-scheduling,effect=NO_SCHEDULE}]'",[358,908,152],{"id":151},[194,910,911],{},"Cordoning marks nodes as unschedulable at the Kubernetes level:",[248,913,914],{"language":250,"class":251},[243,915,916,493,947],{"class":254},[256,917,918,920,922,924,927,930,933,935,937,939,942,945],{"class":258,"style":259},[256,919,245],{"style":262},[256,921,737],{"style":266},[256,923,740],{"style":266},[256,925,926],{"style":273}," -l",[256,928,929],{"style":266}," eks.amazonaws.com\u002Fnodegroup=",[256,931,932],{"style":277},"\u003C",[256,934,892],{"style":266},[256,936,299],{"style":284},[256,938,288],{"style":277},[256,940,941],{"style":273}," -o",[256,943,944],{"style":266}," name",[256,946,867],{"style":277},[256,948,949,952,955,958,961],{"class":258,"style":259},[256,950,951],{"style":277},"  |",[256,953,954],{"style":262}," xargs",[256,956,957],{"style":273}," -n1",[256,959,960],{"style":266}," kubectl",[256,962,963],{"style":266}," cordon",[194,965,966],{},"New pods will no longer be placed on these nodes.",[358,968,155],{"id":154},[194,970,971],{},"Drain nodes to evict pods safely and move them to the new node group:",[248,973,974],{"language":250,"class":251},[243,975,976,493,994,493,1001,493,1008,493,1015],{"class":254},[256,977,978,980,983,985,988,990,992],{"class":258,"style":259},[256,979,245],{"style":262},[256,981,982],{"style":266}," drain",[256,984,278],{"style":277},[256,986,987],{"style":266},"OLD_NODE_NAM",[256,989,299],{"style":284},[256,991,288],{"style":277},[256,993,867],{"style":277},[256,995,996,999],{"class":258,"style":259},[256,997,998],{"style":273},"  --ignore-daemonsets",[256,1000,867],{"style":277},[256,1002,1003,1006],{"class":258,"style":259},[256,1004,1005],{"style":273},"  --delete-emptydir-data",[256,1007,867],{"style":277},[256,1009,1010,1013],{"class":258,"style":259},[256,1011,1012],{"style":273},"  --grace-period=60",[256,1014,867],{"style":277},[256,1016,1017],{"class":258,"style":259},[256,1018,1019],{"style":273},"  --timeout=10m",[194,1021,1022],{},"Flags:",[220,1024,1025,1039],{},[223,1026,1027,1032],{},[194,1028,1029],{},[243,1030,1031],{},"--ignore-daemonsets",[194,1033,1034,1035,1038],{},"DaemonSet pods are not evicted by ",[243,1036,1037],{},"drain",". They are terminated when the node is deleted.",[223,1040,1041,1046],{},[194,1042,1043],{},[243,1044,1045],{},"--delete-emptydir-data",[194,1047,1048,1049,1051],{},"Only use if pods don't rely on data inside ",[243,1050,619],{}," volumes, as that data will be lost.",[194,1053,1054],{},"Additional considerations:",[220,1056,1057,1078],{},[223,1058,1059,1064,1071],{},[194,1060,1061],{},[203,1062,1063],{},"PodDisruptionBudgets (PDBs)",[194,1065,1066,1067,1070],{},"If PDBs are strict, ",[243,1068,1069],{},"kubectl drain"," may block until disruptions are allowed.",[194,1072,1073,1074,1077],{},"You might temporarily increase ",[243,1075,1076],{},"maxUnavailable"," for smoother migrations.",[223,1079,1080,1085],{},[194,1081,1082],{},[203,1083,1084],{},"Unmanaged pods",[194,1086,1087,1088,1091],{},"If some pods are not controlled by a Deployment, ReplicaSet, or DaemonSet, you may need ",[243,1089,1090],{},"--force",". Use this carefully and only if you understand the impact.",[358,1093,158],{"id":157},[194,1095,1096],{},"Monitor pods as they are rescheduled onto the new node group:",[248,1098,1099],{"language":250,"class":251},[243,1100,1101],{"class":254},[256,1102,1103,1105,1107,1110,1113,1115,1118],{"class":258,"style":259},[256,1104,245],{"style":262},[256,1106,737],{"style":266},[256,1108,1109],{"style":266}," pods",[256,1111,1112],{"style":273}," -A",[256,1114,941],{"style":273},[256,1116,1117],{"style":266}," wide",[256,1119,743],{"style":273},[194,1121,1122,1123,1126,1127,1130],{},"If you set a label on the ",[203,1124,1125],{},"new"," node group (for example ",[243,1128,1129],{},"nodepool=new","), make sure workloads can land there:",[220,1132,1133,1187],{},[223,1134,1135,1142],{},[194,1136,1137,1138,1141],{},"Add a matching ",[243,1139,1140],{},"nodeSelector"," or node affinity to workloads that must move:",[248,1143,1145],{"language":1144,"class":251},"yaml",[243,1146,1148,493,1156,493,1163,493,1170,493,1177],{"class":1147},"language-yaml",[256,1149,1150,1154],{"class":258,"style":259},[256,1151,1153],{"style":1152},"color:#116329;--shiki-dark:#7EE787","spec",[256,1155,507],{"style":284},[256,1157,1158,1161],{"class":258,"style":259},[256,1159,1160],{"style":1152},"  template",[256,1162,507],{"style":284},[256,1164,1165,1168],{"class":258,"style":259},[256,1166,1167],{"style":1152},"    spec",[256,1169,507],{"style":284},[256,1171,1172,1175],{"class":258,"style":259},[256,1173,1174],{"style":1152},"      nodeSelector",[256,1176,507],{"style":284},[256,1178,1179,1182,1185],{"class":258,"style":259},[256,1180,1181],{"style":1152},"        nodepool",[256,1183,1184],{"style":284},": ",[256,1186,1125],{"style":266},[223,1188,1189],{},"Or skip tainting the new group so the scheduler naturally prefers it once old nodes are cordoned and drained.",[194,1191,1192,1193,1196],{},"If you run ",[203,1194,1195],{},"Cluster Autoscaler",", it should automatically scale the new node group to fit the evicted pods.",[358,1198,161],{"id":160},[194,1200,1201],{},"Confirm the migration before deleting anything:",[220,1203,1204,1234],{},[223,1205,1206,1216],{},[194,1207,1208,1209,1212,1213,507],{},"All pods are ",[243,1210,1211],{},"Running"," and scheduled on ",[203,1214,1215],{},"new nodes",[248,1217,1218],{"language":250,"class":251},[243,1219,1220],{"class":254},[256,1221,1222,1224,1226,1228,1230,1232],{"class":258,"style":259},[256,1223,245],{"style":262},[256,1225,737],{"style":266},[256,1227,1109],{"style":266},[256,1229,1112],{"style":273},[256,1231,941],{"style":273},[256,1233,1117],{"style":266},[223,1235,1236,1243],{},[194,1237,1238,1239,1242],{},"All nodes in the ",[203,1240,1241],{},"old"," node group:",[220,1244,1245,1252],{},[223,1246,1247,1248,1251],{},"Are ",[243,1249,1250],{},"SchedulingDisabled",", and",[223,1253,1254],{},"Either have no non-DaemonSet pods left or are fully drained.",[211,1256],{},[214,1258,164],{"id":163},[194,1260,1261],{},"Once you are confident workloads are stable on the new instance types, remove the old group.",[194,1263,362],{},[364,1265,1266,1273,1281,1287,1293],{},[223,1267,368,1268,371,1270,1272],{},[203,1269,53],{},[203,1271,374],{}," → select your cluster.",[223,1274,380,1275,1277,1278,237],{},[203,1276,383],{}," tab → ",[203,1279,1280],{},"Node groups",[223,1282,1283,1284,237],{},"Select the ",[203,1285,1286],{},"old node group",[223,1288,1289,1290,237],{},"Click ",[203,1291,1292],{},"Delete",[223,1294,1295,1296,237],{},"Type the node group name to confirm, then ",[203,1297,1292],{},[194,1299,1300,1301,507],{},"If you are using ",[203,1302,1195],{},[220,1304,1305,1311],{},[223,1306,1307,1308],{},"Make sure the old node group is no longer in its configuration, ",[203,1309,1310],{},"or",[223,1312,1313,1314,1317],{},"Temporarily set its Desired\u002FMin capacity to ",[243,1315,1316],{},"0"," before you delete it.",[211,1319],{},[214,1321,167],{"id":166},[194,1323,1324],{},"If something goes wrong after migration (for example, performance or compatibility issues), you can quickly roll workloads back to the old node group.",[194,1326,1327],{},"The high-level flow:",[364,1329,1330,1333,1336,1339],{},[223,1331,1332],{},"Scale the old group back up.",[223,1334,1335],{},"Pause scheduling onto the new group.",[223,1337,1338],{},"Re-enable scheduling on the old group.",[223,1340,1341],{},"Drain the new nodes so pods move back.",[194,1343,1344],{},"You keep the new group around until you decide next steps.",[358,1346,171],{"id":170},[194,1348,1349],{},"In EC2 or EKS:",[220,1351,1352],{},[223,1353,1354,1355,1358],{},"Set the old node group's or Auto Scaling Group's ",[203,1356,1357],{},"Desired\u002FMin\u002FMax"," back to healthy values.",[194,1360,1361],{},"Example (Auto Scaling Group via console or CLI):",[220,1363,1364,1367,1370],{},[223,1365,1366],{},"Desired: previous steady-state value.",[223,1368,1369],{},"Min: match Desired.",[223,1371,1372],{},"Max: your upper bound.",[358,1374,174],{"id":173},[194,1376,1377,1378,1242],{},"Add a taint to the ",[203,1379,1125],{},[248,1381,1382],{"language":250,"class":251},[243,1383,1384,493,1394,493,1408,493,1423],{"class":254},[256,1385,1386,1388,1390,1392],{"class":258,"style":259},[256,1387,263],{"style":262},[256,1389,267],{"style":266},[256,1391,864],{"style":266},[256,1393,867],{"style":277},[256,1395,1396,1398,1400,1402,1404,1406],{"class":258,"style":259},[256,1397,872],{"style":273},[256,1399,278],{"style":277},[256,1401,296],{"style":266},[256,1403,299],{"style":284},[256,1405,288],{"style":277},[256,1407,867],{"style":277},[256,1409,1410,1412,1414,1417,1419,1421],{"class":258,"style":259},[256,1411,887],{"style":273},[256,1413,278],{"style":277},[256,1415,1416],{"style":266},"NEW_NODE_GROUP_NAM",[256,1418,299],{"style":284},[256,1420,288],{"style":277},[256,1422,867],{"style":277},[256,1424,1425,1427],{"class":258,"style":259},[256,1426,903],{"style":273},[256,1428,906],{"style":266},[194,1430,1431],{},"Cordon all new nodes:",[248,1433,1434],{"language":250,"class":251},[243,1435,1436,493,1462],{"class":254},[256,1437,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460],{"class":258,"style":259},[256,1439,245],{"style":262},[256,1441,737],{"style":266},[256,1443,740],{"style":266},[256,1445,926],{"style":273},[256,1447,929],{"style":266},[256,1449,932],{"style":277},[256,1451,1416],{"style":266},[256,1453,299],{"style":284},[256,1455,288],{"style":277},[256,1457,941],{"style":273},[256,1459,944],{"style":266},[256,1461,867],{"style":277},[256,1463,1464,1466,1468,1470,1472],{"class":258,"style":259},[256,1465,951],{"style":277},[256,1467,954],{"style":262},[256,1469,957],{"style":273},[256,1471,960],{"style":266},[256,1473,963],{"style":266},[358,1475,177],{"id":176},[194,1477,1478,1479,1242],{},"Remove the taint from the ",[203,1480,1241],{},[248,1482,1483],{"language":250,"class":251},[243,1484,1485,493,1495,493,1509,493,1523],{"class":254},[256,1486,1487,1489,1491,1493],{"class":258,"style":259},[256,1488,263],{"style":262},[256,1490,267],{"style":266},[256,1492,864],{"style":266},[256,1494,867],{"style":277},[256,1496,1497,1499,1501,1503,1505,1507],{"class":258,"style":259},[256,1498,872],{"style":273},[256,1500,278],{"style":277},[256,1502,296],{"style":266},[256,1504,299],{"style":284},[256,1506,288],{"style":277},[256,1508,867],{"style":277},[256,1510,1511,1513,1515,1517,1519,1521],{"class":258,"style":259},[256,1512,887],{"style":273},[256,1514,278],{"style":277},[256,1516,892],{"style":266},[256,1518,299],{"style":284},[256,1520,288],{"style":277},[256,1522,867],{"style":277},[256,1524,1525,1527],{"class":258,"style":259},[256,1526,903],{"style":273},[256,1528,1529],{"style":266}," removeTaints='[{key=no-scheduling,effect=NO_SCHEDULE}]'",[194,1531,1532],{},"Uncordon old nodes so they accept new pods again:",[248,1534,1535],{"language":250,"class":251},[243,1536,1537,493,1563],{"class":254},[256,1538,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561],{"class":258,"style":259},[256,1540,245],{"style":262},[256,1542,737],{"style":266},[256,1544,740],{"style":266},[256,1546,926],{"style":273},[256,1548,929],{"style":266},[256,1550,932],{"style":277},[256,1552,892],{"style":266},[256,1554,299],{"style":284},[256,1556,288],{"style":277},[256,1558,941],{"style":273},[256,1560,944],{"style":266},[256,1562,867],{"style":277},[256,1564,1565,1567,1569,1571,1573],{"class":258,"style":259},[256,1566,951],{"style":277},[256,1568,954],{"style":262},[256,1570,957],{"style":273},[256,1572,960],{"style":266},[256,1574,1575],{"style":266}," uncordon",[358,1577,180],{"id":179},[194,1579,1580,1581,1583],{},"Now drain the ",[203,1582,1125],{}," nodes so pods move back to the old group:",[248,1585,1586],{"language":250,"class":251},[243,1587,1588,493,1605,493,1611,493,1617,493,1623],{"class":254},[256,1589,1590,1592,1594,1596,1599,1601,1603],{"class":258,"style":259},[256,1591,245],{"style":262},[256,1593,982],{"style":266},[256,1595,278],{"style":277},[256,1597,1598],{"style":266},"NEW_NODE_NAM",[256,1600,299],{"style":284},[256,1602,288],{"style":277},[256,1604,867],{"style":277},[256,1606,1607,1609],{"class":258,"style":259},[256,1608,998],{"style":273},[256,1610,867],{"style":277},[256,1612,1613,1615],{"class":258,"style":259},[256,1614,1005],{"style":273},[256,1616,867],{"style":277},[256,1618,1619,1621],{"class":258,"style":259},[256,1620,1012],{"style":273},[256,1622,867],{"style":277},[256,1624,1625],{"class":258,"style":259},[256,1626,1019],{"style":273},[194,1628,1629],{},"Watch pods move back:",[248,1631,1632],{"language":250,"class":251},[243,1633,1634],{"class":254},[256,1635,1636,1638,1640,1642,1644,1646,1648],{"class":258,"style":259},[256,1637,245],{"style":262},[256,1639,737],{"style":266},[256,1641,1109],{"style":266},[256,1643,1112],{"style":273},[256,1645,941],{"style":273},[256,1647,1117],{"style":266},[256,1649,743],{"style":273},[194,1651,1652],{},"Once you stabilize and understand the root cause, you can try another migration with updated instance types or configuration.",[211,1654],{},[214,1656,183],{"id":182},[220,1658,1659,1670,1679],{},[223,1660,1661,1664,1665],{},[203,1662,1663],{},"Install kubectl"," — ",[1666,1667,1669],"a",{"href":1668},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Ftasks\u002Ftools\u002F","Kubernetes documentation: Install and Set Up kubectl",[223,1671,1672,1664,1675],{},[203,1673,1674],{},"NVIDIA device plugin for Kubernetes",[1666,1676,1678],{"href":1677},"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fk8s-device-plugin","NVIDIA\u002Fk8s-device-plugin on GitHub",[223,1680,1681,1664,1684],{},[203,1682,1683],{},"VPC and subnet requirements for EKS",[1666,1685,1687],{"href":1686},"https:\u002F\u002Fdocs.aws.amazon.com\u002Feks\u002Flatest\u002Fuserguide\u002Fnetwork_reqs.html","Amazon EKS VPC and subnet requirements",1792482912160]