LoginSignup
0
0

asdfで共有用のkubectlを/optとかにインストールする

Last updated at Posted at 2023-12-26

TL;DR

普通に(Getting started通りに)インストールしたkubectl on asdfを/opt/asdfに移動して起動するとこまで構成変更したときのメモ。

モチベーションとやったこと

おしごとでk8sを触るようになったのだけど、基本インターネットに直接出られない環境での操作なので、asdfと管理下のkubectlを好きなところにファイルで移植して使いたい。
どうやらasdfはインストールしたバイナリをディレクトリ内に持ってくれるようなので、開発環境でキッティングしてzipで固めて本番環境に持っていけないかな、と思い試行錯誤してみることにした。

素直なインストール

Getting Startedに従ってインストール。

download & 環境変数セット
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 add & asdf install 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_DIRASDF_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で書き換えているから順番とか違うけど)

~/.zshrc
# 略

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

~/.zshrcasdf.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

まだ実際にクローズな環境で動かしてみてないので、年内に試す。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0