Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

Operator SDKのインストール

はじめに

Operator SDKのインストール時の作業記録。 インストール方法は以下の3つあるが、ここではGitHubのReleaseからのインストールを実施する。

環境

# cat /etc/os-release | grep PRETTY_NAME
PRETTY_NAME="Ubuntu 20.04.1 LTS"

事前準備

動作要件としてdockerとkubectlが必要なので、事前に準備しておく。 ここでは詳細は割愛する。

インストール

Operator SDKのWebサイトで示されているインストール手順通りに進める。

(1) バージョンの指定

インストールするバージョンを変数で指定しておく。

$ RELEASE_VERSION=v1.2.0

(2) コマンドのバイナリのダウンロード

コマンドのバイナリをダウンロードする。 コマンドはシングルバイナリになっている。

$ curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu
$ curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/ansible-operator-${RELEASE_VERSION}-x86_64-linux-gnu
$ curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/helm-operator-${RELEASE_VERSION}-x86_64-linux-gnu

(3) バイナリの検証

まずascファイルをダウンロードする。

$ curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu.asc
$ curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/ansible-operator-${RELEASE_VERSION}-x86_64-linux-gnu.asc
$ curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/helm-operator-${RELEASE_VERSION}-x86_64-linux-gnu.asc

以下のコマンドを実行することで検証できるが、後述の注意がある。

$ gpg --verify operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu.asc
$ gpg --verify ansible-operator-${RELEASE_VERSION}-x86_64-linux-gnu.asc
$ gpg --verify helm-operator-${RELEASE_VERSION}-x86_64-linux-gnu.asc

ここで注意点だが、単に上記のコマンドを実行すると、おそらく以下のように検証が失敗する。

$ gpg --verify operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu.asc
gpg: 署名されたデータが'operator-sdk-v1.2.0-x86_64-linux-gnu'にあると想定します
gpg: 2020年11月11日 08時54分26秒 JSTに施された署名
gpg:                RSA鍵0CF50BEE7E4DF6445E08C0EA9AFDE59E90D2B445を使用
gpg:                発行者"joe.lanford@gmail.com"
gpg: 署名を検査できません: 公開鍵がありません

その場合は、上記の実行結果の「RSA鍵」の後に表示されている文字列(Key ID)で示される公開鍵を取得する必要がある。 今回の場合は、以下のようにコマンドを実行する。

$ gpg --keyserver keyserver.ubuntu.com --recv-key "0CF50BEE7E4DF6445E08C0EA9AFDE59E90D2B445"

そして、最初に示した検証をやり直してみると、警告付きだが一応は成功する。

$ gpg --verify operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu.asc
gpg: 署名されたデータが'operator-sdk-v1.2.0-x86_64-linux-gnu'にあると想定します
gpg: 2020年11月11日 08時54分26秒 JSTに施された署名
gpg:                RSA鍵0CF50BEE7E4DF6445E08C0EA9AFDE59E90D2B445を使用
gpg:                発行者"joe.lanford@gmail.com"
gpg: "Joe Lanford <joe.lanford@gmail.com>"からの正しい署名 [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:          この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガープリント: 0CF5 0BEE 7E4D F644 5E08  C0EA 9AFD E59E 90D2 B445

(4) コマンドの配置

以下のコマンドを実行する。 複雑に見えるが、実行のパーミッションをつけて/usr/local/binにコピーしているだけ。

$ chmod +x operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu && sudo mkdir -p /usr/local/bin/ && sudo cp operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu /usr/local/bin/operator-sdk && rm operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu
$ chmod +x ansible-operator-${RELEASE_VERSION}-x86_64-linux-gnu && sudo mkdir -p /usr/local/bin/ && sudo cp ansible-operator-${RELEASE_VERSION}-x86_64-linux-gnu /usr/local/bin/ansible-operator && rm ansible-operator-${RELEASE_VERSION}-x86_64-linux-gnu
$ chmod +x helm-operator-${RELEASE_VERSION}-x86_64-linux-gnu && sudo mkdir -p /usr/local/bin/ && sudo cp helm-operator-${RELEASE_VERSION}-x86_64-linux-gnu /usr/local/bin/helm-operator && rm helm-operator-${RELEASE_VERSION}-x86_64-linux-gnu

動作確認

各コマンドのバージョンを表示してみる。

$ operator-sdk version
operator-sdk version: "v1.2.0", commit: "215fc50b2d4acc7d92b36828f42d7d1ae212015c", kubernetes version: "v1.18.8", go version: "go1.15.3", GOOS: "linux", GOARCH: "amd64"

$ ansible-operator version
ansible-operator version: "v1.2.0", commit: "215fc50b2d4acc7d92b36828f42d7d1ae212015c", kubernetes version: "v1.18.8", go version: "go1.15.3", GOOS: "linux", GOARCH: "amd64"

$ helm-operator version
helm-operator version: "v1.2.0", commit: "215fc50b2d4acc7d92b36828f42d7d1ae212015c", kubernetes version: "v1.18.8", go version: "go1.15.3", GOOS: "linux", GOARCH: "amd64"

参考