homepostsnotesabout

NixOS で Kubernetes を構築する Part 2: NixOS を管理する

k8s を自宅で動かすために何故か血迷って NixOS で構築するメモ。

今回の作業範囲は、nixos の flake 化 と 適当な設定迄となる。

これまでとこれからの流れ

  1. NixOS で Kubernetes を構築する Part 1: NixOS をインストールする
  2. NixOS で Kubernetes を構築する Part 2: NixOS を管理する <- いまここ
  3. 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 できるようになっていれば成功、うまく行かない場合は再起動、それでも失敗ならログを見ながら設定を見直す。