毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
k3sのインストールって微妙に辛いので、k3supというツールに頼ってみた。
k3sについての説明は致しません。
k3sについては下記サイトをご参照ください。
K3s: Lightweight Kubernetes
https://k3s.io/
K3S日本語マニュアルが無料で配布されています。
日本語版k3s マニュアルダウンロード | 株式会社スタイルズ
https://www.stylez.co.jp/rancher-k3s-pdf/
1. k3supって何?
k3sのセットアップツールです。
k3sをインストールする対象のサーバーへSSHできる環境であれば、k3supというコマンドでセットアップしてくれます。k3sインストールに特化したコマンドです。
2. k3supのインストール
k3supをインストールするには、以下のコマンドでインストールは完了です。
このコマンドは、k3sとは関係ない外部サーバーに入れて問題ありません。
(WindowsのCLI版もあります)
curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/
k3sup --help
本記述の対象バージョン:
$ k3sup version
Version: 0.11.0
Git Commit: fd9dfeaa6cd32f0d048f33705a04c14ca4aa3550
2-1. シングルサーバーのk3sだけをさっさとインストールしたい人向け
- K3sのバージョンを指定しない場合
k3sup install --local --user=$USER --local-path ./kubeconfig
- K3sのバージョンを指定する場合
k3sup install --local --user=$USER --local-path ./kubeconfig --k3s-version=v1.26.6+k3s1
3. k3sup
3-1. k3sインストールオプション
インストールオプションは、大きく分けて2つのオプションがあります。
インストールオプション | 説明 |
---|---|
k3sup install | k3sサーバーをインストールするオプション |
k3sup join | k3sエージェントをインストール(or 既存サーバーへ参加)するオプション |
その他のオプション
インストールオプション | 説明 |
---|---|
k3s app | YAMLやhelmチャートからのアプリインストール |
3-1-1. k3sサーバーインストールオプション
k3sup install <オプション>
インストールオプション | 説明 |
---|---|
--cluster | dqliteでクラスターを形成する場合に利用する |
--context string | kubeconfigファイルのコンテクスト名を指定 (デフォルト:"default") |
--datastore string | オプション: HA構成でk3sデータベースへ接続する接続文字列。例: "mysql://username:password@tcp(hostname:3306)/database-name" |
--ip ip | インストールするノードのIPアドレス (デフォルト127.0.0.1) |
--ipsec | flannel-backendのバックエンドオプションがipsecの時に追加の引数を強制したり有効化する |
--k3s-channel string | リリースチャンネル指定オプション: stable, latest, その他の例 v1.18 (デフォルト"v1.18") |
--k3s-extra-args string | k3sインストーラーに渡すクオートしたオプション引数 (例: --k3s-extra-args '--no-deploy ervicelb') |
--k3s-version string | オプション: インストールバージョンを指定(k3s-channelが上書きされる) |
--local | SSHを使わずにローカルへインストールする |
--local-path string | kubeconfigファイルをローカルへ保存するファイルパス (デフォルト "kubeconfig") |
--merge | kubeconfigがあった場合に既存のkubeconfigにマージする kubeconfigが他のディレクトリにすでに存在する場合は、--local-pathフラグに--mergeを指定します |
--no-extras | "servicelb" と "traefik"を無効化 |
--print-command | エラー発生時にSSHを使って手動でリカバリーするためにコマンドを出力 |
--skip-install | k3sインストーラーをスキップ |
--ssh-key string | リモートログインする時に利用するSSHキー (デフォルト ~/.ssh/id_rsa") |
--ssh-port int | SSH接続する時のポート番号 (デフォルト 22) |
--sudo | インストール時にsudoを使用する (例: rootを使って sudoを利用しない場合は、falseに設定する)(デフォルト true) |
--tls-san string | オプション: 指定がなければデフォルトでサーバーIP |
--user string | SSHログインのユーザー名(デフォルト "root") |
3-1-2. k3sエージェントインストールオプション
k3sup join <オプション>
インストールオプション | 説明 |
---|---|
--ip ip | エージェントインストールするノードの公開IP |
--k3s-channel string | リリースチャンネル指定オプション: stable, latest, その他の例: v1.18 (default "v1.18") |
--k3s-extra-args string | k3sインストーラーに渡すクオートしたオプション引数 (e.g. --k3s-extra-args '--node-taint key=value:NoExecute') |
--k3s-version string | オプション: インストールバージョンを指定(k3s-channelが上書きされる) |
--print-command | エラー発生時にSSHを使って手動でリカバリーするためにコマンドを出力 |
--server | エージェントとしてではなく、サーバーとしてクラスターに参加する |
--server-ip ip | 既存のk3sサーバーの公開アドレス |
--server-ssh-port int | SSH接続するサーバーへSSH接続するポート番号(デフォルトは--ssh-port) (デフォルト 22) |
--server-user string | サーバーへSSHログインする時のユーザー名(デフォルトは --userと同じ) (default "root") |
--skip-install | k3sインストーラーをスキップ |
--ssh-key string | リモートログインする時に利用するSSHキー (デフォルト ~/.ssh/id_rsa") |
--ssh-port int | SSH接続する時のポート番号 (デフォルト 22) |
--sudo | インストール時にsudoを使用 (例: rootを使って sudoを利用しない場合は、falseに設定する) (デフォルト true) |
--user string | SSHログインのユーザー名(デフォルト "root") |
4. k3s事前準備
以下の事前準備を行います。
- PostgreSQLをk3sのデータストアにするので、PostgreSQLを用意します。
- sshの公開鍵と秘密鍵を作っておきます。
- k3sを動かす仮想マシンをmultipassで起動します。
4-1. PostgreSQLをインストールしてデータベースを作成
sudo apt install postgresql
export DATABASE_NAME="k3s_database"
export K3S_DB_USER="k3s_admin"
export K3S_DB_PASSWORD="k3s_admin_foobaa"
echo 'export K3S_DB_USER="k3s_admin"'
echo 'export K3S_DB_PASSWORD="k3s_admin_foobaa"'
# Create User for DATABASE (one time)
sudo -i -u postgres psql -c "CREATE USER ${K3S_DB_USER} WITH password '${K3S_DB_PASSWORD}';"
# Create DATABSE
sudo -i -u postgres psql -c "CREATE DATABASE ${DATABASE_NAME};"
sudo -i -u postgres psql -c "GRANT ALL privileges ON DATABASE ${DATABASE_NAME} TO ${K3S_DB_USER};"
DB側で外部から接続を許可しておきましょう
sudo vi /etc/postgresql/12/main/postgresql.conf
- #listen_addresses = 'localhost' # what IP address(es) to listen on;
+ listen_addresses = '*' # what IP address(es) to listen on;
DBへ接続してくるIPアドレスを追記しておきましょう
sudo vi /etc/postgresql/12/main/pg_hba.conf
+ host all all 0.0.0.0/0 md5
追記したら、再起動しておきます。
sudo systemctl restart postgresql
4-2. SSHの秘密鍵をコピー
multipassで仮想マシンを起動しますが、普通にmultipass launch
するとデフォルトのSSH鍵で認証されるように公開鍵(/home/ubunt/.ssh/authorized_keys)が仮想マシン側に入ります。SSH鍵で認証してログインします。
SSH鍵は以下にありますが、root権限でしか読み込めないので、~/.ssh/multpass-ssh-key_id_rsa
とかにコピーしておきます
sudo cp /var/snap/multipass/common/data/multipass/ssh-keys/id_rsa ~/.ssh/multipass-ssh-key_id_rsa
4-3. multipassで仮想マシンを用意する
multipass launch 18.04 --name "k3s-main" -c 2 -m 4g -d 20g --cloud-init ./cloud-init_k3s.yaml
multipass launch 18.04 --name "k3s-agent" -c 2 -m 4g -d 20g --cloud-init ./cloud-init_k3s.yaml
cloud-initファイルは、以下のようなものを用意しておきましょう
#cloud-config
timezone: Asia/Tokyo
package_upgrade: true
package_reboot_if_required: true
仮想マシンが起動したらそれぞれのIPアドレスを書き留めておきます。
export IP_k3s_main=xx.xx.xx.xx
export IP_k3s_agent=yy.yy.yy.yy
5. k3sサーバーをインストールする
export Postgres_IP_Address=zz.zz.zz.zz
k3sup install \
--ip $IP_k3s_main \
--user ubuntu \
--ssh-key ~/.ssh/multipass-ssh-key_id_rsa \
--datastore="postgres://${K3S_DB_USER}:${K3S_DB_PASSWORD}@${Postgres_IP_Address}:5432/${DATABASE_NAME}"
6. k3sエージェントをインストールする
k3sup join \
--ip $IP_k3s_agent \
--server-ip $IP_k3s-main \
--user ubuntu \
--ssh-key ~/.ssh/multipass-ssh-key_id_rsa \
7. K3sが起動しているか確認する
起動したらローカルにkubeconfigファイルができますので、それを使ってget nodeしてみましょう。
kubectl --kubeconfig=./kubeconfig get no
こんな風に表示されればOKです。
NAME STATUS ROLES AGE VERSION
k3-main Ready master 22m v1.19.11+k3s1
k3-agent Ready <none> 3m49s v1.19.11+k3s1
8. まとめ
multipassとk3sを組み合わせると簡単にKubernetesを構築することができる便利な時代になりました。
必要に応じてremote.itをインストールすれば外部からのアクセスも簡単にできるようになります。
multipassとremote.it(remot3.it)で仮想マシンのネットワークを快適にする - Qiita
https://qiita.com/ynott/items/649e653ed2aeadf812ae
k3dはもっと楽になっているので開発者にはこちらの方がお勧めです。
9. 参考