5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

k3supを使ってk3sをインストールする

Last updated at Posted at 2021-06-15

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

k3sのインストールって微妙に辛いので、k3supというツールに頼ってみた。
k3sについての説明は致しません。

k3sについては下記サイトをご参照ください。
K3s: Lightweight Kubernetes
https://k3s.io/

K3S日本語マニュアルが無料で配布されています。
日本語版k3s マニュアルダウンロード | 株式会社スタイルズ
https://www.stylez.co.jp/rancher-k3s-pdf/

image.png

1. k3supって何?

k3sのセットアップツールです。
k3sをインストールする対象のサーバーへSSHできる環境であれば、k3supというコマンドでセットアップしてくれます。k3sインストールに特化したコマンドです。

読み方は「ケチャップ」だそうです。
image.png

2. k3supのインストール

k3supをインストールするには、以下のコマンドでインストールは完了です。
このコマンドは、k3sとは関係ない外部サーバーに入れて問題ありません。
(WindowsのCLI版もあります)

curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/

k3sup --help

image.png

本記述の対象バージョン:

bash
$ 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事前準備

以下の事前準備を行います。

  1. PostgreSQLをk3sのデータストアにするので、PostgreSQLを用意します。
  2. sshの公開鍵と秘密鍵を作っておきます。
  3. 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
/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
/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-init_k3s.yaml
#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. 参考

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?