为了避免有太多的本地安装,我决定将 aws 和 kubectl cli 封装到 docker 容器中,并通过此脚本进行集成,该脚本可在以下路径上访问:
#!/bin/bash
set -e
VERSION=0.9
AWS_DIR=~/.aws
KUBE_DIR=~/.kube
if [[ "$1" == "build" ]]; then
CONTAINER=awsclibuild
docker run -v ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro --name=${CONTAINER} -itd -e http_proxy -e https_proxy -e no_proxy --net=host ubuntu:jammy sleep infinity
#Install aws cli
docker exec -it $CONTAINER bash -c "apt-get update && apt-get install -y curl unzip less"
docker exec -it $CONTAINER bash -c "curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip"
docker exec -it $CONTAINER bash -c "unzip awscliv2.zip"
docker exec -it $CONTAINER bash -c "./aws/install"
#install kubectl cli
docker exec -it $CONTAINER bash -c 'curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"'
docker exec -it $CONTAINER bash -c "install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl"
docker stop $CONTAINER
docker commit $CONTAINER awskubectl:$VERSION
docker rm -f $CONTAINER
exit 0
fi
docker run -it --rm \
-e http_proxy -e https_proxy -e no_proxy -e AWS_PROFILE \
--net=host \
-v /mnt/c:/mnt/c \
-v ~/.aws:/root/.aws \
-v ~/.kube:/root/.kube \
-v "$(pwd)":/userworkdir \
-w /userworkdir \
awskubectl:$VERSION bash -c "$*"
这在大多数情况下都有效,但不起作用的是,例如将输出通过管道传输到 grep。
例如如果我这样做:
aws iam list-roles
它完美地打开了较少的内容,我可以浏览。
但如果我这样做:
aws iam list-roles | grep "something"
它最终什么都没显示,但当我按“q”时又返回了。所以我猜想管道没有传播到docker容器。当然,这只会使用默认的“less”。
你知道我如何才能更好地将其集成到命令行吗