update
This commit is contained in:
parent
a73c6b0943
commit
4036006d7f
4 changed files with 370 additions and 269 deletions
14
flake.lock
generated
14
flake.lock
generated
|
@ -5,11 +5,11 @@
|
|||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694529238,
|
||||
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -20,16 +20,16 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1700403855,
|
||||
"narHash": "sha256-Q0Uzjik9kUTN9pd/kp52XJi5kletBhy29ctBlAG+III=",
|
||||
"lastModified": 1720386169,
|
||||
"narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0c5678df521e1407884205fe3ce3cf1d7df297db",
|
||||
"rev": "194846768975b7ad2c4988bdb82572c00222c0d7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-23.05",
|
||||
"ref": "nixos-24.05",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
|
|
519
flake.nix
519
flake.nix
|
@ -3,24 +3,33 @@
|
|||
|
||||
inputs = {
|
||||
nixpkgs = {
|
||||
url = "nixpkgs/nixos-23.05";
|
||||
url = "nixpkgs/nixos-24.05";
|
||||
};
|
||||
flake-utils = {
|
||||
url = "github:numtide/flake-utils";
|
||||
};
|
||||
};
|
||||
outputs = { self, nixpkgs, flake-utils, ... }@inputs:
|
||||
outputs = {
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-utils,
|
||||
...
|
||||
} @ inputs:
|
||||
flake-utils.lib.eachDefaultSystem
|
||||
(system:
|
||||
let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
};
|
||||
arch = {
|
||||
(
|
||||
system: let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
};
|
||||
arch =
|
||||
{
|
||||
"x86_64-linux" = "amd64";
|
||||
"aarch64-linux" = "arm64";
|
||||
}.${system};
|
||||
hashes = builtins.fromJSON (builtins.readFile ./hashes.json) // {
|
||||
}
|
||||
.${system};
|
||||
hashes =
|
||||
builtins.fromJSON (builtins.readFile ./hashes.json)
|
||||
// {
|
||||
crictl = {
|
||||
"amd64" = {
|
||||
"1.28.0" = "sha256-jceHdPfL6veHmU04buxmPwo88k3h6kiTWYCWyznvJQg=";
|
||||
|
@ -36,7 +45,8 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
kubePackage = pname: version: pkgs.stdenvNoCC.mkDerivation {
|
||||
kubePackage = pname: version:
|
||||
pkgs.stdenvNoCC.mkDerivation {
|
||||
pname = pname;
|
||||
version = version;
|
||||
src = pkgs.fetchurl {
|
||||
|
@ -64,150 +74,149 @@
|
|||
--zsh <($out/bin/${pname} completion zsh)
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
apps = {
|
||||
hashes =
|
||||
let
|
||||
py = pkgs.python3.withPackages (p: with p; [
|
||||
requests
|
||||
]);
|
||||
program = pkgs.writeScript "program" ''
|
||||
${py}/bin/python3 gethashes.py
|
||||
'';
|
||||
in
|
||||
{
|
||||
type = "app";
|
||||
program = "${program}";
|
||||
};
|
||||
in {
|
||||
apps = {
|
||||
hashes = let
|
||||
py = pkgs.python3.withPackages (p:
|
||||
with p; [
|
||||
requests
|
||||
]);
|
||||
program = pkgs.writeScript "program" ''
|
||||
${py}/bin/python3 gethashes.py
|
||||
'';
|
||||
in {
|
||||
type = "app";
|
||||
program = "${program}";
|
||||
};
|
||||
packages = {
|
||||
kubeadm = (version: kubePackage "kubeadm" version);
|
||||
kubectl = (version: kubePackage "kubectl" version);
|
||||
kubelet = (version: kubePackage "kubelet" version);
|
||||
fstab-cifs =
|
||||
let
|
||||
pname = "fstab-cifs";
|
||||
buildInputs = [
|
||||
pkgs.bash
|
||||
pkgs.cifs-utils
|
||||
pkgs.coreutils
|
||||
pkgs.jq
|
||||
pkgs.keyutils
|
||||
pkgs.util-linux
|
||||
pkgs.which
|
||||
];
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
inherit pname;
|
||||
name = pname;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "fstab";
|
||||
repo = "cifs";
|
||||
rev = "3b640936ef51614d3c1ad68cba50c4db5da3d61b";
|
||||
hash = "sha256-C5ze3CWyDxdWJ9cYWUmjKVPCrrdUYXP2JvlnRcW/lgg=";
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
pkgs.makeWrapper
|
||||
];
|
||||
buildInputs = buildInputs;
|
||||
dontUnpack = true;
|
||||
dontPatch = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
install -d $out/bin
|
||||
install $src/cifs -m 0555 $out/bin/cifs
|
||||
wrapProgram $out/bin/cifs --prefix PATH : ${pkgs.lib.makeBinPath buildInputs}
|
||||
'';
|
||||
meta = {
|
||||
homepage = "https://github.com/fstab/cifs";
|
||||
description = "Driver for CIFS (SMB, Samba, Windows Share) network filesystems as Kubernetes volumes.";
|
||||
longDescription = ''
|
||||
Docker containers running in Kubernetes have an
|
||||
ephemeral file system: Once a container is
|
||||
terminated, all files are gone. In order to store
|
||||
persistent data in Kubernetes, you need to mount a
|
||||
Persistent Volume into your container. Kubernetes
|
||||
has built-in support for network filesystems found
|
||||
in the most common cloud providers, like Amazon's
|
||||
EBS, Microsoft's Azure disk, etc. However, some
|
||||
cloud hosting services, like the Hetzner cloud,
|
||||
provide network storage using the CIFS (SMB, Samba,
|
||||
Windows Share) protocol, which is not natively
|
||||
supported in Kubernetes.
|
||||
|
||||
Fortunately, Kubernetes provides Flexvolume, which
|
||||
is a plugin mechanism enabling users to write their
|
||||
own drivers. There are a few flexvolume drivers for
|
||||
CIFS out there, but for different reasons none of
|
||||
them seemed to work for me. So I wrote my own, which
|
||||
can be found on github.com/fstab/cifs.
|
||||
'';
|
||||
license = pkgs.lib.licenses.mit;
|
||||
};
|
||||
|
||||
};
|
||||
crictl =
|
||||
let
|
||||
pname = "crictl";
|
||||
version = "1.28.0";
|
||||
in
|
||||
pkgs.stdenvNoCC.mkDerivation {
|
||||
inherit pname version;
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://github.com/kubernetes-sigs/cri-tools/releases/download/v${version}/${pname}-v${version}-linux-${arch}.tar.gz";
|
||||
hash = hashes.${pname}.${arch}.${version};
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
pkgs.autoPatchelfHook
|
||||
];
|
||||
setSourceRoot = "sourceRoot=`pwd`";
|
||||
dontUnpack = false;
|
||||
dontPatch = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
install -d $out/bin
|
||||
install ${pname} -m 0555 $out/bin/${pname}
|
||||
'';
|
||||
};
|
||||
cni =
|
||||
let
|
||||
pname = "cni";
|
||||
version = "1.2.0";
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
pname = pname;
|
||||
version = version;
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://github.com/containernetworking/plugins/releases/download/v${version}/cni-plugins-linux-${arch}-v${version}.tgz";
|
||||
hash = hashes.${pname}.${arch}.${version};
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
pkgs.autoPatchelfHook
|
||||
];
|
||||
setSourceRoot = "sourceRoot=`pwd`";
|
||||
dontPatch = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
install -d $out/bin
|
||||
install -m 0555 `ls | grep -v env-vars` $out/bin
|
||||
'';
|
||||
};
|
||||
packages = {
|
||||
kubeadm = version: kubePackage "kubeadm" version;
|
||||
kubectl = version: kubePackage "kubectl" version;
|
||||
kubelet = version: kubePackage "kubelet" version;
|
||||
fstab-cifs = let
|
||||
pname = "fstab-cifs";
|
||||
buildInputs = [
|
||||
pkgs.bash
|
||||
pkgs.cifs-utils
|
||||
pkgs.coreutils
|
||||
pkgs.jq
|
||||
pkgs.keyutils
|
||||
pkgs.util-linux
|
||||
pkgs.which
|
||||
];
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
inherit pname;
|
||||
name = pname;
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "fstab";
|
||||
repo = "cifs";
|
||||
rev = "3b640936ef51614d3c1ad68cba50c4db5da3d61b";
|
||||
hash = "sha256-C5ze3CWyDxdWJ9cYWUmjKVPCrrdUYXP2JvlnRcW/lgg=";
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
pkgs.makeWrapper
|
||||
];
|
||||
buildInputs = buildInputs;
|
||||
dontUnpack = true;
|
||||
dontPatch = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
install -d $out/bin
|
||||
install $src/cifs -m 0555 $out/bin/cifs
|
||||
wrapProgram $out/bin/cifs --prefix PATH : ${pkgs.lib.makeBinPath buildInputs}
|
||||
'';
|
||||
meta = {
|
||||
homepage = "https://github.com/fstab/cifs";
|
||||
description = "Driver for CIFS (SMB, Samba, Windows Share) network filesystems as Kubernetes volumes.";
|
||||
longDescription = ''
|
||||
Docker containers running in Kubernetes have an
|
||||
ephemeral file system: Once a container is
|
||||
terminated, all files are gone. In order to store
|
||||
persistent data in Kubernetes, you need to mount a
|
||||
Persistent Volume into your container. Kubernetes
|
||||
has built-in support for network filesystems found
|
||||
in the most common cloud providers, like Amazon's
|
||||
EBS, Microsoft's Azure disk, etc. However, some
|
||||
cloud hosting services, like the Hetzner cloud,
|
||||
provide network storage using the CIFS (SMB, Samba,
|
||||
Windows Share) protocol, which is not natively
|
||||
supported in Kubernetes.
|
||||
|
||||
};
|
||||
}
|
||||
) // {
|
||||
nixosModules.kubernetes = { config, lib, pkgs, name, ... }:
|
||||
let
|
||||
cfg = config.jk8s;
|
||||
in
|
||||
{
|
||||
options = with lib; {
|
||||
jk8s = mkOption {
|
||||
type = with types; submodule {
|
||||
Fortunately, Kubernetes provides Flexvolume, which
|
||||
is a plugin mechanism enabling users to write their
|
||||
own drivers. There are a few flexvolume drivers for
|
||||
CIFS out there, but for different reasons none of
|
||||
them seemed to work for me. So I wrote my own, which
|
||||
can be found on github.com/fstab/cifs.
|
||||
'';
|
||||
license = pkgs.lib.licenses.mit;
|
||||
};
|
||||
};
|
||||
crictl = let
|
||||
pname = "crictl";
|
||||
version = "1.28.0";
|
||||
in
|
||||
pkgs.stdenvNoCC.mkDerivation {
|
||||
inherit pname version;
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://github.com/kubernetes-sigs/cri-tools/releases/download/v${version}/${pname}-v${version}-linux-${arch}.tar.gz";
|
||||
hash = hashes.${pname}.${arch}.${version};
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
pkgs.autoPatchelfHook
|
||||
];
|
||||
setSourceRoot = "sourceRoot=`pwd`";
|
||||
dontUnpack = false;
|
||||
dontPatch = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
install -d $out/bin
|
||||
install ${pname} -m 0555 $out/bin/${pname}
|
||||
'';
|
||||
};
|
||||
cni = let
|
||||
pname = "cni";
|
||||
version = "1.2.0";
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
pname = pname;
|
||||
version = version;
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://github.com/containernetworking/plugins/releases/download/v${version}/cni-plugins-linux-${arch}-v${version}.tgz";
|
||||
hash = hashes.${pname}.${arch}.${version};
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
pkgs.autoPatchelfHook
|
||||
];
|
||||
setSourceRoot = "sourceRoot=`pwd`";
|
||||
dontPatch = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
install -d $out/bin
|
||||
install -m 0555 `ls | grep -v env-vars` $out/bin
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
)
|
||||
// {
|
||||
nixosModules.kubernetes = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
name,
|
||||
...
|
||||
}: let
|
||||
cfg = config.jk8s;
|
||||
in {
|
||||
options = with lib; {
|
||||
jk8s = mkOption {
|
||||
type = with types;
|
||||
submodule {
|
||||
options = {
|
||||
enable = mkEnableOption "Kubernetes";
|
||||
package_versions = mkOption {
|
||||
|
@ -236,7 +245,7 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
default = { };
|
||||
default = {};
|
||||
};
|
||||
service_subnet = mkOption {
|
||||
type = str;
|
||||
|
@ -245,12 +254,13 @@
|
|||
type = str;
|
||||
};
|
||||
hosts = mkOption {
|
||||
type = attrsOf
|
||||
type =
|
||||
attrsOf
|
||||
(
|
||||
submodule {
|
||||
options = {
|
||||
role = mkOption {
|
||||
type = types.enum [ "etcd" "master+etcd" "master" "worker" ];
|
||||
type = types.enum ["etcd" "master+etcd" "master" "worker"];
|
||||
};
|
||||
domain = mkOption {
|
||||
type = str;
|
||||
|
@ -306,13 +316,14 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
config = with lib; mkIf cfg.enable (
|
||||
};
|
||||
config = with lib;
|
||||
mkIf cfg.enable (
|
||||
let
|
||||
kubeadm = (self.packages.${pkgs.system}.kubeadm cfg.package_versions.kubeadm);
|
||||
kubectl = (self.packages.${pkgs.system}.kubectl cfg.package_versions.kubectl);
|
||||
kubelet = (self.packages.${pkgs.system}.kubelet cfg.package_versions.kubelet);
|
||||
kubeadm = self.packages.${pkgs.system}.kubeadm cfg.package_versions.kubeadm;
|
||||
kubectl = self.packages.${pkgs.system}.kubectl cfg.package_versions.kubectl;
|
||||
kubelet = self.packages.${pkgs.system}.kubelet cfg.package_versions.kubelet;
|
||||
|
||||
ca-config-json = pkgs.writeText "ca-config-json" (
|
||||
builtins.toJSON {
|
||||
|
@ -427,10 +438,7 @@
|
|||
};
|
||||
}
|
||||
);
|
||||
|
||||
in
|
||||
{
|
||||
|
||||
in {
|
||||
deployment.keys."private_key" = {
|
||||
text = cfg.hosts.${name}.private_key;
|
||||
destDir = "/etc/wireguard";
|
||||
|
@ -479,46 +487,56 @@
|
|||
services.openssh.openFirewall = false;
|
||||
systemd.enableUnifiedCgroupHierarchy = true;
|
||||
|
||||
environment.systemPackages =
|
||||
let
|
||||
endpoints = concatStringsSep "," (
|
||||
map
|
||||
(
|
||||
n: "https://${cfg.hosts.${n}.wireguard_subnet.address}:2379"
|
||||
)
|
||||
(
|
||||
filter (n: cfg.hosts.${n}.role == "etcd" || cfg.hosts.${n}.role == "master+etcd") (attrNames cfg.hosts)
|
||||
)
|
||||
);
|
||||
etcdctl = pkgs.writeShellScriptBin "etcdctl" ''
|
||||
export ETCDCTL_API=3
|
||||
export ETCDCTL_CERT=${if cfg.hosts.${name}.role == "etcd" then "/var/lib/etcd/healthcheck-client.pem" else "/etc/kubernetes/pki/etcd/healthcheck-client.crt"}
|
||||
export ETCDCTL_KEY=${if cfg.hosts.${name}.role == "etcd" then "/var/lib/etcd/healthcheck-client-key.pem" else "/etc/kubernetes/pki/etcd/healthcheck-client.key"}
|
||||
export ETCDCTL_CACERT=${if cfg.hosts.${name}.role == "etcd" then cfg.etcd.certPath else "/etc/kubernetes/pki/etcd/ca.crt"}
|
||||
#export ETCDCTL_ENDPOINTS=${endpoints}
|
||||
export ETCDCTL_ENDPOINTS=https://${cfg.hosts.${name}.wireguard_subnet.address}:2379
|
||||
exec ${pkgs.etcd_3_5}/bin/etcdctl "$@"
|
||||
'';
|
||||
in
|
||||
[
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") self.packages.${pkgs.system}.cni)
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") self.packages.${pkgs.system}.crictl)
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubeadm)
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubectl)
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubelet)
|
||||
(lib.mkIf (builtins.elem cfg.hosts.${name}.role [ "etcd" "master+etcd" ]) etcdctl)
|
||||
pkgs.cfssl
|
||||
pkgs.cifs-utils
|
||||
pkgs.conntrack-tools
|
||||
pkgs.ethtool
|
||||
pkgs.file
|
||||
pkgs.iptables
|
||||
pkgs.keyutils
|
||||
pkgs.nfs-utils
|
||||
pkgs.socat
|
||||
pkgs.wireguard-tools
|
||||
pkgs.wireshark-cli
|
||||
];
|
||||
environment.systemPackages = let
|
||||
endpoints = concatStringsSep "," (
|
||||
map
|
||||
(
|
||||
n: "https://${cfg.hosts.${n}.wireguard_subnet.address}:2379"
|
||||
)
|
||||
(
|
||||
filter (n: cfg.hosts.${n}.role == "etcd" || cfg.hosts.${n}.role == "master+etcd") (attrNames cfg.hosts)
|
||||
)
|
||||
);
|
||||
etcdctl = pkgs.writeShellScriptBin "etcdctl" ''
|
||||
export ETCDCTL_API=3
|
||||
export ETCDCTL_CERT=${
|
||||
if cfg.hosts.${name}.role == "etcd"
|
||||
then "/var/lib/etcd/healthcheck-client.pem"
|
||||
else "/etc/kubernetes/pki/etcd/healthcheck-client.crt"
|
||||
}
|
||||
export ETCDCTL_KEY=${
|
||||
if cfg.hosts.${name}.role == "etcd"
|
||||
then "/var/lib/etcd/healthcheck-client-key.pem"
|
||||
else "/etc/kubernetes/pki/etcd/healthcheck-client.key"
|
||||
}
|
||||
export ETCDCTL_CACERT=${
|
||||
if cfg.hosts.${name}.role == "etcd"
|
||||
then cfg.etcd.certPath
|
||||
else "/etc/kubernetes/pki/etcd/ca.crt"
|
||||
}
|
||||
#export ETCDCTL_ENDPOINTS=${endpoints}
|
||||
export ETCDCTL_ENDPOINTS=https://${cfg.hosts.${name}.wireguard_subnet.address}:2379
|
||||
exec ${pkgs.etcd_3_5}/bin/etcdctl "$@"
|
||||
'';
|
||||
in [
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") self.packages.${pkgs.system}.cni)
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") self.packages.${pkgs.system}.crictl)
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubeadm)
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubectl)
|
||||
(lib.mkIf (cfg.hosts.${name}.role != "etcd") kubelet)
|
||||
(lib.mkIf (builtins.elem cfg.hosts.${name}.role ["etcd" "master+etcd"]) etcdctl)
|
||||
pkgs.cfssl
|
||||
pkgs.cifs-utils
|
||||
pkgs.conntrack-tools
|
||||
pkgs.ethtool
|
||||
pkgs.file
|
||||
pkgs.iptables
|
||||
pkgs.keyutils
|
||||
pkgs.nfs-utils
|
||||
pkgs.socat
|
||||
pkgs.wireguard-tools
|
||||
pkgs.wireshark-cli
|
||||
];
|
||||
|
||||
virtualisation.containerd = {
|
||||
enable = true;
|
||||
|
@ -618,7 +636,8 @@
|
|||
ListenPort = cfg.hosts.${name}.endpoint.port;
|
||||
PrivateKeyFile = "/etc/wireguard/private_key";
|
||||
};
|
||||
wireguardPeers = map
|
||||
wireguardPeers =
|
||||
map
|
||||
(
|
||||
n: {
|
||||
wireguardPeerConfig = {
|
||||
|
@ -648,7 +667,8 @@
|
|||
DHCP = "no";
|
||||
IPForward = "yes";
|
||||
};
|
||||
addresses = map
|
||||
addresses =
|
||||
map
|
||||
(
|
||||
n: {
|
||||
addressConfig = {
|
||||
|
@ -660,7 +680,8 @@
|
|||
filter (n: n == name) (attrNames cfg.hosts)
|
||||
);
|
||||
|
||||
routes = map
|
||||
routes =
|
||||
map
|
||||
(
|
||||
n: {
|
||||
routeConfig = {
|
||||
|
@ -675,28 +696,28 @@
|
|||
};
|
||||
|
||||
systemd.services.etcd.preStart =
|
||||
if
|
||||
(cfg.hosts.${name}.role == "etcd")
|
||||
then
|
||||
''
|
||||
cd /var/lib/etcd
|
||||
if [ ! -f server.pem ]
|
||||
then
|
||||
cat ${server-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=server - | ${pkgs.cfssl}/bin/cfssljson -bare server
|
||||
fi
|
||||
if [ ! -f peer.pem ]
|
||||
then
|
||||
cat ${peer-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=peer - | ${pkgs.cfssl}/bin/cfssljson -bare peer
|
||||
fi
|
||||
if [ ! -f healthcheck-client.pem ]
|
||||
then
|
||||
cat ${healthcheck-client-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=client - | ${pkgs.cfssl}/bin/cfssljson -bare healthcheck-client
|
||||
fi
|
||||
''
|
||||
else
|
||||
"";
|
||||
if (cfg.hosts.${name}.role == "etcd")
|
||||
then ''
|
||||
cd /var/lib/etcd
|
||||
if [ ! -f server.pem ]
|
||||
then
|
||||
cat ${server-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=server - | ${pkgs.cfssl}/bin/cfssljson -bare server
|
||||
fi
|
||||
if [ ! -f peer.pem ]
|
||||
then
|
||||
cat ${peer-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=peer - | ${pkgs.cfssl}/bin/cfssljson -bare peer
|
||||
fi
|
||||
if [ ! -f healthcheck-client.pem ]
|
||||
then
|
||||
cat ${healthcheck-client-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=client - | ${pkgs.cfssl}/bin/cfssljson -bare healthcheck-client
|
||||
fi
|
||||
''
|
||||
else "";
|
||||
|
||||
systemd.services.etcd.serviceConfig.ExecStart = if (cfg.hosts.${name}.role == "etcd") then (lib.mkForce "${pkgs.etcd_3_5}/bin/etcd") else "";
|
||||
systemd.services.etcd.serviceConfig.ExecStart =
|
||||
if (cfg.hosts.${name}.role == "etcd")
|
||||
then (lib.mkForce "${pkgs.etcd_3_5}/bin/etcd")
|
||||
else "";
|
||||
|
||||
services.etcd = lib.mkIf (cfg.hosts.${name}.role == "etcd") {
|
||||
enable = true;
|
||||
|
@ -707,7 +728,8 @@
|
|||
initialAdvertisePeerUrls = [
|
||||
"https://${cfg.hosts.${name}.wireguard_subnet.address}:2380"
|
||||
];
|
||||
initialCluster = map
|
||||
initialCluster =
|
||||
map
|
||||
(
|
||||
n: "${n}.${cfg.hosts.${n}.domain}=https://${cfg.hosts.${n}.wireguard_subnet.address}:2380"
|
||||
)
|
||||
|
@ -738,11 +760,8 @@
|
|||
};
|
||||
};
|
||||
|
||||
|
||||
systemd.services."kubelet" =
|
||||
let
|
||||
|
||||
in
|
||||
systemd.services."kubelet" = let
|
||||
in
|
||||
lib.mkIf (cfg.hosts.${name}.role != "etcd") {
|
||||
enable = true;
|
||||
description = "kubelet";
|
||||
|
@ -758,24 +777,22 @@
|
|||
];
|
||||
unitConfig = {
|
||||
StartLimitIntervalSec = 0;
|
||||
After = [ "network-online.target" ];
|
||||
Wants = [ "network-online.target" ];
|
||||
After = ["network-online.target"];
|
||||
Wants = ["network-online.target"];
|
||||
};
|
||||
preStart =
|
||||
if (cfg.hosts.${name}.role == "master")
|
||||
then
|
||||
''
|
||||
mkdir -p /etc/kubernetes/pki
|
||||
cd /etc/kubernetes/pki
|
||||
if [ ! -f apiserver-etcd-client.crt ]
|
||||
then
|
||||
cat ${apiserver-etcd-client-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=client - | ${pkgs.cfssl}/bin/cfssljson -bare apiserver-etcd-client
|
||||
mv apiserver-etcd-client.pem apiserver-etcd-client.crt
|
||||
mv apiserver-etcd-client-key.pem apiserver-etcd-client.key
|
||||
fi
|
||||
''
|
||||
else
|
||||
"";
|
||||
then ''
|
||||
mkdir -p /etc/kubernetes/pki
|
||||
cd /etc/kubernetes/pki
|
||||
if [ ! -f apiserver-etcd-client.crt ]
|
||||
then
|
||||
cat ${apiserver-etcd-client-csr-json} | ${pkgs.cfssl}/bin/cfssl gencert -ca=${cfg.etcd.certPath} -ca-key=${cfg.etcd.keyPath} -config=${ca-config-json} -profile=client - | ${pkgs.cfssl}/bin/cfssljson -bare apiserver-etcd-client
|
||||
mv apiserver-etcd-client.pem apiserver-etcd-client.crt
|
||||
mv apiserver-etcd-client-key.pem apiserver-etcd-client.key
|
||||
fi
|
||||
''
|
||||
else "";
|
||||
serviceConfig = {
|
||||
Slice = "kubernetes.slice";
|
||||
CPUAccounting = true;
|
||||
|
@ -793,10 +810,10 @@
|
|||
Restart = "always";
|
||||
RestartSec = "10s";
|
||||
};
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wantedBy = ["multi-user.target"];
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
10
gethashes.py
10
gethashes.py
|
@ -21,7 +21,7 @@ for pname in ["kubeadm", "kubectl", "kubelet"]:
|
|||
if arch not in hashes[pname]:
|
||||
hashes[pname][arch] = {}
|
||||
for major in [1]:
|
||||
for minor in [26, 27, 28, 29]:
|
||||
for minor in [26, 27, 28, 29, 30]:
|
||||
match minor:
|
||||
case 23:
|
||||
patch_max = 17
|
||||
|
@ -32,13 +32,13 @@ for pname in ["kubeadm", "kubectl", "kubelet"]:
|
|||
case 26:
|
||||
patch_max = 14
|
||||
case 27:
|
||||
patch_max = 11
|
||||
patch_max = 15
|
||||
case 28:
|
||||
patch_max = 8
|
||||
patch_max = 11
|
||||
case 29:
|
||||
patch_max = 6
|
||||
case 30:
|
||||
patch_max = 2
|
||||
# case 30:
|
||||
# patch_max = 1
|
||||
case _:
|
||||
raise ValueError
|
||||
for patch in range(0, patch_max + 1):
|
||||
|
|
96
hashes.json
96
hashes.json
|
@ -73,6 +73,10 @@
|
|||
"1.27.1": "sha256-x9MtaY6ZuQ+HcCUQTLSp8/jHB+meaBeUDyYBNbbRrQo=",
|
||||
"1.27.10": "sha256-I5helYRDrBqr2+7txnU1irwGOOtYBweCn9QrCZagquU=",
|
||||
"1.27.11": "sha256-Mb9EanEvsIGQg4w10fTJOw+XVwjFljSl3D2JFaJByD4=",
|
||||
"1.27.12": "sha256-Bu42zIDP38Ack311B4PTymFpo9p2OCx6890XLZ9r+k4=",
|
||||
"1.27.13": "sha256-uIwwtwZ/CVt/oCxVYMxQ1uaaWp/sxgbvR33H78hkU7k=",
|
||||
"1.27.14": "sha256-HOJkZD5SFJThEbHJ7llpSlTR8kZLusOnpTEyT/6uAYI=",
|
||||
"1.27.15": "sha256-5vgxPiE6inXe2oHt9EXQ14VJP2oKDKrfMeiNFztgeUM=",
|
||||
"1.27.2": "sha256-lcS/t5KZAFBqQt5NkigPBu/mtH4KMsvB9aHtc3WSl3o=",
|
||||
"1.27.3": "sha256-LNZj8lwkkL1hSmwK2QiaR+8xXK8NvfeO/Xh9VlOxxuM=",
|
||||
"1.27.4": "sha256-e+Idb7Nwf7vo8NsEA9tiNMivdzuUH5Mb+CSHWe6Yi80=",
|
||||
|
@ -83,6 +87,8 @@
|
|||
"1.27.9": "sha256-eN3aw3b6LwQRYCLLRO05zLnLAQTgXFshsiDVFR5cD4Y=",
|
||||
"1.28.0": "sha256-Eupov+8Dd8ztwafJigXqdpB97Lzx4eyFimCnubcyEbs=",
|
||||
"1.28.1": "sha256-YTTbyS3Lg8O64agDD3uzkUGbXRPqlLrdOnm37OdbJzY=",
|
||||
"1.28.10": "sha256-GjRNNHVcXwBRIDCPCacw51ZMj4V95mBra8Xximlgblo=",
|
||||
"1.28.11": "sha256-Hyx8aXNmmKoTpZxnBawmt7Z1LZZRMwYFNpNXwayZx8Y=",
|
||||
"1.28.2": "sha256-akgIIwZhxpQxFD2y4gDqLQIcfxsQheY1NYMHVHExDQA=",
|
||||
"1.28.3": "sha256-zjhIsd+lYuD6L5EaPY47sHugQO6nZlTWjiEzFciEasA=",
|
||||
"1.28.4": "sha256-tNJTG3zd94L1lVVDa8CYSFtfpsBa/M3uzw1i0h2E9b0=",
|
||||
|
@ -90,9 +96,17 @@
|
|||
"1.28.6": "sha256-vaPtqNUeh0akK1Nbfqt99SsJGnliJ8MhLcMJCajxtDE=",
|
||||
"1.28.7": "sha256-iqAFvfavQ+R/yBiyb0y582Gq6OxDkFGejUAzvmX77ys=",
|
||||
"1.28.8": "sha256-wRlGy/2WLhGXBiU0UUImz9cCMDSeY0P/Ps6/ylR27mQ=",
|
||||
"1.28.9": "sha256-pNis8KdMsdB9lqGjQUj1TGQgh0IhrxbY7JAtm//H74k=",
|
||||
"1.29.0": "sha256-Yp1GMGV8qs6cgZ/TeX9KcMOX+9QaKn5GSgUH2tZ11Sw=",
|
||||
"1.29.1": "sha256-1NgdkCC1UMiWN2+54FhqnxWjMhdYkNBhYZtSs+m8bL0=",
|
||||
"1.29.2": "sha256-LU5PqGhby/tmHLQQUM1HVvUKeqFH9oSS1RqZ+c39aaw="
|
||||
"1.29.2": "sha256-LU5PqGhby/tmHLQQUM1HVvUKeqFH9oSS1RqZ+c39aaw=",
|
||||
"1.29.3": "sha256-arqhIIv0C20fSeUYvWjIrkob4MW30+Rdh5eZmasHDYs=",
|
||||
"1.29.4": "sha256-6iCrBk9xarf2mjbXLfNAJXsxyXIeqG4c+dcLNZmd3uo=",
|
||||
"1.29.5": "sha256-5CTc2+ZhMUtsofzJRybrVUvD9DkrBguWJvnfjX1E1Cw=",
|
||||
"1.29.6": "sha256-jx4EB55hTdVJ42voEU7nAiUX1kbqcVtXeOfGqzU+s1Q=",
|
||||
"1.30.0": "sha256-KfQjLFDmUkq7o0Q/87mUjThpZNeeuN/vtAnh+KhDTBQ=",
|
||||
"1.30.1": "sha256-ZR+qO7v7No7QBGDk0RcyYUMQtpC3Z8UYEKe2OMwJYaI=",
|
||||
"1.30.2": "sha256-ZysMrirMzl6sEKH+TqaxZuW1GMecz3Gi++e1PCynQGI="
|
||||
},
|
||||
"arm64": {
|
||||
"1.23.0": "sha256-mJ0RcSjcqpI7LHqRegP0g2wbAj/h7nI1QeDjmwaLk6Y=",
|
||||
|
@ -167,6 +181,10 @@
|
|||
"1.27.1": "sha256-AkpZzW/HZ4S1l8DBzzAFJuhW6Mn++l+nlIFYkptzlVE=",
|
||||
"1.27.10": "sha256-7QRHFVp+lnriNICwazGywKqocefFnf2CriWwOh7M9uY=",
|
||||
"1.27.11": "sha256-uEUtbD8TMb6z1fpCRmqbyWY4p2xAmA26mCIwDyMMCFg=",
|
||||
"1.27.12": "sha256-501HwUtaJRz/lh3M6SzWMqvP0PukoH548KWlsnluS4Q=",
|
||||
"1.27.13": "sha256-8zS6BhL62lDpin6la2hrNcIvDjJD7CIQ8qaofoQaE58=",
|
||||
"1.27.14": "sha256-y4QOuDQEBHza/sCxUFQCPJCkdJG1bS3OuhBQBA83zH4=",
|
||||
"1.27.15": "sha256-V3YwtlxUuptinJxC41ugk5zgPcuPOPt5WD7DyduRQac=",
|
||||
"1.27.2": "sha256-jwHzY/fH+S3i8idhJKiVUDzcWmD/VJRAFwiA8pawh+s=",
|
||||
"1.27.3": "sha256-SV4hk+13nSVYS0tTJ5bCJw3w9xOe8V+4nceYBgNhXvQ=",
|
||||
"1.27.4": "sha256-tO3ooY7z0c+mHm+8qPyrAvju49B3DSMpSQ+nvpCkyuQ=",
|
||||
|
@ -177,6 +195,8 @@
|
|||
"1.27.9": "sha256-09AihCsLjkZhIi6IcySfWsr9vvUv0b+5gVKlgjUrPEA=",
|
||||
"1.28.0": "sha256-ubRz0tkTZVmxnrRlAGr3ffRcCYYs185mc6M6rlF/9as=",
|
||||
"1.28.1": "sha256-fS9okXRwpdZr0qfWKJf1nLSvrv+y8mwCivoRms2MP8g=",
|
||||
"1.28.10": "sha256-9oCdcu0b9v3kYOSOXHFMO8kvaA4yje+pvVkqeWNHtkQ=",
|
||||
"1.28.11": "sha256-FaAh/ezwiYnWtkr4c9icYXUNOgVkvuWMJI6v5cxN9DM=",
|
||||
"1.28.2": "sha256-AQeJqUz1EtkY7Eo++OxzTeoAYdiagpMFnvkQHKG/a/8=",
|
||||
"1.28.3": "sha256-3LN9eMzf6djdbxAOGI3cbj9VcNDEnbaEcAc2g7RToec=",
|
||||
"1.28.4": "sha256-pEIngAIJVENrjnarHFm2jFWBpUQy3T5WbEcJu0DI1Pk=",
|
||||
|
@ -184,9 +204,17 @@
|
|||
"1.28.6": "sha256-QpjK1GTpLuwZzfPmpgeoKh1iaucP7bp5VhdRUquYNFc=",
|
||||
"1.28.7": "sha256-9VbklJRzf5ehW/FbtLJ9Rfh0e0dzAs39It1hgWvAIgM=",
|
||||
"1.28.8": "sha256-4PR63GnvhOL2xCzDQbinkJBKkprRDtHCPC6CLsgE4kc=",
|
||||
"1.28.9": "sha256-zWrvrYFEqXcf1HBSn/FL4mdd97Vh98Vt7j/tT4EzLcQ=",
|
||||
"1.29.0": "sha256-u93uLUbS4WQ642I2mLRbE6ouhYYW1hxkLy9J5bsUyYA=",
|
||||
"1.29.1": "sha256-O/+MUMEExF5BbM6ZkXBsasRjZfDe+81U+M9Kzg+mjc8=",
|
||||
"1.29.2": "sha256-4Fcg/rnS1n7/JbAValwi4t43vi/6tOH00x6MUm+v0OE="
|
||||
"1.29.2": "sha256-4Fcg/rnS1n7/JbAValwi4t43vi/6tOH00x6MUm+v0OE=",
|
||||
"1.29.3": "sha256-zi5MIw+VTlmud+NMT/KuCMrTlwUFrh4htjN+bYOyFoI=",
|
||||
"1.29.4": "sha256-Q4KHqR4Iy+/sq3m+isiTqTXD2/boe+qJX7mfK8OM8G4=",
|
||||
"1.29.5": "sha256-1NuMUU8nZO3AOUYsIY280xZXf3byGyCbdumksfCOMQA=",
|
||||
"1.29.6": "sha256-O6aHnvSRzdhDNkcCDTRdhsDqjnf3JjdbxLVJWIi793g=",
|
||||
"1.30.0": "sha256-w2r9KJITA+bbjlgnTeFsYKgKHnUDD8PE6cTtYkm2tpY=",
|
||||
"1.30.1": "sha256-vaQjy0udBW+Zou8Ra98if628HDMJ+j122lcUJ6f0FHg=",
|
||||
"1.30.2": "sha256-cmh2K3r9RL8HYZmF3VLDdrY+R9c7j5o7CMxJYkqPvVU="
|
||||
}
|
||||
},
|
||||
"kubectl": {
|
||||
|
@ -263,6 +291,10 @@
|
|||
"1.27.1": "sha256-f+OnYtkm+waLrjLDmYgOlG6Mrz2QMHi+qbFp3NXBf20=",
|
||||
"1.27.10": "sha256-v7IZZDwo2YQvzq5RWQd28GmHg12T/Dy5sBSckRHHQaw=",
|
||||
"1.27.11": "sha256-euMnl4oe20NwAHDIb1/XchV5LGtYp+pwGSZH4NqEjik=",
|
||||
"1.27.12": "sha256-1jnto5vi3OQvvsIeA4lCq1c0VBcV4+pfspya12aGvX8=",
|
||||
"1.27.13": "sha256-6ZHxYxl8vYW7/yL2VqdNSLadta3fpDzATMoM9TKPV/E=",
|
||||
"1.27.14": "sha256-HSQxxou236nePNQP1m2XqaxzWTxIn5RnJJ7qQ+nBah4=",
|
||||
"1.27.15": "sha256-wSzxfsMPsWL49fsWjmfU5bfWgm4Ix2SKXxxrTpuiPzk=",
|
||||
"1.27.2": "sha256-TzjukD81swDTsAWpxr+5pGpX+S6JrmAu+cEpuR3GxaU=",
|
||||
"1.27.3": "sha256-+6bAYudUoSC8gQXN4TRN4gBFL+AUqHWeBuTux+0ligk=",
|
||||
"1.27.4": "sha256-RoW/z3MiYPcvzlg3noEuCRVX7x38G8gIQibHiR3WAo8=",
|
||||
|
@ -273,6 +305,8 @@
|
|||
"1.27.9": "sha256-0MqukQcil7KRXdZfbvMFXSdkbc6CHsZ9GNo1upqNyFs=",
|
||||
"1.28.0": "sha256-RxdmD9FGbsctWQALsdn1zckfrDHUkQQ8pis0OY4Hmc4=",
|
||||
"1.28.1": "sha256-56fW+dBvqzi0EoeFqoD2XFT2Z1oNKr72VSWd3YUidOE=",
|
||||
"1.28.10": "sha256-OJwXqXAKSwHrsFXjm4vAiGMwSXRA3eAEte2Q8qOgKNs=",
|
||||
"1.28.11": "sha256-Hbpj4aXJUg/FFsboF5JNknubg7jgglTI/iou22Xaepw=",
|
||||
"1.28.2": "sha256-ySJECwQ+XeGvo8E4L4xmOiXwVZeMvG6EI0k+wVdXnsU=",
|
||||
"1.28.3": "sha256-DGgMkIksQ+XOcI6RiCH5JEXR0kT5s9dRMCO8rppiRtE=",
|
||||
"1.28.4": "sha256-iTySBTrepu271OlZyHH1wh7c5BaYj5aL7FZdEVOD97g=",
|
||||
|
@ -280,9 +314,17 @@
|
|||
"1.28.6": "sha256-yDUf4GERGf02Y03T9T65TsGi1D7554uStIRt9cx6p+M=",
|
||||
"1.28.7": "sha256-r/QtMWdoXk2Ohv2grZxs5uxsBHvCTWCAQdVHF6GBkro=",
|
||||
"1.28.8": "sha256-4CqtXAusUslwcAuBRkW2LE8YtjQUQ5isNEh1268Qcvg=",
|
||||
"1.28.9": "sha256-tGk9CyL1CSUGlLEMdyfEK0J9VwrwTyBl/iOlXWwAUfE=",
|
||||
"1.29.0": "sha256-DgOrCWFj9hq2ELM/N/VXCdOvjhbk3MHraCiC74D5b9U=",
|
||||
"1.29.1": "sha256-aas6kx6Ca/esFNOLp8pjfWam/LHKDjMzosr98VSCr58=",
|
||||
"1.29.2": "sha256-eBbQZ3QPR/lJvoJqx2lDFnt7OjjE8MGLkC//qHeaWvo="
|
||||
"1.29.2": "sha256-eBbQZ3QPR/lJvoJqx2lDFnt7OjjE8MGLkC//qHeaWvo=",
|
||||
"1.29.3": "sha256-icBDXOx1J4+EtiuEi4wNPhWJfWlHtsWaSd3M2T1zEr8=",
|
||||
"1.29.4": "sha256-EONDhhw8sAEBYecDMHupB63Sru6v/GREd5rZFfmInIg=",
|
||||
"1.29.5": "sha256-YDyGgfwNhgnIUfnMWLz1XuuX4pNIluhY0CMqqNETg2Y=",
|
||||
"1.29.6": "sha256-M5VTyRmHTr47cZ6eH81otVvIh1+bWgBc9MAoc41U0wk=",
|
||||
"1.30.0": "sha256-fDgHwPXBswEQov8eVdodESptAJYgHxvrgbJp9YK10cU=",
|
||||
"1.30.1": "sha256-W4bwsG4aW6b48A4rAejtOUB3KcSZCu2pYfg6WG+XXoo=",
|
||||
"1.30.2": "sha256-xunEXOP4LJBmPjww2zsnwWfosZ2D7UBIthwQE/anxm4="
|
||||
},
|
||||
"arm64": {
|
||||
"1.23.0": "sha256-HXfWAn/I3+13Jgmtm9aPYRt+TOc6+pSfJwhK06krFf4=",
|
||||
|
@ -357,6 +399,10 @@
|
|||
"1.27.1": "sha256-/Ty48W5u2K7plVt24wJ6xCO20cxzVoZzENEoCC4tuRY=",
|
||||
"1.27.10": "sha256-LhmWN51aixMuBgb80988honhGIJjC3XMo7cTUSaEeHE=",
|
||||
"1.27.11": "sha256-0w4aqHPnjrN23e48eFqnjETt3FbOLvkB2sHODCxPULA=",
|
||||
"1.27.12": "sha256-v8bLcQQevA8EhAKYjszBB8//K4ZshkIxya2gWrMo5b8=",
|
||||
"1.27.13": "sha256-SDitjzkCySj2E51p66liscwkcVEcgoiFZQ1yjZcFlNE=",
|
||||
"1.27.14": "sha256-KfOh9SDZKd84hzxo3sc1GcHl5SEUDgHPnXcB97X/5PM=",
|
||||
"1.27.15": "sha256-a9a9MJLAqOU26OWlayKqq4erHlSkVWzk0b/ySTGA+4w=",
|
||||
"1.27.2": "sha256-GwlmaS45jv5x/ln5E+rsRP/URozBrNAL+Rwp+o/49Xg=",
|
||||
"1.27.3": "sha256-e7f+xOKOC1C2A9ZOR2KegSQIdRvR4M4Fmy/ug7Dj/28=",
|
||||
"1.27.4": "sha256-UXjLtR3P/yhsILyEfWTdNc1Zk7gaLjYJWBN3pSCmQl0=",
|
||||
|
@ -367,6 +413,8 @@
|
|||
"1.27.9": "sha256-vaR1U5/e2p2KhahLlnrzYa8mTQgmwSGyOwti7psAzS0=",
|
||||
"1.28.0": "sha256-9UhL2crGaxg8ZTq+0wImtWH1N9FTRsYFzIHZgJXxcXw=",
|
||||
"1.28.1": "sha256-RpVKYEt4SosNwWdUz8P6Jqq8qf1P/RCc0Ci/upnUkvY=",
|
||||
"1.28.10": "sha256-5lnSPUQsJwbevluWdCMmwKHh17XGlan+ff6Op0Asrug=",
|
||||
"1.28.11": "sha256-eYSpjVI2XRkLb1bKqWIzmnIotvQy5Yul8bHmDb7awnU=",
|
||||
"1.28.2": "sha256-6m2Jtneo2d8zGoITm7kNmWgTFTC5TqsmzuVhUx7/TFM=",
|
||||
"1.28.3": "sha256-BlEfA+NNjuNQvVVxeEXifr7DEWUm23xgCS7rM6R1ozc=",
|
||||
"1.28.4": "sha256-7fHhe0GJHsFdWd08xivNLNzksP2cLuBYsJZ7F1NEV9c=",
|
||||
|
@ -374,9 +422,17 @@
|
|||
"1.28.6": "sha256-DecFZZqAw/7wHfQ8wJJmEP4xSC9yiw+ZKBir2b3NLLk=",
|
||||
"1.28.7": "sha256-E9VHSVvepJsiP+Br/7bSvvlkNmNIR/dZEHZVqoD8mQ4=",
|
||||
"1.28.8": "sha256-k9YN02CTtMcZ8fG6/PWUN8F8siCTQcfJR3Hn3ZrNqzM=",
|
||||
"1.28.9": "sha256-4DQdOXMhP4CZ5/y79tHVBpZ7wrek+qw/s7Q0DyJumy8=",
|
||||
"1.29.0": "sha256-j3pL1rrpAKTdqxK9E5mqZSwNWepQjzm5EOER0kiJP/c=",
|
||||
"1.29.1": "sha256-ltbceyvc00TOWNF2McRSIl3lu/Wbg/08icM8Ypj7XYs=",
|
||||
"1.29.2": "sha256-NQfstCJM8FriFRqY1JMiU2JOd2IVmTbVNHsZ/gN2Vco="
|
||||
"1.29.2": "sha256-NQfstCJM8FriFRqY1JMiU2JOd2IVmTbVNHsZ/gN2Vco=",
|
||||
"1.29.3": "sha256-GRqWsn48auKLMw2kyb/vyVknYmcHJ99PzxJMnx1aRmo=",
|
||||
"1.29.4": "sha256-YVN0CO7crQZNczQ4Su1Qioqh6nhjEbh7UFRWouBTXTY=",
|
||||
"1.29.5": "sha256-nukWje8SrGpsDGQw4PcxdedW7SYttgQPiqISGtLB9i4=",
|
||||
"1.29.6": "sha256-IYFkiM869M8rlW7lj3r8W0lkwpSI9jdW9d3PCbDfW+k=",
|
||||
"1.30.0": "sha256-Zprwz1IHVymOpgqLbra3GbpEOpx9NfNtP7L9dRPox9I=",
|
||||
"1.30.1": "sha256-2QRGcZuBXjq/57LEbd+LP9oXWZ8DqzcNbkexWAwOhp4=",
|
||||
"1.30.2": "sha256-Vr7PBxBfus0rcPh/P2ls++0ibLSNbYntf2W6Ssrj8vg="
|
||||
}
|
||||
},
|
||||
"kubelet": {
|
||||
|
@ -453,6 +509,10 @@
|
|||
"1.27.1": "sha256-yyhF//DOQcQASJOT2nOSXSj77lTP63g0zU0R5iLL06c=",
|
||||
"1.27.10": "sha256-JaNL+Yu4opbqB/HrvLSWsea2xtoyR2lSiKfJn8jBviw=",
|
||||
"1.27.11": "sha256-LOkqXYmFuTvY/8T1UZzXm/L4RFkKo4Ioo9gJxb9ZhuA=",
|
||||
"1.27.12": "sha256-quhhohkTwnQijM2tFgmzcOUZjJ9LObiSSyCn/+fxSOA=",
|
||||
"1.27.13": "sha256-7WjfKnfzBXq0f1fqy26TEOkXMeT0PFijw7XIV9eNAIA=",
|
||||
"1.27.14": "sha256-8o3vpD+A+CzpCZQMG1e3HLofzw3m/Ecj55jvXHI3bCg=",
|
||||
"1.27.15": "sha256-wKtBTN0RbpZEyMFUrkplZcdcJgXix7aloEtWA37yuog=",
|
||||
"1.27.2": "sha256-oNEq/Ks7KDbeSkJ1WNBnvr3/BA6bMGsFEsk9nSoGZXk=",
|
||||
"1.27.3": "sha256-wOGNpqVYMM9JEOzXJhWXxm6j+PWM9E1K22vctuLm8L8=",
|
||||
"1.27.4": "sha256-OF9lh43ItI3w8r02lTX/JzOQUYtawswaFoTWVhkyRwQ=",
|
||||
|
@ -463,6 +523,8 @@
|
|||
"1.27.9": "sha256-7eYO6jrLrD8127I9exSPRc8WnruyCvEC084UH8C6xgw=",
|
||||
"1.28.0": "sha256-v7a5dxAJY/KHmjPl+6pZpSdrqCmpV6aBnJNunBRl+YE=",
|
||||
"1.28.1": "sha256-K8IjMvRPj80/zleHn9hz+XeUnr0mFXH7rjH7snE6XdM=",
|
||||
"1.28.10": "sha256-o2HnRKru9FOfBjbs0YJ8hSB6XysMKwqY27zhSYBh9Qk=",
|
||||
"1.28.11": "sha256-Iw8GNOpCpUpslncfEu7NbK3+C3arQcO8Oap8u+TfsS4=",
|
||||
"1.28.2": "sha256-F+24ZmNvFOzqrVjFbqsSr3qzvjx4QAr/loBjXZJ/EYU=",
|
||||
"1.28.3": "sha256-o6BYtLow2gH/4YAc04/K1YqQIqLTnggLSy4Ol0mnWtU=",
|
||||
"1.28.4": "sha256-2ypHO3PDdU1AEVkPLwqod2V2CEmVkMaw+LQL7Jaj6bo=",
|
||||
|
@ -470,9 +532,17 @@
|
|||
"1.28.6": "sha256-hQbfHyCl+LugWS9aTPXQzFQQR3COZky4hYBzVADQsm8=",
|
||||
"1.28.7": "sha256-EgsUlbq8Q2T34WqdD4uOa294MW0Efk9t53tVabBYE8c=",
|
||||
"1.28.8": "sha256-BJtBKlhhJVzTki9hKst5q1ETXhZsXYCs8S+6kXnuvww=",
|
||||
"1.28.9": "sha256-869Gz/EcZ1qA2R67OOvE6FqfgTzpPlbuEx5/6hSRt4Y=",
|
||||
"1.29.0": "sha256-4cOBN9uNh3fu2IE2RrWb9NItGbkBGrEdwo4uNPa4CgU=",
|
||||
"1.29.1": "sha256-Gxl1xY04vhqZqLy6RWSsSJr9IjsKvp8qsIu96J0kEqM=",
|
||||
"1.29.2": "sha256-9xqFA5tx/gjxwGOpPWGhyVLcj5qMa+mxP72sjw2f+WA="
|
||||
"1.29.2": "sha256-9xqFA5tx/gjxwGOpPWGhyVLcj5qMa+mxP72sjw2f+WA=",
|
||||
"1.29.3": "sha256-2LVaL4qHyM0sv4Z9dtHX+YtxmKdA2xm61u17i4E953E=",
|
||||
"1.29.4": "sha256-WFcfDtYlQ6m7rFQeUsFdg4UIMROkY+I67BNB0LUEOTk=",
|
||||
"1.29.5": "sha256-Jh3D88OE0TiDX+kaAgccZCr5SrsMylbrwEcZJARAlEw=",
|
||||
"1.29.6": "sha256-qUZ4nU/vZOb1kF29fcoB1MOr0wLQ2nlY/aqST+JynAs=",
|
||||
"1.30.0": "sha256-MqMuw9fn+LJkjJ3VA86e9jtK8dFnf1ta7XhG+wLWbxg=",
|
||||
"1.30.1": "sha256-h71uXenAdpxgXaX+23ejXIt2TjvaFjJEeIPJNdzyGdM=",
|
||||
"1.30.2": "sha256-aSOr5n7waa/KYcccWFAjhAQm6AKxmCmAVa86guEaTlI="
|
||||
},
|
||||
"arm64": {
|
||||
"1.23.0": "sha256-pUb7fMzmnEFj5KCxmjHzDqA5tORWDCP9bjAW4rLf0Nk=",
|
||||
|
@ -547,6 +617,10 @@
|
|||
"1.27.1": "sha256-27CdKX2SRXVlTbOO0vxifjWRPC1AAMNGE6xt5JlUV9A=",
|
||||
"1.27.10": "sha256-DtrcRO82vo2BBsrZlyNgwEd1QOLYwLvrOP2X/R14AdU=",
|
||||
"1.27.11": "sha256-6BmHqGT7R6/hT2X6TpN2C8GcQkM14PBUDGxyW3J84io=",
|
||||
"1.27.12": "sha256-DX0tJci5CdbOx8HCpb/lFCjsM+ql6LIJxxi3eYPp3Lo=",
|
||||
"1.27.13": "sha256-17+xTQsPwsQQdLrwJhfPmFif0Cn7NTnqAXgl42Nx8Zw=",
|
||||
"1.27.14": "sha256-Mcl6cjAhzMkKR6Fa0d4f/fWLoQmuqSLrNZrS/Ljozks=",
|
||||
"1.27.15": "sha256-rIq7JJ3XiiLZLigwbOmCP3484jzUuo27DzvTT0i2wSs=",
|
||||
"1.27.2": "sha256-gQzZphHp8ITlfJ7kZuM8MksiKNQkn/OMJYigzDIk8Q0=",
|
||||
"1.27.3": "sha256-KDj9VTQNWfd3171+WYn8cregyhmM9PP3I82ZVoWc6UI=",
|
||||
"1.27.4": "sha256-x1rY58fvBcDAIbIan+hukvZNseTBvIThuvRdjbuLqNE=",
|
||||
|
@ -557,6 +631,8 @@
|
|||
"1.27.9": "sha256-ihS8Nzn1yjsj0IMBwudp7ljI0c7LckO0axwJiud+/9c=",
|
||||
"1.28.0": "sha256-Bd0S41eDyrSWDohewOfQ5GGYm5QpfnvqkBjMvRXE3Ok=",
|
||||
"1.28.1": "sha256-m3+mSyeF2ko4doN3lh4if42mKcVqXfQ8obZl3Qe1bzw=",
|
||||
"1.28.10": "sha256-/q4WHjdO4BVbUmPNoznzDxa1JWMVNaADvnqkN2YeFYA=",
|
||||
"1.28.11": "sha256-DgHBOT+HRpZZlEMbcKIMMrhUffsdzydwy2kpkPxlul8=",
|
||||
"1.28.2": "sha256-MiaensOMVh0Ci2XDBI6moQDhKSy+nlBVZSIkVcgJZXc=",
|
||||
"1.28.3": "sha256-ZPVunFUYORkVP+Wd8skBXf8JxW3hOjy8zA8EqVt22rk=",
|
||||
"1.28.4": "sha256-vyA5id2bOYe4oNIzHczmMZ+DS1ffgQ+vulpIBdVII6w=",
|
||||
|
@ -564,9 +640,17 @@
|
|||
"1.28.6": "sha256-7iwGDe/zMNMzjiSuyXNMnl1a6k/qGQXAeVvM/2mXpl4=",
|
||||
"1.28.7": "sha256-4smLObCwdF7z4w/rrrjqrzHschASQFvQ3PJehAJsIh4=",
|
||||
"1.28.8": "sha256-kNYfQLe7BhsPxtCLi53a5R+QhjyJmwmOGeqonchV8sA=",
|
||||
"1.28.9": "sha256-MSRxrSVaz83uosWEmxcUZ69FGOltadcnoxl/8zTpKZ0=",
|
||||
"1.29.0": "sha256-Dg5FRMKgo0dVKRVLdTTQ1YaDRm76BKK7LnY7R22wuxY=",
|
||||
"1.29.1": "sha256-5GQXqxzq6ZXw4A1Bd5WaNu00uAeClCK8ndpwsmP+XF0=",
|
||||
"1.29.2": "sha256-m0qlctTNUaQbEGcWHZYUI9DRKxIPtjbqiHoSqXXUsZo="
|
||||
"1.29.2": "sha256-m0qlctTNUaQbEGcWHZYUI9DRKxIPtjbqiHoSqXXUsZo=",
|
||||
"1.29.3": "sha256-iR3OGe0OrjQFDC7KBFQgSJLpe/4akm+YjNBEqYepx8k=",
|
||||
"1.29.4": "sha256-3Eu26mzTWwJNY8wg0cGACpxpW9b3BBHFc1jXxAdROwA=",
|
||||
"1.29.5": "sha256-DUMoo8Z+Tw2/Jw+kk0Pz6rkxat3hob0qhX+laHapr/E=",
|
||||
"1.29.6": "sha256-Dw+pQp0LzwTycdz09mZYLdSksV1vEWpF8XtfzakMLSw=",
|
||||
"1.30.0": "sha256-+oh2R0ItNPPHzFsw/vz5cITSwyd+/yN8WAhoW6jksVo=",
|
||||
"1.30.1": "sha256-xFBJuCmvh2WI7Bow3vOITOd8LBdc13SF1Jx40gZKOPs=",
|
||||
"1.30.2": "sha256-cs6wgjEbQgMoJ6k2+AzSQ3uO7gMFPQXb42ukhYX+v7g="
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue