TL;DR
普通に(Getting started通りに)インストールしたkubectl on asdfを/opt/asdf
に移動して起動するとこまで構成変更したときのメモ。
モチベーションとやったこと
おしごとでk8sを触るようになったのだけど、基本インターネットに直接出られない環境での操作なので、asdfと管理下のkubectlを好きなところにファイルで移植して使いたい。
どうやらasdfはインストールしたバイナリをディレクトリ内に持ってくれるようなので、開発環境でキッティングしてzipで固めて本番環境に持っていけないかな、と思い試行錯誤してみることにした。
素直なインストール
Getting Startedに従ってインストール。
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1
cat <<'EOS' >> ~/.zshrc
# for asdf
. "$HOME/.asdf/asdf.sh"
EOS
cat <<'EOS' >> ~/.zshrc
# append completions to fpath
fpath=(${ASDF_DIR}/completions $fpath)
# initialise completions with ZSH's compinit
autoload -Uz compinit && compinit
EOS
source ~/.zshrc
ついで、kubectlパッケージ、kubectl 1.27.9をインストール(ふるいいうな!)
asdf plugin add kubectl
asdf install kubectl 1.27.9
/opt下に移植してみる
移動させてrootにオーナー変更
sudo cp -pr .asdf /opt/asdf
sudo chown root:root /opt/asdf -R
~/.zshrc書き換え
sed -i.bk_`TZ=Asia/Tokyo date --iso-8601=seconds` \
-e 's|$HOME/.asdf|/opt/asdf|' ~/.zshrc
source ~/.zshrc
これだけでは期待したように動かないので対策する
asdf.shのパスを変えただけでは、asdfは/opt/asdf
配下のものが使えるようにはなるけど、すでにインストールしたkubectlが見つからなくて使えない。
すくなくとも以下の2つを対応する必要がある。
- 環境変数の設定
-
ASDF_DIR
,ASDF_DATA_DIR
に/opt/asdf
をセットする
-
- shimの更新
- asdfは内部的にshimというのを使っていて、それがインストール時のPathに向いている。これを更新する。
環境変数の設定
https://asdf-vm.com/manage/configuration.html
こちらに必要な環境変数が書いてあった。
asdf.sh
を読む前にASDF_DIR
とASDF_DATA_DIR
をセットするように修正してみる。
# まずは爽やかにドット実行行を消す
sed -i.bk_`TZ=Asia/Tokyo date --iso-8601=seconds` \
-e 's|. "/opt/asdf/asdf.sh"||' ~/.zshrc
# exportしてからasdf.shを読むように変更
cat <<'EOS' >> ~/.zshrc
export ASDF_DIR=/opt/asdf
export ASDF_DATA_DIR=/opt/asdf
. "/opt/asdf/asdf.sh"
EOS
最終的にこんな感じになってればよさそう(以下はvimで書き換えているから順番とか違うけど)
# 略
export ASDF_DIR=/opt/asdf
export ASDF_DATA_DIR=/opt/asdf
#. "$HOME/.asdf/asdf.sh"
. "/opt/asdf/asdf.sh"
# append completions to fpath
fpath=(${ASDF_DIR}/completions $fpath)
# initialise completions with ZSH's compinit
autoload -Uz compinit && compinit
shimの更新
sudo mv /opt/asdf/shims /opt/asdf/shims_bk
~/.zshrc
でasdf.sh
を読み込んでるとsudoするのがめんどい(環境変数引き継ぎ的な意味で)ので、suでrootになって環境変数設定してからasdf reshim
を叩く(/opt/asdf/asdf.sh
ができる)
sudo su -
export ASDF_DIR=/opt/asdf
export ASDF_DATA_DIR=/opt/asdf
. "/opt/asdf/asdf.sh"
asdf reshim
# そのままrootでも、もとのユーザでも
asdf global kubectl 1.27.9
kubectl --version
以下の通り、とりあえず使えそうに見える。
LASTY@bounoki[969]% kubectl version --client
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.9", GitCommit:"d15213f69952c79b317e635abff6ff4ec81475f8", GitTreeState:"clean", BuildDate:"2023-12-19T13:41:13Z", GoVersion:"go1.20.12", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v5.0.1
TODO
まだ実際にクローズな環境で動かしてみてないので、年内に試す。。