Linux

激安中華miniPCでKubernetesクラスタを構築する

Akira Ueno

この記事は whywaita Advent Calendar 2023 7 日目の記事です。

前日は k_enoki さんの記事 でした。

whywaita さんといえば、インフラエンジニアのイメージがあります。 今どきのインフラエンジニアといえば、Kubernetes ですよね。そこで、今回は Kubernetes の勉強を兼ねて、自宅で Kubernetes を動かすための環境を構築してみました。 お金はあまりかけたくないが、クラウドでやっても面白くないので、激安中華 miniPC を使います。

今回の環境

Amazon で Beelink EQ12 x 3 台とBeelink S12 Pro x 1 台を購入しました。これを Kubernetes クラスタとして構築します。 スペックは CPU: Alder Lake 4 コア、メモリ: 16GB、SSD: 500GB NVME です。 これで 1 台 3 万円弱でした。激安ですね。 3 台の EQ12 は ワーカーノード、1 台の S12 Pro はコントロールプレーンとします。

OS のインストール

まずは OS をインストールします。今回は Ubuntu Server 22.04 LTS をインストールしました。 PXE などでかっこよく自動インストールしたかったのですが、設定が大変そうだったので、手動で USB メモリを使ってインストールしました。

Lock Gnome Screen via SSH

Akira Ueno

Overview

I want to lock gnome-session(Desktop) with a user logged in via ssh.

Script

Save below script and execute it.

There are two key points at line 10.

1. gnome-screensaver-command -l

Execute gnome-screensaver-command as GNOME logged in user.

2. DBUS_SESSION_BUS_ADDRESS

Set dbus environment varibale to execute gnome-screensaver-command.

Reference

CloudflareのDNSを利用しているドメインの証明書をcertbotで発行する

Akira Ueno

概要

Cloudflare の DNS を利用しているドメインの証明書を certbot で発行する。 ワイルドカード証明書を発行する場合、certbot を使い DNS 認証(DNS-01)で DNS レコードを手で修正していたが、Cloudflare の API を利用すれば自動化できる。さらにcertbot-dns-cloudflareというプラグインにより簡単に設定できるので紹介する。

API トークンの取得と設定

Cloudflare のMy ProfileAPIトークン>トークンを作成する>ゾーン DNS を編集するを選択し API トークンを発行する。 以下は設定例。 cloudflare-api.png

発行した API トークンを含むクレデンシャルファイルを適当な場所に作成する。

$ sudo mkdir /etc/letsencrypt/cloudflare
$ sudo vim /etc/letsencrypt/cloudflare/akky.me.ini
dns_cloudflare_api_token=<発行したAPIトークン>
$ sudo chmod 700 /etc/letsencrypt/cloudflare
$ sudo chmod 600 /etc/letsencrypt/cloudflare/akky.me.ini

certbot のインストール

公式の手順に従う。 今回は Web サーバが Nginx,OS が Debian buster なので snap を使ってインストールする手順が表示された。

sudo apt install snapd # snapが入ってなければ
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

プラグインのインストール

certbot-dns-cloudflareプラグインをインストールする。

正規表現でマッチしたグループを複数抽出する

Akira Ueno

概要

正規表現でマッチしたグループを複数抽出する場合はsedを使うと良い.グループが1つの場合はgrepでも-oP\Kで抽出できるが,グループが複数あるとできない.

コード

i番目のグループ(()で囲まれた部分)を\iで置換する.

sed -r 's/<正規表現>/\i/g

vncのポート番号とpidを抽出する例

sed

$ ss -ltp | grep vnc 
LISTEN    0         5                  0.0.0.0:5901             0.0.0.0:*        users:(("Xtigervnc",pid=3193,fd=7))                                            
LISTEN    0         5                  0.0.0.0:5902             0.0.0.0:*        users:(("Xtigervnc",pid=4404,fd=7))                                            
LISTEN    0         5                  0.0.0.0:5903             0.0.0.0:*        users:(("Xtigervnc",pid=4453,fd=7))                                            
LISTEN    0         5                     [::]:5901                [::]:*        users:(("Xtigervnc",pid=3193,fd=8))                                            
LISTEN    0         5                     [::]:5902                [::]:*        users:(("Xtigervnc",pid=4404,fd=8))                                            
LISTEN    0         5                     [::]:5903                [::]:*        users:(("Xtigervnc",pid=4453,fd=8))
$ ss -ltp | grep vnc | sed -r 's/^.*:([0-9]+).*pid=([0-9]+).*$/\1 \2/' | sort -u
5901 3193
5902 4404
5903 4453

うまくいく.

grep

$ ss -ltp | grep vnc | grep -oP ':\K(\d+).*pid=\K(\d+)' | sort -u
3193
4404
4453

最後にマッチした部分のみが抽出されてしまう.

参考