为什么需要这个脚本?
如果你跟我一样,经常需要在干净的 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
# Exit on error
set -e
echo "Starting installation and configuration of AWS CLI, kubectl, and eksctl..."
# Install AWS CLI
echo "Installing AWS CLI..."
sudo yum remove -y awscli || true
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip -o awscliv2.zip
sudo ./aws/install --update
rm -rf awscliv2.zip aws
# Install kubectl
echo "Installing kubectl..."
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.33.0/2025-05-01/bin/linux/amd64/kubectl
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.33.0/2025-05-01/bin/linux/amd64/kubectl.sha256
sha256sum -c kubectl.sha256
chmod +x ./kubectl
mkdir -p $HOME/bin
cp ./kubectl $HOME/bin/kubectl
rm -f kubectl kubectl.sha256
# Install eksctl
echo "Installing eksctl..."
ARCH=amd64
PLATFORM=$(uname -s)_$ARCH
curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
curl -sL "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_checksums.txt" | grep $PLATFORM | sha256sum --check || echo "Warning: eksctl checksum verification failed"
tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm -f eksctl_$PLATFORM.tar.gz
sudo install -m 0755 /tmp/eksctl /usr/local/bin
# Configure PATH and shell settings permanently
echo "Configuring PATH and shell settings..."
# Check if .bashrc exists, create if not
touch ~/.bashrc
# Check if .bash_profile exists, create if not
touch ~/.bash_profile
# Add PATH configurations to .bashrc if not already present
if ! grep -q "export PATH=/usr/local/bin:\$PATH" ~/.bashrc; then
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
fi
if ! grep -q "export PATH=\$HOME/bin:\$PATH" ~/.bashrc; then
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
fi
# Add kubectl autocompletion to .bashrc if not already present
if ! grep -q "source <(kubectl completion bash)" ~/.bashrc; then
echo 'source <(kubectl completion bash)' >> ~/.bashrc
fi
# Add kubectl alias to .bashrc if not already present
if ! grep -q "alias k=kubectl" ~/.bashrc; then
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
fi
# Source .bashrc from .bash_profile if not already present
if ! grep -q "source ~/.bashrc" ~/.bash_profile; then
echo 'if [ -f ~/.bashrc ]; then source ~/.bashrc; fi' >> ~/.bash_profile
fi
# Apply changes to current session
source ~/.bashrc
echo "Installation and configuration completed successfully!"
echo "Your PATH and tools are now permanently configured."
echo "You can verify the installations with:"
echo " aws --version"
echo " kubectl version --client"
echo " eksctl version"