为什么需要这个脚本?

如果你跟我一样,经常需要在干净的 Amazon Linux 2(或 CentOS/RHEL 系)机器上部署 Amazon EKS 集群,你一定体会过下面这套“仪式”有多繁琐:

  1. 打开 AWS 文档,找到「安装 AWS CLI」章节,复制 curl 命令;

  2. 再切到 Kubernetes 文档,找到「安装 kubectl」章节,复制另一条 curl 命令;

  3. 再去 eksctl 的 GitHub Release 页面,找到最新版下载链接,再复制一条 tar 命令;

  4. 安装完成后,还要手动把 /usr/local/bin 加到 PATH,顺手再配个自动补全;

  5. 最后发现忘了 chmod +x,或者下载链接过期,又得重来一次……

这一套流程重复 3-5 次之后,我终于忍不了了:“能不能一条命令自动搞定?”

于是就有了今天的主角——aws_k8s_tools_install.sh


脚本能做什么?

一句话总结:

在 Amazon Linux 2 上,一条 sudo ./aws_k8s_tools_install.sh 就能把 AWS CLI v2、kubectl、eksctl 一次装好,并自动配置好环境变量和自动补全。

具体动作包括:

步骤

说明

1

检查是否 root 权限(必须 sudo 运行)

2

yum update -y 更新系统

3

安装常用依赖:unzip curl wget ca-certificates

4

先卸掉老旧的 AWS CLI v1,再装 v2

5

安装最新稳定版 kubectl(自动探测 CPU 架构)

6

安装最新版 eksctl

7

验证三个二进制都能 --version

8

/usr/local/bin 追加到 ~/.bashrc

9

为 AWS CLI 开启自动补全

10

.bashrc 权限还给非 root 用户


使用方法

  1. 复制脚本内容到 aws_k8s_tools_install.sh(内容放在最后了)

  2. 赋权

    chmod +x aws_k8s_tools_install.sh
  3. 运行

    sudo ./aws_k8s_tools_install.sh
  4. 重新登录或

    source ~/.bashrc

踩坑记录 & 优化点

  1. 必须 root 权限
    早期版本没检查 EUID,结果 mv/usr/local/bin 时各种 Permission denied

  2. AWS CLI v1 残留
    有些 AMI 自带旧版 awscli,和新版并存会冲突,所以先 yum remove -y

  3. 自动补全路径要写死
    不同发行版 aws_completer 位置不一样,Amazon Linux 2 装在 /usr/local/bin,所以脚本里写死。

  4. 非 root 用户 .bashrc 权限
    sudo 下创建的文件属于 root,最后一步 chown 把文件还给实际用户,避免 vim ~/.bashrc 时没权限。


后续计划

  • 支持 Ubuntu/Debian 系(apt 包管理)。

  • 支持 macOS(brew 版)。

  • 检测已有版本,跳过重复安装。

  • 用 GitHub Action 跑 CI,每次 eksctl/kubectl 发版自动更新脚本里的下载链接。

代码:

#!/bin/bash

# 安装脚本:AWS CLI、kubectl和eksctl
# 此脚本会在Amazon Linux 2上安装所需工具并配置环境变量

set -e

echo "开始安装 AWS CLI、kubectl 和 eksctl..."

# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
  echo "请使用sudo运行此脚本"
  exit 1
fi

# 更新包列表
echo "更新包列表..."
yum update -y

# 安装依赖
echo "安装依赖..."
yum install -y unzip curl wget ca-certificates

# 卸载aws cli1
echo "卸载 AWS CLI 1..."
yum remove awscli -y
# 安装 AWS CLI
echo "安装 AWS CLI..."
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip -q awscliv2.zip
./aws/install
rm -rf aws awscliv2.zip

# 安装 kubectl
echo "安装 kubectl..."
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
mv kubectl /usr/local/bin/

# 安装 eksctl
echo "安装 eksctl..."
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
mv /tmp/eksctl /usr/local/bin

# 验证安装
echo "验证安装..."
aws --version
kubectl version --client
eksctl version

# 配置环境变量
echo "配置环境变量..."

# 获取当前用户
SUDO_USER=${SUDO_USER:-$USER}
USER_HOME=$(eval echo ~$SUDO_USER)

# 检查并添加环境变量到 .bashrc
PROFILE_PATH="$USER_HOME/.bashrc"

# 如果文件不存在,创建它
if [ ! -f "$PROFILE_PATH" ]; then
  touch "$PROFILE_PATH"
  chown $SUDO_USER:$SUDO_USER "$PROFILE_PATH"
fi

# 添加环境变量(如果不存在)
if ! grep -q "PATH=.*\/usr\/local\/bin" "$PROFILE_PATH"; then
  echo 'export PATH=$PATH:/usr/local/bin' >> "$PROFILE_PATH"
fi

# 添加AWS CLI自动补全(如果不存在)
if ! grep -q "complete -C.*aws_completer" "$PROFILE_PATH"; then
  echo 'complete -C "/usr/local/bin/aws_completer" aws' >> "$PROFILE_PATH"
fi

echo "设置文件权限..."
chown $SUDO_USER:$SUDO_USER "$USER_HOME/.bashrc"

echo "========================================"
echo "安装完成!"
echo "AWS CLI, kubectl 和 eksctl 已成功安装"
echo "环境变量已配置到 .bashrc"
echo "请运行 'source ~/.bashrc' 或重新登录以应用更改"
echo "========================================"