NixOS で Kubernetes を構築する Part 2: NixOS を管理する
k8s を自宅で動かすために何故か血迷って NixOS で構築するメモ。
今回の作業範囲は、nixos の flake 化 と 適当な設定迄となる。
これまでとこれからの流れ
- NixOS で Kubernetes を構築する Part 1: NixOS をインストールする
- NixOS で Kubernetes を構築する Part 2: NixOS を管理する <- いまここ
- NixOS で Kubernetes を構築する Part 3: Kubernetes を構築する
flake 化
現在の NixOS のデフォルトの設定では flake が有効になっていないので、flake を有効にする。
/etc/nixos/configuration.nix
に以下の設定を追加する。
{ config, lib, pkgs, ... }:
{
# 下記行を追加
nix.settings.experimental-features = [ "nix-command" "flakes" ];
}
設定を追加したら再ビルドして反映。
nixos-rebuild switch
設定の flake 化
適当なディレクトリ(ここではk8s-shirase
)を作成して nixos の設定ファイルをコピーする。
mkdir -p ~/k8s-shirase
cp -r /etc/nixos/* ~/k8s-shirase
cd ~/k8s-shirase
以下作業は ~/k8s-shirase
で行う。
次に flake ファイルの作成。
nix flake init
そうすると以下のようなファイルが作成される。
このファイルをゴリゴリに編集していく。
{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = { self, nixpkgs }: {
packages.x86_64-linux.hello = nixpkgs.legacyPackages.x86_64-linux.hello;
packages.x86_64-linux.default = self.packages.x86_64-linux.hello;
};
}
先程コピーした設定ファイルを flake に読み込ませる。
あと不要なパッケージは削除しておく。
具体的には outputs
の中に nixosConfigurations
を追加して、configuration.nix
を読み込ませる。
Flakes - NixOS Wiki に詳細が書かれているので要参照。
{
# outputs 中にnixosConfigurationsを追加
outputs = { self, nixpkgs }: {
nixosConfigurations."shirase" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
];
};
};
}
最後に flake.nix
をビルドして反映させる。
sudo nixos-rebuild switch --flake .#shirase
成功したら flake 化完了。
設定の追加
configuration.nix
に設定を追加していく。
ここでは git, openssh, resolved, avahi を有効にしておく。
k8s 関係は後の記事で追加する。
{
# enable git
programs.git.enable = true;
# enable openssh
services.openssh = {
enable = true;
settings.PasswordAuthentication = true;
};
# enable systemd-resolved
services.resolved = {
enable = true;
fallbackDns = [
"1.1.1.1"
"1.0.0.1"
"2606:4700:4700::1111"
"2606:4700:4700::1001"
];
};
# enable avahi
services.avahi = {
enable = true;
nssmdns4 = true;
publish = {
enable = true;
addresses = true;
};
};
}
設定を追加したら再ビルドして反映。
sudo nixos-rebuild switch --flake .#shirase
これで mdns で ssh できるようになっていれば成功、うまく行かない場合は再起動、それでも失敗ならログを見ながら設定を見直す。