为什么需要这个脚本?
如果你跟我一样,经常需要在干净的 Amazon Linux 2(或 CentOS/RHEL 系)机器上部署 Amazon EKS 集群,你一定体会过下面这套“仪式”有多繁琐:
打开 AWS 文档,找到「安装 AWS CLI」章节,复制
curl
命令;再切到 Kubernetes 文档,找到「安装 kubectl」章节,复制另一条
curl
命令;再去 eksctl 的 GitHub Release 页面,找到最新版下载链接,再复制一条
tar
命令;安装完成后,还要手动把
/usr/local/bin
加到PATH
,顺手再配个自动补全;最后发现忘了
chmod +x
,或者下载链接过期,又得重来一次……
这一套流程重复 3-5 次之后,我终于忍不了了:“能不能一条命令自动搞定?”
于是就有了今天的主角——aws_k8s_tools_install.sh
脚本能做什么?
一句话总结:
在 Amazon Linux 2 上,一条
sudo ./aws_k8s_tools_install.sh
就能把 AWS CLI v2、kubectl、eksctl 一次装好,并自动配置好环境变量和自动补全。
具体动作包括:
使用方法
复制脚本内容到
aws_k8s_tools_install.sh
(内容放在最后了)赋权
chmod +x aws_k8s_tools_install.sh
运行
sudo ./aws_k8s_tools_install.sh
重新登录或
source ~/.bashrc
踩坑记录 & 优化点
必须
root
权限
早期版本没检查EUID
,结果mv
到/usr/local/bin
时各种Permission denied
。AWS CLI v1 残留
有些 AMI 自带旧版awscli
,和新版并存会冲突,所以先yum remove -y
。自动补全路径要写死
不同发行版aws_completer
位置不一样,Amazon Linux 2 装在/usr/local/bin
,所以脚本里写死。非 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 "========================================"