diff --git a/.all-contributorsrc b/.all-contributorsrc
index cce3afbd3..2f2d00bd5 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -751,6 +751,15 @@
"contributions": [
"doc"
]
+ },
+ {
+ "login": "liuxu623",
+ "name": "刘旭",
+ "avatar_url": "https://avatars.githubusercontent.com/u/9653438?v=4",
+ "profile": "https://github.com/liuxu623",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml
index b94a8a1be..04b4448ca 100644
--- a/.github/workflows/golangci-lint.yml
+++ b/.github/workflows/golangci-lint.yml
@@ -22,7 +22,7 @@ jobs:
with:
go-version: 1.19
- name: golangci-lint
- uses: golangci/golangci-lint-action@v3.4.0
+ uses: golangci/golangci-lint-action@v3.6.0
with:
version: v1.50.1
working-directory: ${{matrix.working-directory}}
diff --git a/.github/workflows/kubernetes-auto-support.yaml b/.github/workflows/kubernetes-auto-support.yaml
index 2c733ba1a..766365fe8 100644
--- a/.github/workflows/kubernetes-auto-support.yaml
+++ b/.github/workflows/kubernetes-auto-support.yaml
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'kubesphere/kubekey'
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Set up Go 1.19
uses: actions/setup-go@v3
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index fd945beac..19ac80a0d 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -31,7 +31,7 @@ jobs:
- name: Get Version
id: get_version
- run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/}
+ run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- name: Synchronize artifacts to OSS
run: |
rm -rf qsctl_v2.4.3_linux_amd64.tar.gz
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index f5390374e..cb04f2306 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -111,6 +111,7 @@ Contributions of any kind are welcome! Thanks goes to these wonderful contributo
wenwenxiong 💻 |
柏喵Sakura 💻 |
cui fliter 📖 |
+ 刘旭 💻 |
diff --git a/README.md b/README.md
index a5b846017..3f058c8d7 100644
--- a/README.md
+++ b/README.md
@@ -395,6 +395,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
wenwenxiong 💻 |
柏喵Sakura 💻 |
cui fliter 📖 |
+ 刘旭 💻 |
diff --git a/README_zh-CN.md b/README_zh-CN.md
index b4812fe70..753920d7a 100644
--- a/README_zh-CN.md
+++ b/README_zh-CN.md
@@ -412,6 +412,7 @@ kubectl completion bash >/etc/bash_completion.d/kubectl
wenwenxiong 💻 |
柏喵Sakura 💻 |
cui fliter 📖 |
+ 刘旭 💻 |
diff --git a/cmd/kk/apis/kubekey/v1alpha2/addons_types.go b/cmd/kk/apis/kubekey/v1alpha2/addons_types.go
index 3a40b6317..5500317b1 100644
--- a/cmd/kk/apis/kubekey/v1alpha2/addons_types.go
+++ b/cmd/kk/apis/kubekey/v1alpha2/addons_types.go
@@ -36,6 +36,7 @@ type Chart struct {
Version string `yaml:"version" json:"version,omitempty"`
ValuesFile string `yaml:"valuesFile" json:"valuesFile,omitempty"`
Values []string `yaml:"values" json:"values,omitempty"`
+ Wait bool `yaml:"wait" json:"wait,omitempty"`
}
type Yaml struct {
diff --git a/cmd/kk/apis/kubekey/v1alpha2/cluster_types.go b/cmd/kk/apis/kubekey/v1alpha2/cluster_types.go
index b3b3a2c94..1bd4f7799 100644
--- a/cmd/kk/apis/kubekey/v1alpha2/cluster_types.go
+++ b/cmd/kk/apis/kubekey/v1alpha2/cluster_types.go
@@ -173,9 +173,6 @@ func (cfg *ClusterSpec) GroupHosts() map[string][]*KubeHost {
if len(roleGroups[Etcd]) == 0 && cfg.Etcd.Type == KubeKey {
logger.Log.Fatal(errors.New("The number of etcd cannot be 0"))
}
- if len(roleGroups[Registry]) > 1 {
- logger.Log.Fatal(errors.New("The number of registry node cannot be greater than 1."))
- }
for _, host := range roleGroups[ControlPlane] {
host.SetRole(Master)
diff --git a/cmd/kk/apis/kubekey/v1alpha2/default.go b/cmd/kk/apis/kubekey/v1alpha2/default.go
index 60232e01e..64701675f 100644
--- a/cmd/kk/apis/kubekey/v1alpha2/default.go
+++ b/cmd/kk/apis/kubekey/v1alpha2/default.go
@@ -41,9 +41,9 @@ const (
DefaultSSHTimeout = 30
DefaultEtcdVersion = "v3.5.6"
DefaultEtcdPort = "2379"
- DefaultDockerVersion = "20.10.8"
- DefaultContainerdVersion = "1.6.4"
- DefaultRuncVersion = "v1.1.1"
+ DefaultDockerVersion = "24.0.6"
+ DefaultContainerdVersion = "1.7.8"
+ DefaultRuncVersion = "v1.1.10"
DefaultCrictlVersion = "v1.24.0"
DefaultKubeVersion = "v1.23.10"
DefaultCalicoVersion = "v3.26.1"
diff --git a/cmd/kk/apis/kubekey/v1alpha2/network_types.go b/cmd/kk/apis/kubekey/v1alpha2/network_types.go
index 4a9ed3747..af0b1b6f4 100644
--- a/cmd/kk/apis/kubekey/v1alpha2/network_types.go
+++ b/cmd/kk/apis/kubekey/v1alpha2/network_types.go
@@ -33,6 +33,7 @@ type CalicoCfg struct {
VethMTU int `yaml:"vethMTU" json:"vethMTU,omitempty"`
Ipv4NatOutgoing *bool `yaml:"ipv4NatOutgoing" json:"ipv4NatOutgoing,omitempty"`
DefaultIPPOOL *bool `yaml:"defaultIPPOOL" json:"defaultIPPOOL,omitempty"`
+ EnableTypha *bool `yaml:"enableTypha" json:"enableTypha,omitempty"`
}
type FlannelCfg struct {
@@ -183,6 +184,14 @@ func (c *CalicoCfg) EnableDefaultIPPOOL() bool {
return *c.DefaultIPPOOL
}
+// Typha is used to determine whether to enable calico Typha
+func (c *CalicoCfg) Typha() bool {
+ if c.EnableTypha == nil {
+ return false
+ }
+ return *c.EnableTypha
+}
+
// EnableInit is used to determine whether to create default network
func (h *HybridnetCfg) EnableInit() bool {
if h.Init == nil {
diff --git a/cmd/kk/pkg/addons/charts.go b/cmd/kk/pkg/addons/charts.go
index 704929e10..176d3acff 100644
--- a/cmd/kk/pkg/addons/charts.go
+++ b/cmd/kk/pkg/addons/charts.go
@@ -93,6 +93,7 @@ func InstallChart(kubeConf *common.KubeConf, addon *kubekeyapiv1alpha2.Addon, ku
client.Keyring = defaultKeyring()
client.RepoURL = addon.Sources.Chart.Repo
client.Version = addon.Sources.Chart.Version
+ client.Wait = addon.Sources.Chart.Wait
//client.Force = true
if client.Version == "" && client.Devel {
diff --git a/cmd/kk/pkg/bootstrap/registry/certs.go b/cmd/kk/pkg/bootstrap/registry/certs.go
index 794fb22a6..8b5918477 100644
--- a/cmd/kk/pkg/bootstrap/registry/certs.go
+++ b/cmd/kk/pkg/bootstrap/registry/certs.go
@@ -105,9 +105,13 @@ func (g *GenerateCerts) Execute(runtime connector.Runtime) error {
var altName cert.AltNames
- dnsList := []string{"localhost", g.KubeConf.Cluster.Registry.PrivateRegistry, runtime.GetHostsByRole(common.Registry)[0].GetName()}
- ipList := []net.IP{net.IPv4(127, 0, 0, 1), net.IPv6loopback, netutils.ParseIPSloppy(runtime.GetHostsByRole(common.Registry)[0].GetInternalAddress())}
+ dnsList := []string{"localhost", RegistryCertificateBaseName}
+ ipList := []net.IP{net.IPv4(127, 0, 0, 1), net.IPv6loopback}
+ for _, h := range runtime.GetHostsByRole(common.Registry) {
+ dnsList = append(dnsList, h.GetName())
+ ipList = append(ipList, netutils.ParseIPSloppy(h.GetInternalAddress()))
+ }
altName.DNSNames = dnsList
altName.IPs = ipList
diff --git a/cmd/kk/pkg/bootstrap/registry/module.go b/cmd/kk/pkg/bootstrap/registry/module.go
index e948e6f1c..284b88bac 100644
--- a/cmd/kk/pkg/bootstrap/registry/module.go
+++ b/cmd/kk/pkg/bootstrap/registry/module.go
@@ -250,18 +250,10 @@ func InstallHarbor(i *InstallRegistryModule) []task.Interface {
}
generateHarborConfig := &task.RemoteTask{
- Name: "GenerateHarborConfig",
- Desc: "Generate harbor config",
- Hosts: i.Runtime.GetHostsByRole(common.Registry),
- Action: &action.Template{
- Template: templates.HarborConfigTempl,
- Dst: "/opt/harbor/harbor.yml",
- Data: util.Data{
- "Domain": i.KubeConf.Cluster.Registry.PrivateRegistry,
- "Certificate": fmt.Sprintf("%s.pem", i.KubeConf.Cluster.Registry.PrivateRegistry),
- "Key": fmt.Sprintf("%s-key.pem", i.KubeConf.Cluster.Registry.PrivateRegistry),
- },
- },
+ Name: "GenerateHarborConfig",
+ Desc: "Generate harbor config",
+ Hosts: i.Runtime.GetHostsByRole(common.Registry),
+ Action: new(GenerateHarborConfig),
Parallel: true,
Retry: 1,
}
diff --git a/cmd/kk/pkg/bootstrap/registry/tasks.go b/cmd/kk/pkg/bootstrap/registry/tasks.go
index 6c76fb27d..e3b9e62a4 100644
--- a/cmd/kk/pkg/bootstrap/registry/tasks.go
+++ b/cmd/kk/pkg/bootstrap/registry/tasks.go
@@ -18,6 +18,9 @@ package registry
import (
"fmt"
+ "github.com/kubesphere/kubekey/v3/cmd/kk/pkg/bootstrap/registry/templates"
+ "github.com/kubesphere/kubekey/v3/cmd/kk/pkg/core/action"
+ "github.com/kubesphere/kubekey/v3/cmd/kk/pkg/core/util"
"path/filepath"
"strings"
@@ -212,6 +215,29 @@ func (g *SyncHarborPackage) Execute(runtime connector.Runtime) error {
return nil
}
+type GenerateHarborConfig struct {
+ common.KubeAction
+}
+
+func (g *GenerateHarborConfig) Execute(runtime connector.Runtime) error {
+ host := runtime.RemoteHost()
+ templateAction := action.Template{
+ Template: templates.HarborConfigTempl,
+ Dst: "/opt/harbor/harbor.yml",
+ Data: util.Data{
+ "Domain": host.GetName(),
+ "Certificate": fmt.Sprintf("%s.pem", RegistryCertificateBaseName),
+ "Key": fmt.Sprintf("%s-key.pem", RegistryCertificateBaseName),
+ "Password": templates.Password(g.KubeConf, RegistryCertificateBaseName),
+ },
+ }
+ templateAction.Init(nil, nil)
+ if err := templateAction.Execute(runtime); err != nil {
+ return err
+ }
+ return nil
+}
+
type StartHarbor struct {
common.KubeAction
}
diff --git a/cmd/kk/pkg/bootstrap/registry/templates/harbor.go b/cmd/kk/pkg/bootstrap/registry/templates/harbor.go
index 517a29d65..7e97a46d3 100644
--- a/cmd/kk/pkg/bootstrap/registry/templates/harbor.go
+++ b/cmd/kk/pkg/bootstrap/registry/templates/harbor.go
@@ -14,6 +14,9 @@ limitations under the License.
package templates
import (
+ "github.com/kubesphere/kubekey/v3/cmd/kk/pkg/common"
+ "github.com/kubesphere/kubekey/v3/cmd/kk/pkg/registry"
+ "strings"
"text/template"
"github.com/lithammer/dedent"
@@ -133,3 +136,14 @@ proxy:
`)))
)
+
+func Password(kubeConf *common.KubeConf, domain string) string {
+ auths := registry.DockerRegistryAuthEntries(kubeConf.Cluster.Registry.Auths)
+ for repo, entry := range auths {
+ if strings.Contains(repo, domain) {
+ return entry.Password
+ }
+ }
+
+ return "Harbor12345"
+}
\ No newline at end of file
diff --git a/cmd/kk/pkg/container/docker.go b/cmd/kk/pkg/container/docker.go
index cce726607..0beecff3f 100644
--- a/cmd/kk/pkg/container/docker.go
+++ b/cmd/kk/pkg/container/docker.go
@@ -89,7 +89,7 @@ func (p *DockerLoginRegistry) Execute(runtime connector.Runtime) error {
if len(entry.Username) == 0 || len(entry.Password) == 0 {
continue
}
- cmd := fmt.Sprintf("docker login --username '%s' --password '%s' %s", escapeSpecialCharacters(entry.Username), escapeSpecialCharacters(entry.Password), repo)
+ cmd := fmt.Sprintf("HOME=$HOME docker login --username '%s' --password '%s' %s", escapeSpecialCharacters(entry.Username), escapeSpecialCharacters(entry.Password), repo)
if _, err := runtime.GetRunner().SudoCmd(cmd, false); err != nil {
return errors.Wrapf(err, "login registry failed, cmd: %v, err:%v", cmd, err)
}
diff --git a/cmd/kk/pkg/etcd/tasks.go b/cmd/kk/pkg/etcd/tasks.go
index 052991e55..0aeaccdd7 100644
--- a/cmd/kk/pkg/etcd/tasks.go
+++ b/cmd/kk/pkg/etcd/tasks.go
@@ -406,6 +406,7 @@ func (b *BackupETCD) Execute(runtime connector.Runtime) error {
Data: util.Data{
"Hostname": runtime.RemoteHost().GetName(),
"Etcdendpoint": fmt.Sprintf("https://%s:2379", runtime.RemoteHost().GetInternalAddress()),
+ "DataDir": b.KubeConf.Cluster.Etcd.DataDir,
"Backupdir": b.KubeConf.Cluster.Etcd.BackupDir,
"KeepbackupNumber": b.KubeConf.Cluster.Etcd.KeepBackupNumber + 1,
"EtcdBackupScriptDir": b.KubeConf.Cluster.Etcd.BackupScriptDir,
diff --git a/cmd/kk/pkg/etcd/templates/backup_script.go b/cmd/kk/pkg/etcd/templates/backup_script.go
index c3a09ebee..9445aff12 100644
--- a/cmd/kk/pkg/etcd/templates/backup_script.go
+++ b/cmd/kk/pkg/etcd/templates/backup_script.go
@@ -32,7 +32,11 @@ set -o pipefail
ETCDCTL_PATH='/usr/local/bin/etcdctl'
ENDPOINTS='{{ .Etcdendpoint }}'
+{{- if .DataDir }}
+ETCD_DATA_DIR="{{ .DataDir }}"
+{{- else }}
ETCD_DATA_DIR="/var/lib/etcd"
+{{- end }}
BACKUP_DIR="{{ .Backupdir }}/etcd-$(date +%Y-%m-%d-%H-%M-%S)"
KEEPBACKUPNUMBER='{{ .KeepbackupNumber }}'
ETCDBACKUPSCIPT='{{ .EtcdBackupScriptDir }}'
diff --git a/cmd/kk/pkg/files/file.go b/cmd/kk/pkg/files/file.go
index 137463785..bba319b6c 100644
--- a/cmd/kk/pkg/files/file.go
+++ b/cmd/kk/pkg/files/file.go
@@ -320,9 +320,9 @@ func sha256sum(path string) (string, error) {
}
defer file.Close()
- data, err := io.ReadAll(file)
- if err != nil {
+ hasher := sha256.New()
+ if _, err := io.Copy(hasher, file); err != nil {
return "", err
}
- return fmt.Sprintf("%x", sha256.Sum256(data)), nil
+ return fmt.Sprintf("%x", hasher.Sum(nil)), nil
}
diff --git a/cmd/kk/pkg/kubernetes/tasks.go b/cmd/kk/pkg/kubernetes/tasks.go
index 26128da12..cc14106e5 100644
--- a/cmd/kk/pkg/kubernetes/tasks.go
+++ b/cmd/kk/pkg/kubernetes/tasks.go
@@ -45,7 +45,6 @@ import (
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/files"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/images"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/kubernetes/templates"
- "github.com/kubesphere/kubekey/v3/cmd/kk/pkg/kubernetes/templates/v1beta2"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/utils"
)
@@ -249,11 +248,11 @@ func (g *GenerateKubeadmConfig) Execute(runtime connector.Runtime) error {
}
}
- _, ApiServerArgs := util.GetArgs(v1beta2.GetApiServerArgs(g.WithSecurityEnhancement, g.KubeConf.Cluster.Kubernetes.EnableAudit()), g.KubeConf.Cluster.Kubernetes.ApiServerArgs)
- _, ControllerManagerArgs := util.GetArgs(v1beta2.GetControllermanagerArgs(g.KubeConf.Cluster.Kubernetes.Version, g.WithSecurityEnhancement), g.KubeConf.Cluster.Kubernetes.ControllerManagerArgs)
- _, SchedulerArgs := util.GetArgs(v1beta2.GetSchedulerArgs(g.WithSecurityEnhancement), g.KubeConf.Cluster.Kubernetes.SchedulerArgs)
+ _, ApiServerArgs := util.GetArgs(templates.GetApiServerArgs(g.WithSecurityEnhancement, g.KubeConf.Cluster.Kubernetes.EnableAudit()), g.KubeConf.Cluster.Kubernetes.ApiServerArgs)
+ _, ControllerManagerArgs := util.GetArgs(templates.GetControllermanagerArgs(g.KubeConf.Cluster.Kubernetes.Version, g.WithSecurityEnhancement), g.KubeConf.Cluster.Kubernetes.ControllerManagerArgs)
+ _, SchedulerArgs := util.GetArgs(templates.GetSchedulerArgs(g.WithSecurityEnhancement), g.KubeConf.Cluster.Kubernetes.SchedulerArgs)
- checkCgroupDriver, err := v1beta2.GetKubeletCgroupDriver(runtime, g.KubeConf)
+ checkCgroupDriver, err := templates.GetKubeletCgroupDriver(runtime, g.KubeConf)
if err != nil {
return err
}
@@ -273,8 +272,8 @@ func (g *GenerateKubeadmConfig) Execute(runtime connector.Runtime) error {
}
templateAction := action.Template{
- Template: v1beta2.KubeadmConfig,
- Dst: filepath.Join(common.KubeConfigDir, v1beta2.KubeadmConfig.Name()),
+ Template: templates.KubeadmConfig,
+ Dst: filepath.Join(common.KubeConfigDir, templates.KubeadmConfig.Name()),
Data: util.Data{
"IsInitCluster": g.IsInitConfiguration,
"ImageRepo": strings.TrimSuffix(images.GetImage(runtime, g.KubeConf, "kube-apiserver").ImageRepo(), "/kube-apiserver"),
@@ -296,12 +295,13 @@ func (g *GenerateKubeadmConfig) Execute(runtime connector.Runtime) error {
"ExternalEtcd": externalEtcd,
"NodeCidrMaskSize": g.KubeConf.Cluster.Kubernetes.NodeCidrMaskSize,
"CriSock": g.KubeConf.Cluster.Kubernetes.ContainerRuntimeEndpoint,
- "ApiServerArgs": v1beta2.UpdateFeatureGatesConfiguration(ApiServerArgs, g.KubeConf),
+ "ApiServerArgs": templates.UpdateFeatureGatesConfiguration(ApiServerArgs, g.KubeConf),
"EnableAudit": g.KubeConf.Cluster.Kubernetes.EnableAudit(),
- "ControllerManagerArgs": v1beta2.UpdateFeatureGatesConfiguration(ControllerManagerArgs, g.KubeConf),
- "SchedulerArgs": v1beta2.UpdateFeatureGatesConfiguration(SchedulerArgs, g.KubeConf),
- "KubeletConfiguration": v1beta2.GetKubeletConfiguration(runtime, g.KubeConf, g.KubeConf.Cluster.Kubernetes.ContainerRuntimeEndpoint, g.WithSecurityEnhancement),
- "KubeProxyConfiguration": v1beta2.GetKubeProxyConfiguration(g.KubeConf),
+ "ControllerManagerArgs": templates.UpdateFeatureGatesConfiguration(ControllerManagerArgs, g.KubeConf),
+ "SchedulerArgs": templates.UpdateFeatureGatesConfiguration(SchedulerArgs, g.KubeConf),
+ "KubeletConfiguration": templates.GetKubeletConfiguration(runtime, g.KubeConf, g.KubeConf.Cluster.Kubernetes.ContainerRuntimeEndpoint, g.WithSecurityEnhancement),
+ "KubeProxyConfiguration": templates.GetKubeProxyConfiguration(g.KubeConf),
+ "IsV1beta3": versionutil.MustParseSemantic(g.KubeConf.Cluster.Kubernetes.Version).AtLeast(versionutil.MustParseSemantic("v1.22.0")),
"IsControlPlane": host.IsRole(common.Master),
"CgroupDriver": checkCgroupDriver,
"BootstrapToken": bootstrapToken,
diff --git a/cmd/kk/pkg/kubernetes/templates/v1beta2/kubeadm_config.go b/cmd/kk/pkg/kubernetes/templates/kubeadm_config.go
similarity index 97%
rename from cmd/kk/pkg/kubernetes/templates/v1beta2/kubeadm_config.go
rename to cmd/kk/pkg/kubernetes/templates/kubeadm_config.go
index bef97f247..17d75a0a5 100644
--- a/cmd/kk/pkg/kubernetes/templates/v1beta2/kubeadm_config.go
+++ b/cmd/kk/pkg/kubernetes/templates/kubeadm_config.go
@@ -14,7 +14,7 @@
limitations under the License.
*/
-package v1beta2
+package templates
import (
"fmt"
@@ -38,7 +38,7 @@ var (
dedent.Dedent(`
{{- if .IsInitCluster -}}
---
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/{{ if .IsV1beta3 }}v1beta3{{ else }}v1beta2{{ end }}
kind: ClusterConfiguration
etcd:
{{- if .EtcdTypeIsKubeadm }}
@@ -106,7 +106,7 @@ scheduler:
{{ toYaml .SchedulerArgs | indent 4 }}
---
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/{{ if .IsV1beta3 }}v1beta3{{ else }}v1beta2{{ end }}
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: {{ .AdvertiseAddress }}
@@ -128,7 +128,7 @@ kind: KubeletConfiguration
{{- else -}}
---
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/{{ if .IsV1beta3 }}v1beta3{{ else }}v1beta2{{ end }}
kind: JoinConfiguration
discovery:
bootstrapToken:
@@ -159,14 +159,10 @@ var (
FeatureGatesDefaultConfiguration = map[string]bool{
"RotateKubeletServerCertificate": true, //k8s 1.7+
"TTLAfterFinished": true, //k8s 1.12+
- "ExpandCSIVolumes": true, //k8s 1.14+
- "CSIStorageCapacity": true, //k8s 1.19+
}
FeatureGatesSecurityDefaultConfiguration = map[string]bool{
"RotateKubeletServerCertificate": true, //k8s 1.7+
"TTLAfterFinished": true, //k8s 1.12+
- "ExpandCSIVolumes": true, //k8s 1.14+
- "CSIStorageCapacity": true, //k8s 1.19+
"SeccompDefault": true, //kubelet
}
diff --git a/cmd/kk/pkg/loadbalancer/tasks.go b/cmd/kk/pkg/loadbalancer/tasks.go
index 4035f7455..c1087d57f 100644
--- a/cmd/kk/pkg/loadbalancer/tasks.go
+++ b/cmd/kk/pkg/loadbalancer/tasks.go
@@ -165,6 +165,7 @@ func (g *GetInterfaceName) Execute(runtime connector.Runtime) error {
}
cmd := fmt.Sprintf("ip route "+
"| grep ' %s ' "+
+ "| grep 'proto kernel scope link src'"+
"| sed -e \"s/^.*dev.//\" -e \"s/.proto.*//\""+
"| uniq ", host.GetAddress())
interfaceName, err := runtime.GetRunner().SudoCmd(cmd, false)
diff --git a/cmd/kk/pkg/pipelines/add_nodes.go b/cmd/kk/pkg/pipelines/add_nodes.go
index 62b28f654..61dd067e0 100644
--- a/cmd/kk/pkg/pipelines/add_nodes.go
+++ b/cmd/kk/pkg/pipelines/add_nodes.go
@@ -46,13 +46,13 @@ func NewAddNodesPipeline(runtime *common.KubeRuntime) error {
m := []module.Module{
&precheck.GreetingsModule{},
+ &customscripts.CustomScriptsModule{Phase: "PreInstall", Scripts: runtime.Cluster.System.PreInstall},
&precheck.NodePreCheckModule{},
&confirm.InstallConfirmModule{},
&artifact.UnArchiveModule{Skip: noArtifact},
&os.RepositoryModule{Skip: noArtifact || !runtime.Arg.InstallPackages},
&binaries.NodeBinariesModule{},
&os.ConfigureOSModule{Skip: runtime.Cluster.System.SkipConfigureOS},
- &customscripts.CustomScriptsModule{Phase: "PreInstall", Scripts: runtime.Cluster.System.PreInstall},
®istry.RegistryCertsModule{Skip: len(runtime.GetHostsByRole(common.Registry)) == 0},
//for one master to multi master kube-vip
&loadbalancer.KubevipModule{Skip: !runtime.Cluster.ControlPlaneEndpoint.IsInternalLBEnabledVip()},
diff --git a/cmd/kk/pkg/pipelines/init_registry.go b/cmd/kk/pkg/pipelines/init_registry.go
index beef134c9..38c26c766 100644
--- a/cmd/kk/pkg/pipelines/init_registry.go
+++ b/cmd/kk/pkg/pipelines/init_registry.go
@@ -18,16 +18,17 @@ package pipelines
import (
"fmt"
-
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/artifact"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/binaries"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/bootstrap/os"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/bootstrap/precheck"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/bootstrap/registry"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/common"
+ "github.com/kubesphere/kubekey/v3/cmd/kk/pkg/core/logger"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/core/module"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/core/pipeline"
"github.com/kubesphere/kubekey/v3/cmd/kk/pkg/filesystem"
+ "github.com/pkg/errors"
)
func NewInitRegistryPipeline(runtime *common.KubeRuntime) error {
@@ -74,6 +75,10 @@ func InitRegistry(args common.Argument, downloadCmd string) error {
return err
}
+ if len(runtime.GetHostsByRole("registry")) <= 0 {
+ logger.Log.Fatal(errors.New("The number of registry must be greater then 0."))
+ }
+
if err := NewInitRegistryPipeline(runtime); err != nil {
return err
}
diff --git a/cmd/kk/pkg/plugins/network/modules.go b/cmd/kk/pkg/plugins/network/modules.go
index 21fb5e310..db28cf6a0 100644
--- a/cmd/kk/pkg/plugins/network/modules.go
+++ b/cmd/kk/pkg/plugins/network/modules.go
@@ -109,7 +109,7 @@ func deployCalico(d *DeployNetworkPluginModule) []task.Interface {
"CalicoNodeImage": images.GetImage(d.Runtime, d.KubeConf, "calico-node").ImageName(),
"CalicoFlexvolImage": images.GetImage(d.Runtime, d.KubeConf, "calico-flexvol").ImageName(),
"CalicoControllersImage": images.GetImage(d.Runtime, d.KubeConf, "calico-kube-controllers").ImageName(),
- "TyphaEnabled": len(d.Runtime.GetHostsByRole(common.K8s)) > 50,
+ "TyphaEnabled": len(d.Runtime.GetHostsByRole(common.K8s)) > 50 || d.KubeConf.Cluster.Network.Calico.Typha(),
"VethMTU": d.KubeConf.Cluster.Network.Calico.VethMTU,
"NodeCidrMaskSize": d.KubeConf.Cluster.Kubernetes.NodeCidrMaskSize,
"IPIPMode": d.KubeConf.Cluster.Network.Calico.IPIPMode,
@@ -137,7 +137,7 @@ func deployCalico(d *DeployNetworkPluginModule) []task.Interface {
"CalicoFlexvolImage": images.GetImage(d.Runtime, d.KubeConf, "calico-flexvol").ImageName(),
"CalicoControllersImage": images.GetImage(d.Runtime, d.KubeConf, "calico-kube-controllers").ImageName(),
"CalicoTyphaImage": images.GetImage(d.Runtime, d.KubeConf, "calico-typha").ImageName(),
- "TyphaEnabled": len(d.Runtime.GetHostsByRole(common.K8s)) > 50,
+ "TyphaEnabled": len(d.Runtime.GetHostsByRole(common.K8s)) > 50 || d.KubeConf.Cluster.Network.Calico.Typha(),
"VethMTU": d.KubeConf.Cluster.Network.Calico.VethMTU,
"NodeCidrMaskSize": d.KubeConf.Cluster.Kubernetes.NodeCidrMaskSize,
"IPIPMode": d.KubeConf.Cluster.Network.Calico.IPIPMode,
diff --git a/cmd/kk/pkg/version/kubernetes/version_enum.go b/cmd/kk/pkg/version/kubernetes/version_enum.go
index 3d4b18898..e0fffdbbf 100644
--- a/cmd/kk/pkg/version/kubernetes/version_enum.go
+++ b/cmd/kk/pkg/version/kubernetes/version_enum.go
@@ -36,6 +36,8 @@ const (
V124
V125
V126
+ V127
+ V128
)
var VersionList = []Version{
@@ -47,6 +49,8 @@ var VersionList = []Version{
V124,
V125,
V126,
+ V127,
+ V128,
}
func (v Version) String() string {
@@ -67,6 +71,10 @@ func (v Version) String() string {
return "v1.25"
case V126:
return "v1.26"
+ case V127:
+ return "v1.27"
+ case V128:
+ return "v1.28"
default:
return "invalid option"
}
diff --git a/cmd/kk/pkg/version/kubesphere/ks_installer.go b/cmd/kk/pkg/version/kubesphere/ks_installer.go
index c780b3b95..22719db17 100644
--- a/cmd/kk/pkg/version/kubesphere/ks_installer.go
+++ b/cmd/kk/pkg/version/kubesphere/ks_installer.go
@@ -238,3 +238,23 @@ var KsV340 = &KsInstaller{
V330.String(),
},
}
+
+var KsV341 = &KsInstaller{
+ Version: V341.String(),
+ CRDTemplate: templates.KsInstaller,
+ ClusterConfigurationTemplate: templates.V341,
+ K8sSupportVersions: []string{
+ "v1.21",
+ "v1.22",
+ "v1.23",
+ "v1.24",
+ "v1.25",
+ "v1.26",
+ },
+ UpgradeSupportVersions: []string{
+ V340.String(),
+ V332.String(),
+ V331.String(),
+ V330.String(),
+ },
+}
diff --git a/cmd/kk/pkg/version/kubesphere/templates/cc_v341.go b/cmd/kk/pkg/version/kubesphere/templates/cc_v341.go
new file mode 100644
index 000000000..fd2ec6c02
--- /dev/null
+++ b/cmd/kk/pkg/version/kubesphere/templates/cc_v341.go
@@ -0,0 +1,229 @@
+/*
+ Copyright 2022 The KubeSphere Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package templates
+
+import (
+ "text/template"
+
+ "github.com/lithammer/dedent"
+)
+
+var V341 = template.Must(template.New("v3.4.1").Parse(
+ dedent.Dedent(`
+---
+apiVersion: installer.kubesphere.io/v1alpha1
+kind: ClusterConfiguration
+metadata:
+ name: ks-installer
+ namespace: kubesphere-system
+ labels:
+ version: {{ .Tag }}
+spec:
+ persistence:
+ storageClass: ""
+ authentication:
+ jwtSecret: ""
+ local_registry: ""
+ # dev_tag: ""
+ etcd:
+ monitoring: false
+ endpointIps: localhost
+ port: 2379
+ tlsEnable: true
+ common:
+ core:
+ console:
+ enableMultiLogin: true
+ port: 30880
+ type: NodePort
+ # apiserver:
+ # resources: {}
+ # controllerManager:
+ # resources: {}
+ redis:
+ enabled: false
+ enableHA: false
+ volumeSize: 2Gi
+ openldap:
+ enabled: false
+ volumeSize: 2Gi
+ minio:
+ volumeSize: 20Gi
+ monitoring:
+ # type: external
+ endpoint: http://prometheus-operated.kubesphere-monitoring-system.svc:9090
+ GPUMonitoring:
+ enabled: false
+ gpu:
+ kinds:
+ - resourceName: "nvidia.com/gpu"
+ resourceType: "GPU"
+ default: true
+ es:
+ # master:
+ # volumeSize: 4Gi
+ # replicas: 1
+ # resources: {}
+ # data:
+ # volumeSize: 20Gi
+ # replicas: 1
+ # resources: {}
+ enabled: false
+ logMaxAge: 7
+ elkPrefix: logstash
+ basicAuth:
+ enabled: false
+ username: ""
+ password: ""
+ externalElasticsearchHost: ""
+ externalElasticsearchPort: ""
+ opensearch:
+ # master:
+ # volumeSize: 4Gi
+ # replicas: 1
+ # resources: {}
+ # data:
+ # volumeSize: 20Gi
+ # replicas: 1
+ # resources: {}
+ enabled: true
+ logMaxAge: 7
+ opensearchPrefix: whizard
+ basicAuth:
+ enabled: true
+ username: "admin"
+ password: "admin"
+ externalOpensearchHost: ""
+ externalOpensearchPort: ""
+ dashboard:
+ enabled: false
+ alerting:
+ enabled: false
+ # thanosruler:
+ # replicas: 1
+ # resources: {}
+ auditing:
+ enabled: false
+ # operator:
+ # resources: {}
+ # webhook:
+ # resources: {}
+ devops:
+ enabled: false
+ jenkinsCpuReq: 0.5
+ jenkinsCpuLim: 1
+ jenkinsMemoryReq: 4Gi
+ jenkinsMemoryLim: 4Gi
+ jenkinsVolumeSize: 16Gi
+ events:
+ enabled: false
+ # operator:
+ # resources: {}
+ # exporter:
+ # resources: {}
+ ruler:
+ enabled: true
+ replicas: 2
+ # resources: {}
+ logging:
+ enabled: false
+ logsidecar:
+ enabled: true
+ replicas: 2
+ # resources: {}
+ metrics_server:
+ enabled: false
+ monitoring:
+ storageClass: ""
+ node_exporter:
+ port: 9100
+ # resources: {}
+ # kube_rbac_proxy:
+ # resources: {}
+ # kube_state_metrics:
+ # resources: {}
+ # prometheus:
+ # replicas: 1
+ # volumeSize: 20Gi
+ # resources: {}
+ # operator:
+ # resources: {}
+ # alertmanager:
+ # replicas: 1
+ # resources: {}
+ # notification_manager:
+ # resources: {}
+ # operator:
+ # resources: {}
+ # proxy:
+ # resources: {}
+ gpu:
+ nvidia_dcgm_exporter:
+ enabled: false
+ # resources: {}
+ multicluster:
+ clusterRole: none
+ network:
+ networkpolicy:
+ enabled: false
+ ippool:
+ type: none
+ topology:
+ type: none
+ openpitrix:
+ store:
+ enabled: false
+ servicemesh:
+ enabled: false
+ istio:
+ components:
+ ingressGateways:
+ - name: istio-ingressgateway
+ enabled: false
+ cni:
+ enabled: false
+ edgeruntime:
+ enabled: false
+ kubeedge:
+ enabled: false
+ cloudCore:
+ cloudHub:
+ advertiseAddress:
+ - ""
+ service:
+ cloudhubNodePort: "30000"
+ cloudhubQuicNodePort: "30001"
+ cloudhubHttpsNodePort: "30002"
+ cloudstreamNodePort: "30003"
+ tunnelNodePort: "30004"
+ # resources: {}
+ # hostNetWork: false
+ iptables-manager:
+ enabled: true
+ mode: "external"
+ # resources: {}
+ # edgeService:
+ # resources: {}
+ gatekeeper:
+ enabled: false
+ # controller_manager:
+ # resources: {}
+ # audit:
+ # resources: {}
+ terminal:
+ timeout: 600
+`)))
diff --git a/cmd/kk/pkg/version/kubesphere/version_enum.go b/cmd/kk/pkg/version/kubesphere/version_enum.go
index 05560d4e5..d29c71a00 100644
--- a/cmd/kk/pkg/version/kubesphere/version_enum.go
+++ b/cmd/kk/pkg/version/kubesphere/version_enum.go
@@ -36,6 +36,7 @@ const (
V331
V332
V340
+ V341
)
var VersionList = []Version{
@@ -49,6 +50,7 @@ var VersionList = []Version{
V331,
V332,
V340,
+ V341,
}
var VersionMap = map[string]*KsInstaller{
@@ -62,6 +64,7 @@ var VersionMap = map[string]*KsInstaller{
V331.String(): KsV331,
V332.String(): KsV332,
V340.String(): KsV340,
+ V341.String(): KsV341,
}
var CNSource = map[string]bool{
@@ -73,6 +76,7 @@ var CNSource = map[string]bool{
V331.String(): true,
V332.String(): true,
V340.String(): true,
+ V341.String(): true,
}
func (v Version) String() string {
@@ -97,6 +101,8 @@ func (v Version) String() string {
return "v3.3.2"
case V340:
return "v3.4.0"
+ case V341:
+ return "v3.4.1"
default:
return "invalid option"
}
diff --git a/docs/harbor-ha.md b/docs/harbor-ha.md
new file mode 100644
index 000000000..41397a422
--- /dev/null
+++ b/docs/harbor-ha.md
@@ -0,0 +1,229 @@
+## 一、Harbor 简介
+
+Harbor 是由 VMware 公司使用 Go 语言开发,主要就是用于存放镜像使用,同时我们还可以通过 Web 界面来对存放的镜像进行管理。并且 Harbor 提供的功能有:基于角色的访问控制,镜像远程复制同步,以及审计日志等功能。官方文档
+
+### 1.Harbor 功能介绍
+
+1)基于角色的访问控制: 我们可以通过项目来对用户进行权限划分,项目中可以包含多个镜像。
+
+2)审计管理: 我们可以在用户审计管理中,找到我们所有对镜像仓库做的操作。
+
+3)镜像复制: 我们可以通过配置,使在两台 Harbor 服务器间实现镜像同步。
+
+4)漏洞扫描: Harbor 会定期对仓库中的镜像进行扫描,并进行策略检查,以防止部署出易受到攻击的镜像。
+
+### 2.Harbor 高可用方式
+
+目前 Harbor 最常见的高可用方式有两种,分别是:
+
+1)安装两台 Harbor 仓库,他们共同使用一个存储(一般常见的便是 NFS 共享存储)
+
+![Image](img/harbor_ha01.png?raw=true)
+
+2)安装两台 Harbor 仓库,并互相配置同步关系。
+
+![image](img/harbor_ha02.png?raw=true)
+
+因为第一种方式的话,需要额外配置 Redis 和 PostgreSQL 以及 NFS 服务,所以我们下面使用第二种方式进行 Harbor 高可用配置。
+
+# Harbor镜像仓库高可用方案设计
+
+采用2台harbor仓库互为主备的方案,如下图所示
+
+![image](img/harbor_keepalived.png?raw=true)
+
+注意:主备方案
+
+由于VIP的浮动,主备节点其实是互为主备;在部署harbor时,需要注意主备节点上的harbor.yml中hostname不要配置为浮动IP(reg.harbor.4a或192.168.10.200),应配置为各自IP或者hostname;
+早先,将VIP的域名reg.harbor.4a配置到190和191上的harbor.yml中(hostname: reg.harbor.4a)导致一个问题:只有主节点可做为target被添加,用作镜像同步(也就是无法在主节点的仓库管理中创建备节点的target,即便添加了也无法连通)。
+
+准备文件(在源码的script文件夹下,keepalived镜像可以从互联网阿里云镜像仓库下载)如下
+
+```
+# tree .
+.
+├── harborCreateRegistriesAndReplications.sh
+├── keepalived21.tar
+├── kk
+└── harbor_keepalived
+ ├── check_harbor.sh
+ ├── docker-compose-keepalived-backup.yaml
+ ├── docker-compose-keepalived-master.yaml
+ ├── keepalived-backup.conf
+ └── keepalived-master.conf
+
+1 directory, 8 files
+```
+
+kk: kubekey支持多节点harbor仓库代码(包含本pr)编译生成二进制文件
+
+harborCreateRegistriesAndReplications.sh:配置harbor互为主备的脚本
+
+keepalived21.tar:keepalived的docker镜像
+
+harbor_keepalived:keepalived master和slave的docker-compose部署文件
+
+## kubekey部署多节点harbor仓库
+
+通过二次开发kubekey源码,实现了kubekey部署harbor仓库支持多节点,并且配置同一套harbor证书。证书中包含所有部署harbor节点的主机名和IP认证设置。
+
+后续集成到一键部署脚本中,通过配置registry角色的多个节点来部署多harbor仓库。推荐2个harbor仓库,部署过多占用资源。
+
+## harbor仓库互为主备设置
+
+harbor仓库部署后,通过调用harbor仓库api建立备份仓库,建立备份规则。
+
+例如master1节点上仓库和master2节点仓库配置如下
+
+```
+#!/bin/bash
+
+Harbor_master1_Address=master1:7443
+master1_Address=192.168.122.61
+Harbor_master2_Address=master2:7443
+master2_Address=192.168.122.62
+
+Harbor_User=admin #登录Harbor的用户
+Harbor_Passwd="Harbor12345" #登录Harbor的用户密码
+Harbor_UserPwd="$Harbor_User:$Harbor_Passwd"
+
+# create registry
+curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master1_Address}/api/v2.0/registries" -d "{\"name\": \"master1_2_master2\", \"type\": \"harbor\", \"url\":\"https://${master2_Address}:7443\", \"credential\": {\"access_key\": \"${Harbor_User}\", \"access_secret\": \"${Harbor_Passwd}\"}, \"insecure\": true}"
+# create registry
+curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master2_Address}/api/v2.0/registries" -d "{\"name\": \"master2_2_master1\", \"type\": \"harbor\", \"url\":\"https://${master1_Address}:7443\", \"credential\": {\"access_key\": \"${Harbor_User}\", \"access_secret\": \"${Harbor_Passwd}\"}, \"insecure\": true}"
+
+#createReplication
+curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master1_Address}/api/v2.0/replication/policies" -d "{\"name\": \"master1_2_master2\", \"enabled\": true, \"deletion\":true, \"override\":true, \"replicate_deletion\":true, \"dest_registry\":{ \"id\": 1, \"name\": \"master1_2_master2\"}, \"trigger\": {\"type\": \"event_based\"}, \"dest_namespace_replace_count\":1 }"
+
+#createReplication
+curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master2_Address}/api/v2.0/replication/policies" -d "{\"name\": \"master2_2_master1\", \"enabled\": true, \"deletion\":true, \"override\":true, \"replicate_deletion\":true, \"dest_registry\":{ \"id\": 1, \"name\": \"master2_2_master1\"}, \"trigger\": {\"type\": \"event_based\"}, \"dest_namespace_replace_count\":1 }"
+```
+
+## keepalived管理harbor服务VIP
+
+使用docker-compose管理keepalived服务
+
+keepalived master服务器配置如下
+
+```
+# cat docker-compose-keepalived-master.yaml
+version: '3.8'
+
+# Docker-Compose 单容器使用参考 YAML 配置文件
+# 更多配置参数请参考镜像 README.md 文档中说明
+services:
+ keepalived:
+ image: 'dockerhub.kubekey.local/kubesphere/keepalived:2.1'
+ privileged: true
+ network_mode: host
+ volumes:
+ - ./keepalived-master.conf:/srv/conf/keepalived/keepalived.conf
+ - ./check_harbor.sh:/srv/conf/keepalived/check_harbor.sh
+ container_name: keepalived
+ restart: on-failure
+
+# cat keepalived-master.conf
+vrrp_script check_harbor {
+ script "/srv/conf/keepalived/check_harbor.sh"
+ interval 10 # 间隔时间,单位为秒,默认1秒
+ fall 2 # 脚本几次失败转换为失败
+ rise 2 # 脚本连续监测成功后,把服务器从失败标记为成功的次数
+ timeout 5
+ init_fail
+}
+global_defs {
+ script_user root
+ router_id harbor-ha
+ enable_script_security
+ lvs_sync_daemon ens3 VI_1
+}
+vrrp_instance VI_1 {
+ state MASTER
+ interface ens3
+ virtual_router_id 31 # 如果同一个局域网中有多套keepalive,那么要保证该id唯一
+ priority 100
+ advert_int 1
+ authentication {
+ auth_type PASS
+ auth_pass k8s-test
+ }
+ virtual_ipaddress {
+ 192.168.122.59
+ }
+ track_script {
+ check_harbor
+ }
+}
+# cat check_harbor.sh
+#!/bin/bash
+#count=$(docker-compose -f /opt/harbor/docker-compose.yml ps -a|grep healthy|wc -l)
+# 不能频繁调用docker-compose 否则会有非常多的临时目录被创建:/tmp/_MEI*
+count=$(docker ps |grep goharbor|grep healthy|wc -l)
+status=$(ss -tlnp|grep -w 443|wc -l)
+if [ $count -ne 11 -a ];then
+ exit 8
+elif [ $status -lt 2 ];then
+ exit 9
+else
+ exit 0
+fi
+```
+
+keepalived slave服务器跟master区别配置如下
+
+1、state BACKUP 与 MASTER
+
+2、priority master配置为100,slave设置为50
+
+```
+# cat docker-compose-keepalived-backup.yaml
+version: '3.8'
+
+# Docker-Compose 单容器使用参考 YAML 配置文件
+# 更多配置参数请参考镜像 README.md 文档中说明
+services:
+ keepalived:
+ image: 'dockerhub.kubekey.local/kubesphere/keepalived:2.1'
+ privileged: true
+ network_mode: host
+ volumes:
+ - ./keepalived-backup.conf:/srv/conf/keepalived/keepalived.conf
+ - ./check_harbor.sh:/srv/conf/keepalived/check_harbor.sh
+ container_name: keepalived
+ restart: on-failure
+
+# cat keepalived-backup.conf
+vrrp_script check_harbor {
+ script "/srv/conf/keepalived/check_harbor.sh"
+ interval 10 # 间隔时间,单位为秒,默认1秒
+ fall 2 # 脚本几次失败转换为失败
+ rise 2 # 脚本连续监测成功后,把服务器从失败标记为成功的次数
+ timeout 5
+ init_fail
+}
+global_defs {
+ script_user root
+ router_id harbor-ha
+ enable_script_security
+ lvs_sync_daemon ens3 VI_1
+}
+vrrp_instance VI_1 {
+ state BACKUP
+ interface ens3
+ virtual_router_id 31 # 如果同一个局域网中有多套keepalive,那么要保证该id唯一
+ priority 50
+ advert_int 1
+ authentication {
+ auth_type PASS
+ auth_pass k8s-test
+ }
+ virtual_ipaddress {
+ 192.168.122.59
+ }
+ track_script {
+ check_harbor
+ }
+}
+```
+
+经常需要变动的参数是设置keepalived的interface和vip地址值,实际环境下可以参数化keepalived这2个值。
\ No newline at end of file
diff --git a/docs/img/harbor_ha01.png b/docs/img/harbor_ha01.png
new file mode 100644
index 000000000..3778881f3
Binary files /dev/null and b/docs/img/harbor_ha01.png differ
diff --git a/docs/img/harbor_ha02.png b/docs/img/harbor_ha02.png
new file mode 100644
index 000000000..d64fb62ce
Binary files /dev/null and b/docs/img/harbor_ha02.png differ
diff --git a/docs/img/harbor_keepalived.png b/docs/img/harbor_keepalived.png
new file mode 100644
index 000000000..5f0016815
Binary files /dev/null and b/docs/img/harbor_keepalived.png differ
diff --git a/docs/kubernetes-versions.md b/docs/kubernetes-versions.md
index af712ead7..b1ed5a729 100644
--- a/docs/kubernetes-versions.md
+++ b/docs/kubernetes-versions.md
@@ -91,6 +91,9 @@
| v1.25.11 | :white_check_mark: |
| v1.25.12 | :white_check_mark: |
| v1.25.13 | :white_check_mark: |
+| v1.25.14 | :white_check_mark: |
+| v1.25.15 | :white_check_mark: |
+| v1.25.16 | :white_check_mark: |
| v1.26.0 | :white_check_mark: |
| v1.26.1 | :white_check_mark: |
| v1.26.2 | :white_check_mark: |
@@ -100,11 +103,24 @@
| v1.26.6 | :white_check_mark: |
| v1.26.7 | :white_check_mark: |
| v1.26.8 | :white_check_mark: |
+| v1.26.9 | :white_check_mark: |
+| v1.26.10 | :white_check_mark: |
+| v1.26.11 | :white_check_mark: |
+| v1.26.12 | :white_check_mark: |
| v1.27.0 | :white_check_mark: |
| v1.27.1 | :white_check_mark: |
| v1.27.2 | :white_check_mark: |
| v1.27.3 | :white_check_mark: |
| v1.27.4 | :white_check_mark: |
| v1.27.5 | :white_check_mark: |
+| v1.27.6 | :white_check_mark: |
+| v1.27.7 | :white_check_mark: |
+| v1.27.8 | :white_check_mark: |
+| v1.27.9 | :white_check_mark: |
| v1.28.0 | :white_check_mark: |
| v1.28.1 | :white_check_mark: |
+| v1.28.2 | :white_check_mark: |
+| v1.28.3 | :white_check_mark: |
+| v1.28.4 | :white_check_mark: |
+| v1.28.5 | :white_check_mark: |
+| v1.29.0 | :white_check_mark: |
diff --git a/scripts/harborCreateRegistriesAndReplications.sh b/scripts/harborCreateRegistriesAndReplications.sh
new file mode 100644
index 000000000..86375c486
--- /dev/null
+++ b/scripts/harborCreateRegistriesAndReplications.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+
+function createRegistries() {
+
+ # create registry
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master1_Address}/api/v2.0/registries" -d "{\"name\": \"master1_2_master2\", \"type\": \"harbor\", \"url\":\"https://${master2_Address}:7443\", \"credential\": {\"access_key\": \"${Harbor_User}\", \"access_secret\": \"${Harbor_Passwd}\"}, \"insecure\": true}"
+ # create registry
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master1_Address}/api/v2.0/registries" -d "{\"name\": \"master1_2_master3\", \"type\": \"harbor\", \"url\":\"https://${master3_Address}:7443\", \"credential\": {\"access_key\": \"${Harbor_User}\", \"access_secret\": \"${Harbor_Passwd}\"}, \"insecure\": true}"
+
+ # create registry
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master2_Address}/api/v2.0/registries" -d "{\"name\": \"master2_2_master1\", \"type\": \"harbor\", \"url\":\"https://${master1_Address}:7443\", \"credential\": {\"access_key\": \"${Harbor_User}\", \"access_secret\": \"${Harbor_Passwd}\"}, \"insecure\": true}"
+ # create registry
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master2_Address}/api/v2.0/registries" -d "{\"name\": \"master2_2_master3\", \"type\": \"harbor\", \"url\":\"https://${master3_Address}:7443\", \"credential\": {\"access_key\": \"${Harbor_User}\", \"access_secret\": \"${Harbor_Passwd}\"}, \"insecure\": true}"
+
+ # create registry
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master3_Address}/api/v2.0/registries" -d "{\"name\": \"master3_2_master1\", \"type\": \"harbor\", \"url\":\"https://${master1_Address}:7443\", \"credential\": {\"access_key\": \"${Harbor_User}\", \"access_secret\": \"${Harbor_Passwd}\"}, \"insecure\": true}"
+ # create registry
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master3_Address}/api/v2.0/registries" -d "{\"name\": \"master3_2_master2\", \"type\": \"harbor\", \"url\":\"https://${master2_Address}:7443\", \"credential\": {\"access_key\": \"${Harbor_User}\", \"access_secret\": \"${Harbor_Passwd}\"}, \"insecure\": true}"
+
+}
+
+function listRegistries() {
+ curl -k -u $Harbor_UserPwd -X GET -H "Content-Type: application/json" "https://${Harbor_master1_Address}/api/v2.0/registries"
+ curl -k -u $Harbor_UserPwd -X GET -H "Content-Type: application/json" "https://${Harbor_master2_Address}/api/v2.0/registries"
+ curl -k -u $Harbor_UserPwd -X GET -H "Content-Type: application/json" "https://${Harbor_master3_Address}/api/v2.0/registries"
+
+}
+
+function createReplication() {
+
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master1_Address}/api/v2.0/replication/policies" -d "{\"name\": \"master1_2_master2\", \"enabled\": true, \"deletion\":true, \"override\":true, \"replicate_deletion\":true, \"dest_registry\":{ \"id\": 1, \"name\": \"master1_2_master2\"}, \"trigger\": {\"type\": \"event_based\"}, \"dest_namespace_replace_count\":1 }"
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master1_Address}/api/v2.0/replication/policies" -d "{\"name\": \"master1_2_master3\", \"enabled\": true, \"deletion\":true, \"override\":true, \"replicate_deletion\":true, \"dest_registry\":{ \"id\": 2, \"name\": \"master1_2_master3\"}, \"trigger\": {\"type\": \"event_based\"}, \"dest_namespace_replace_count\":1 }"
+
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master2_Address}/api/v2.0/replication/policies" -d "{\"name\": \"master2_2_master1\", \"enabled\": true, \"deletion\":true, \"override\":true, \"replicate_deletion\":true, \"dest_registry\":{ \"id\": 1, \"name\": \"master2_2_master1\"}, \"trigger\": {\"type\": \"event_based\"}, \"dest_namespace_replace_count\":1 }"
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master2_Address}/api/v2.0/replication/policies" -d "{\"name\": \"master2_2_master3\", \"enabled\": true, \"deletion\":true, \"override\":true, \"replicate_deletion\":true, \"dest_registry\":{ \"id\": 2, \"name\": \"master2_2_master3\"}, \"trigger\": {\"type\": \"event_based\"}, \"dest_namespace_replace_count\":1 }"
+
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master3_Address}/api/v2.0/replication/policies" -d "{\"name\": \"master3_2_master1\", \"enabled\": true, \"deletion\":true, \"override\":true, \"replicate_deletion\":true, \"dest_registry\":{ \"id\": 1, \"name\": \"master3_2_master1\"}, \"trigger\": {\"type\": \"event_based\"}, \"dest_namespace_replace_count\":1 }"
+ curl -k -u $Harbor_UserPwd -X POST -H "Content-Type: application/json" "https://${Harbor_master3_Address}/api/v2.0/replication/policies" -d "{\"name\": \"master3_2_master2\", \"enabled\": true, \"deletion\":true, \"override\":true, \"replicate_deletion\":true, \"dest_registry\":{ \"id\": 2, \"name\": \"master3_2_master2\"}, \"trigger\": {\"type\": \"event_based\"}, \"dest_namespace_replace_count\":1 }"
+}
+
+function listReplications() {
+
+ curl -k -u $Harbor_UserPwd -X GET -H "Content-Type: application/json" "https://${Harbor_master1_Address}/api/v2.0/replication/policies"
+ curl -k -u $Harbor_UserPwd -X GET -H "Content-Type: application/json" "https://${Harbor_master2_Address}/api/v2.0/replication/policies"
+ curl -k -u $Harbor_UserPwd -X GET -H "Content-Type: application/json" "https://${Harbor_master3_Address}/api/v2.0/replication/policies"
+}
+
+#### main ######
+Harbor_master1_Address=master1:7443
+master1_Address=192.168.122.61
+Harbor_master2_Address=master2:7443
+master2_Address=192.168.122.62
+Harbor_master3_Address=master3:7443
+master3_Address=192.168.122.63
+Harbor_User=admin #登录Harbor的用户
+Harbor_Passwd="Harbor12345" #登录Harbor的用户密码
+Harbor_UserPwd="$Harbor_User:$Harbor_Passwd"
+
+
+createRegistries
+listRegistries
+createReplication
+listReplications
diff --git a/scripts/harbor_keepalived/check_harbor.sh b/scripts/harbor_keepalived/check_harbor.sh
new file mode 100644
index 000000000..0a3fb0bda
--- /dev/null
+++ b/scripts/harbor_keepalived/check_harbor.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+#count=$(docker-compose -f /opt/harbor/docker-compose.yml ps -a|grep healthy|wc -l)
+# 不能频繁调用docker-compose 否则会有非常多的临时目录被创建:/tmp/_MEI*
+count=$(docker ps |grep goharbor|grep healthy|wc -l)
+status=$(ss -tlnp|grep -w 443|wc -l)
+if [ $count -ne 11 -a ];then
+ exit 8
+elif [ $status -lt 2 ];then
+ exit 9
+else
+ exit 0
+fi
diff --git a/scripts/harbor_keepalived/docker-compose-keepalived-backup.yaml b/scripts/harbor_keepalived/docker-compose-keepalived-backup.yaml
new file mode 100644
index 000000000..7328f96a8
--- /dev/null
+++ b/scripts/harbor_keepalived/docker-compose-keepalived-backup.yaml
@@ -0,0 +1,14 @@
+version: '3.8'
+
+# Docker-Compose 单容器使用参考 YAML 配置文件
+# 更多配置参数请参考镜像 README.md 文档中说明
+services:
+ keepalived:
+ image: 'registry.cn-shenzhen.aliyuncs.com/colovu/keepalived:2.1'
+ privileged: true
+ network_mode: host
+ volumes:
+ - ./keepalived-backup.conf:/srv/conf/keepalived/keepalived.conf
+ - ./check_harbor.sh:/srv/conf/keepalived/check_harbor.sh
+ container_name: keepalived
+ restart: on-failure
diff --git a/scripts/harbor_keepalived/docker-compose-keepalived-master.yaml b/scripts/harbor_keepalived/docker-compose-keepalived-master.yaml
new file mode 100644
index 000000000..64f35aee4
--- /dev/null
+++ b/scripts/harbor_keepalived/docker-compose-keepalived-master.yaml
@@ -0,0 +1,14 @@
+version: '3.8'
+
+# Docker-Compose 单容器使用参考 YAML 配置文件
+# 更多配置参数请参考镜像 README.md 文档中说明
+services:
+ keepalived:
+ image: 'registry.cn-shenzhen.aliyuncs.com/colovu/keepalived:2.1'
+ privileged: true
+ network_mode: host
+ volumes:
+ - ./keepalived-master.conf:/srv/conf/keepalived/keepalived.conf
+ - ./check_harbor.sh:/srv/conf/keepalived/check_harbor.sh
+ container_name: keepalived
+ restart: on-failure
diff --git a/scripts/harbor_keepalived/keepalived-backup.conf b/scripts/harbor_keepalived/keepalived-backup.conf
new file mode 100644
index 000000000..be916c90f
--- /dev/null
+++ b/scripts/harbor_keepalived/keepalived-backup.conf
@@ -0,0 +1,31 @@
+vrrp_script check_harbor {
+ script "/srv/conf/keepalived/check_harbor.sh"
+ interval 10 # 间隔时间,单位为秒,默认1秒
+ fall 2 # 脚本几次失败转换为失败
+ rise 2 # 脚本连续监测成功后,把服务器从失败标记为成功的次数
+ timeout 5
+ init_fail
+}
+global_defs {
+ script_user root
+ router_id harbor-ha
+ enable_script_security
+ lvs_sync_daemon ens3 VI_1
+}
+vrrp_instance VI_1 {
+ state BACKUP
+ interface ens3
+ virtual_router_id 31 # 如果同一个局域网中有多套keepalive,那么要保证该id唯一
+ priority 50
+ advert_int 1
+ authentication {
+ auth_type PASS
+ auth_pass k8s-test
+ }
+ virtual_ipaddress {
+ 192.168.122.59
+ }
+ track_script {
+ check_harbor
+ }
+}
diff --git a/scripts/harbor_keepalived/keepalived-master.conf b/scripts/harbor_keepalived/keepalived-master.conf
new file mode 100644
index 000000000..de3566e48
--- /dev/null
+++ b/scripts/harbor_keepalived/keepalived-master.conf
@@ -0,0 +1,31 @@
+vrrp_script check_harbor {
+ script "/srv/conf/keepalived/check_harbor.sh"
+ interval 10 # 间隔时间,单位为秒,默认1秒
+ fall 2 # 脚本几次失败转换为失败
+ rise 2 # 脚本连续监测成功后,把服务器从失败标记为成功的次数
+ timeout 5
+ init_fail
+}
+global_defs {
+ script_user root
+ router_id harbor-ha
+ enable_script_security
+ lvs_sync_daemon ens3 VI_1
+}
+vrrp_instance VI_1 {
+ state MASTER
+ interface ens3
+ virtual_router_id 31 # 如果同一个局域网中有多套keepalive,那么要保证该id唯一
+ priority 100
+ advert_int 1
+ authentication {
+ auth_type PASS
+ auth_pass k8s-test
+ }
+ virtual_ipaddress {
+ 192.168.122.59
+ }
+ track_script {
+ check_harbor
+ }
+}
diff --git a/version/components.json b/version/components.json
index fab534439..f3f48a45c 100644
--- a/version/components.json
+++ b/version/components.json
@@ -91,6 +91,9 @@
"v1.25.11": "6ff43cc8266a21c7b62878a0a9507b085bbb079a37b095fab5bcd31f2dbd80e0",
"v1.25.12": "293252f0a1727bfad4ef4fe99d704a56ecea45e39b0ea77f629c55da39e377da",
"v1.25.13": "4694df9c5d700280c186980907ec8e695364f461b20e868336a71edabac2253e",
+ "v1.25.14": "6cce9224e8b939bb0c218ab1b047a934a8c2b23f07c7ade4586b5e1a4013c80f",
+ "v1.25.15": "f79ab4d8f3a11c9f6f1b2c040552d4e1b0462fa9f9ddde7431b990e4b6e387ff",
+ "v1.25.16": "11c70502ac5bad303b5b4103b9eb5b2a83376cf6a1bce878b6018c6ca44a7d6e",
"v1.26.0": "72631449f26b7203701a1b99f6914f31859583a0e247c3ac0f6aaf59ca80af19",
"v1.26.1": "1531abfe96e2e9d8af9219192c65d04df8507a46a081ae1e101478e95d2b63da",
"v1.26.2": "277d880dc6d79994fd333e49d42943b7c9183b1c4ffdbf9da59f806acec7fd82",
@@ -100,14 +103,27 @@
"v1.26.6": "ba699c3c26aaf64ef46d34621de9f3b62e37656943e09f23dc3bf5aa7b3f5094",
"v1.26.7": "812e6d0e94a3fc77d3e9d09dbe709190b77408936cc4e960d916e8401be11090",
"v1.26.8": "233a89277ca49dbd666b7391c6c0e43c33d2f08052d5b93e9cd0100ee69430c8",
+ "v1.26.9": "73e128821dd1f799a75c922218d12f6c4618b8e29cc7dae2a7390fb80092d3d9",
+ "v1.26.10": "27ed1d857f4a315f3d059168c6e25fdbf0559f9c8e59bab6c50e7921f74dadbf",
+ "v1.26.11": "58f886e39e517ba1a92493f136e80f1b6ea9362966ad9d2accdf2133004161f2",
+ "v1.26.12": "5a5d65acefb50010859be8ffba8e6e059d552ae357e3101c12c62e747a9416a2",
"v1.27.0": "78d0e04705a7bdb76a514d60f60c073b16334b15f57ee87f064354ca8a233e80",
"v1.27.1": "c7d32d698e99b90f877025104cb4a9f3f8c707e99e6817940f260135b6d1ad0a",
"v1.27.2": "95c4bfb7929900506a42de4d92280f06efe6b47e0a32cbc1f5a1ed737592977a",
"v1.27.3": "2cd663f25c2490bd614a6c0ad9089a47ef315caf0dbdf78efd787d5653b1c6e3",
"v1.27.4": "7be21d6fb3707fbbe8f0db0403db6234c8af773b941f931bf8248759ee988bcd",
"v1.27.5": "35df8efa6e1bc864ed3c48a665caed634a5c46cfd7f41cda5ad66defdfddb2aa",
+ "v1.27.6": "2bcdd68957ec25d0689bb56f32b4ec86e38463d2691d5ea21cd109c7afa3aa7c",
+ "v1.27.7": "bc589219a003b3b94c114e4bcf20549a02657a0c6e5c73f588b37817148892d2",
+ "v1.27.8": "f8864769b8b2d7a14f53eb983f23317ff14d68ab76aba71e9de17ce84c38d4eb",
+ "v1.27.9": "78dddac376fa2f04116022cb44ed39ccb9cb0104e05c5b21b220d5151e5c0f86",
"v1.28.0": "12ea68bfef0377ccedc1a7c98a05ea76907decbcf1e1ec858a60a7b9b73211bb",
- "v1.28.1": "6134dbc92dcb83c3bae1a8030f7bb391419b5d13ea94badd3a79b7ece75b2736"
+ "v1.28.1": "6134dbc92dcb83c3bae1a8030f7bb391419b5d13ea94badd3a79b7ece75b2736",
+ "v1.28.2": "6a4808230661c69431143db2e200ea2d021c7f1b1085e6353583075471310d00",
+ "v1.28.3": "ce3848b1dfa562e0fa2f911a3d8e3bb07ba040eea76654d68e213315c8846ac0",
+ "v1.28.4": "b4d2531b7cddf782f59555436bc098485b5fa6c05afccdeecf0d62d21d84f5bd",
+ "v1.28.5": "2b54078c5ea9e85b27f162f508e0bf834a2753e52a57e896812ec3dca92fe9cd",
+ "v1.29.0": "629d4630657caace9c819fd3797f4a70c397fbd41a2a7e464a0507dad675d52c"
},
"arm64": {
"v1.19.0": "db1c432646e6e6484989b6f7191f3610996ac593409f12574290bfc008ea11f5",
@@ -200,6 +216,9 @@
"v1.25.11": "570d87d56a24778bd0854270eeddc8bcfb275f1c711cced5b5948f631e0c3ede",
"v1.25.12": "6a22e2e830f9df16a96a1ac5a4034b950b89a0cc90b19dc1fb104b268e4cd251",
"v1.25.13": "d5380bd3f0562aee30d888f22b5650c7af54da83d9fe5187821bcedf21885a11",
+ "v1.25.14": "525181225d963ddbc17765587a7b5919aa68d7264a197f6a1359f32e7f4a2e03",
+ "v1.25.15": "e3f152ae529dd6363b2748f39d219f87490f3e995e8bd5332e756c4df692f5f4",
+ "v1.25.16": "55cc8e3c5985858b9f683bf6c7352d76f073d3dc136f450e8761c0ed7092c0f3",
"v1.26.0": "652844c9518786273e094825b74a1988c871552dc6ccf71366558e67409859d1",
"v1.26.1": "db101c4bb8e33bd69241de227ed317feee6d44dbd674891e1b9e11c6e8b369bb",
"v1.26.2": "f210d8617acf7c601196294f7ca97e4330b75dad00df6b8dd12393730c501473",
@@ -209,14 +228,27 @@
"v1.26.6": "003c7740750ad92d2ff3d58d4a15015906c120c93c7aa605ba98edd936061542",
"v1.26.7": "34192ceac2287029b36e2d6b682e55dee245ae622701dc3b36bd3203019b18d1",
"v1.26.8": "f12d5d748abb8586723b78a2f0300f88faf0391f56d4d49f1ad1cef74160a1b5",
+ "v1.26.9": "14c87cbb9a3fa02308a9546aad192ce2d93e5d1d0296d28ba449079e6a1cb2b2",
+ "v1.26.10": "1ddcb47ee4f7171736dbacc046a7ceae55411ee09920435c3821b530f4650428",
+ "v1.26.11": "a13318c1493e58a9f7c4359c79443f3c86a690ec601bcc76308c809d8d61edb8",
+ "v1.26.12": "2dee03d460e8a1b3f30e5ef48ce94f5eeb4ff4550e65860e6e2d94b368c2cde6",
"v1.27.0": "acd805c6783b678ee0068b9dd8165bbfd879c345fd9c25d6a978dbc965f48544",
"v1.27.1": "024a59cd6fc76784b597c0c1cf300526e856e8c9fefa5fa7948158929b739551",
"v1.27.2": "8f01f363f7c7f92de2f2276124a895503cdc5a60ff549440170880f296b087eb",
"v1.27.3": "495e2193ed779d25584b4b532796c2270df0f7139ef15fb89dc7980603615ef4",
"v1.27.4": "b4ede8a18ef3d1cfa61e6fbca8fcab02f8eee3d0770d2329490fa7be90a4cae4",
"v1.27.5": "3023ef1d2eff885af860e13c8b9fcdb857d259728f16bf992d59c2be522cec82",
+ "v1.27.6": "faec35315203913b835e9b789d89001a05e072943c960bcf4de1e331d08e10c8",
+ "v1.27.7": "46d7c43532233906919a53ee0e03ab04ab9e08514392d17a86f058e0364cda4b",
+ "v1.27.8": "0d0f5b2781d663d314e785d14361aa5a09cfaf6e1694aa3cc731f4f06342ec13",
+ "v1.27.9": "d3d022842b0b8e4661222e8873249f5acafdbef52fd1bfb98152a582352b3c40",
"v1.28.0": "b9b473d2d9136559b19eb465006af77df45c09862cd7ce6673a33aae517ff5ab",
- "v1.28.1": "7d2f68917470a5d66bd2a7d62897f59cb4afaeffb2f26c028afa119acd8c3fc8"
+ "v1.28.1": "7d2f68917470a5d66bd2a7d62897f59cb4afaeffb2f26c028afa119acd8c3fc8",
+ "v1.28.2": "010789a94cf512d918ec4a3ef8ec734dea0061d89a8293059ef9101ca1bf6bff",
+ "v1.28.3": "dcb37d78ccdfe9d8dd6f100e188ddc6e3f5570d0c49db68470073683b453a1e7",
+ "v1.28.4": "a4422780020954436b8e76ab1c59b68c5581a54432dd3e566c4709bb40c8d4f9",
+ "v1.28.5": "22bb6b3377204e93d008f33ac4924d77adca1478f1ae3b515c03476ba54f1adc",
+ "v1.29.0": "bbddee2d46d2e1643ae3623698b45b13aa2e858616d61c642f2f49e5bb14c980"
}
},
"kubelet": {
@@ -311,6 +343,9 @@
"v1.25.11": "4801700e29405e49a7e51cccb806decd65ca3a5068d459a40be3b4c5846b9a46",
"v1.25.12": "7aa7d0b4512e6d79ada2017c054b07aaf30d4dc0d740449364a5e2c26e2c1842",
"v1.25.13": "0399cfd7031cf5f3d7f8485b243a5ef37230e63d105d5f29966f0f81a58a8f6d",
+ "v1.25.14": "b9d1dbd9e7c1d3bda6249f38d7cd4f63e4188fa31cddd80d5e8ac1ce3a9a4d96",
+ "v1.25.15": "1136c5717df316c6d4efd96a676574825f771666b7a9148338f0079bb9412720",
+ "v1.25.16": "b159f4b0ce7987385902faf6b97530489a6340d728a9688c5791d8d18144b4b7",
"v1.26.0": "b64949fe696c77565edbe4100a315b6bf8f0e2325daeb762f7e865f16a6e54b5",
"v1.26.1": "8b99dd73f309ca1ac4005db638e82f949ffcfb877a060089ec0e729503db8198",
"v1.26.2": "e6dd2ee432a093492936ff8505f084b5ed41662f50231f1c11ae08ee8582a3f5",
@@ -320,14 +355,27 @@
"v1.26.6": "da82477404414eb342d6b93533f372aa1c41956a57517453ef3d39ebbfdf8cc2",
"v1.26.7": "2926ea2cd7fcd644d24a258bdf21e1a8cfd95412b1079914ca46466dae1d74f2",
"v1.26.8": "1c68a65a6a0c2230325e29da0cc3eaaef9bbf688a7a0bb8243b4a7ebfe0e3363",
+ "v1.26.9": "baa2b021ab2f90c342518e2b8981a18de7e1e6b33f11c57e3ff23d40364877a8",
+ "v1.26.10": "4c27b3a9f332a6762f7240d0784c64775d4db5a1b881eeae05c4561d06c267ec",
+ "v1.26.11": "a62953f20fa9fedff50c6c5423e68981e3382d92cf04174d5bca5f4d084de0c5",
+ "v1.26.12": "aed0a351b01f1e6a84a0992ef1265bb0c9994b900162c075df58d0d02517d3df",
"v1.27.0": "0b4ed4fcd75d33f5dff3ba17776e6089847fc83064d3f7a3ad59a34e94e60a29",
"v1.27.1": "cb2845fff0ce41c400489393da73925d28fbee54cfeb7834cd4d11e622cbd3a7",
"v1.27.2": "a0d12afcab3b2836de4a427558d067bebdff040e9b306b0512c93d9d2a066579",
"v1.27.3": "c0e18da6a55830cf4910ecd7261597c66ea3f8f58cf44d4adb6bdcb6e2e6f0bf",
"v1.27.4": "385f65878dc8b48df0f2bd369535ff273390518b5ac2cc1a1684d65619324704",
"v1.27.5": "66df07ab4f9d72028c97ec7e5eea23adc0ab62a209ba2285431456d7d75a5bb3",
+ "v1.27.6": "daa42f9b6f5e2176bbce0d24d89a05613000630bcddec1fafd2a8d42a523ce9d",
+ "v1.27.7": "236bc8bc22c52e914d3364c23e273628c63e193365b6a43b8cb013716c1cd2f5",
+ "v1.27.8": "2e0557b38c5b9a1263eed25a0b84d741453ed9c0c7bd916f80eadaf7edfb7784",
+ "v1.27.9": "ede60eea3acbac3f35dbb23d7b148f45cf169ebbb20af102d3ce141fc0bac60c",
"v1.28.0": "bfb6b977100963f2879a33e5fbaa59a5276ba829a957a6819c936e9c1465f981",
- "v1.28.1": "2bc22332f44f8fcd3fce57879fd873f977949ebd261571fbae31fbb2713a5dd3"
+ "v1.28.1": "2bc22332f44f8fcd3fce57879fd873f977949ebd261571fbae31fbb2713a5dd3",
+ "v1.28.2": "17edb866636f14eceaad58c56eab12af7ab3be3c78400aff9680635d927f1185",
+ "v1.28.3": "a3a058b4ba30da01ffe1801cd38fcad58a9022a2d39e080b4b2e0e9749a75ad5",
+ "v1.28.4": "db2a473b73c3754d4011590f2f0aa877657608499590c6b0f8b40bec96a3e9ba",
+ "v1.28.5": "bf37335da58182783a8c63866ec1f895b4c436e3ed96bdd87fe3f8ae8004ba1d",
+ "v1.29.0": "e1c38137db8d8777eed8813646b59bf4d22d19b9011ab11dc28e2e34f6b80a05"
},
"arm64": {
"v1.19.0": "d8fa5a9739ecc387dfcc55afa91ac6f4b0ccd01f1423c423dbd312d787bbb6bf",
@@ -420,6 +468,9 @@
"v1.25.11": "0140cf3aee0b9386fc8430c32bc94c169a6e50640947933733896e01490cbf6c",
"v1.25.12": "3402d0fcec5105bb08b917bb5a29a979c674aa10a12a1dfe4e0d80b292f9fe56",
"v1.25.13": "7a29aabb40a984f104b88c09312e897bb710e6bb68022537f8700e70971b984b",
+ "v1.25.14": "3a3d4ac26b26baef43188a6f52d40a20043db3ffdbcbefab8be222b58ce0f713",
+ "v1.25.15": "9ca686d5fac093bd3dfe72e8614a5d8d482b7e22d6a78ff5a2a639fc54e603b6",
+ "v1.25.16": "5f379fc59db0efc288236dbd0abd32b1b0206d1c435001b9c0c3996171e20ffd",
"v1.26.0": "fb033c1d079cac8babb04a25abecbc6cc1a2afb53f56ef1d73f8dc3b15b3c09e",
"v1.26.1": "f4b514162b52d19909cf0ddf0b816d8d7751c5f1de60eda90cd84dcccc56c399",
"v1.26.2": "33e77f93d141d3b9e207ae50ff050186dea084ac26f9ec88280f85bab9dad310",
@@ -429,14 +480,27 @@
"v1.26.6": "44c2cd64e1317df8252bca1cf196227c543005a3b10d52fb114401cb1617f32f",
"v1.26.7": "73e086cfd8cd1cef559e739e19aff2932f8a9e0bdba3c9faeb9185a86d067fbb",
"v1.26.8": "0f15e484c4a7a7c3bad9e0aa4d4334ca029b97513fbe03f053201dd937cf316e",
+ "v1.26.9": "f6b1dcee9960ffe6b778dc91cabef8ce4a7bd06c76378ef2784232709eace6a5",
+ "v1.26.10": "ddebcc1af7f203a2ee3d80dad0baaf84a4680748839f5583b39cbce4b8afa7f2",
+ "v1.26.11": "ff8940394446028e75a2b8155e22eccf635f6a128f45dee41e293493d2743d17",
+ "v1.26.12": "d4406ed5bfd12768c03fc4fbe011a01e5c91b74d1d4b526fe3ac320d13295ffb",
"v1.27.0": "37aa2edc7c0c4b3e488518c6a4b44c8aade75a55010534ee2be291220c73d157",
"v1.27.1": "dbb09d297d924575654db38ed2fc627e35913c2d4000c34613ac6de4995457d0",
"v1.27.2": "810cd9a611e9f084e57c9ee466e33c324b2228d4249ff38c2588a0cc3224f10d",
"v1.27.3": "2838fd55340d59f777d7bd7e5989fc72b7a0ca198cf4f3f723cd9956859ce942",
"v1.27.4": "c75ad8e7c7ef05c0c021b21a9fe86e92f64db1e4c1bc84e1baf45d8dbb8ba8d1",
"v1.27.5": "4e78fafdeb5d61ab6ebcd6e75e968c47001c321bec169bb9bd9f001132de5321",
+ "v1.27.6": "be579ef4e8fa3e1de9d40a77e4d35d99e535a293f66bf3038cbea9cf803d11e5",
+ "v1.27.7": "ed5bfa48ee64d5e6cf23ed9fc03ea0593021839429fdc1ea7cc2ebf3f11b6491",
+ "v1.27.8": "71849182ceb018dc084f499ad28b7b1afb7f23e35ccaf8421941dd5dafef0d4c",
+ "v1.27.9": "8a14bc3739f5ca3b23d08301c2e769ee58c8d1cecb7243b46b1c098ae77effd7",
"v1.28.0": "05dd12e35783cab4960e885ec0e7d0e461989b94297e7bea9018ccbd15c4dce9",
- "v1.28.1": "9b7fa64b2785da4a38768377961e227f8da629c56a5df43ca1b665dd07b56f3c"
+ "v1.28.1": "9b7fa64b2785da4a38768377961e227f8da629c56a5df43ca1b665dd07b56f3c",
+ "v1.28.2": "32269e9ec38c561d028b65c3048ea6a100e1292cbe9e505565222455c8096577",
+ "v1.28.3": "64f56e9c55183919153fe59df2c9015dff09c56de13a3cbccc0f04a95b76dab9",
+ "v1.28.4": "bf203989dd9b3987b8a0d2331dcce6319f834b57df810fafba5a4805d54823ac",
+ "v1.28.5": "28ddb696eb6e076f2a2f59ccaa2e409785a63346e5bda819717c6e0f58297702",
+ "v1.29.0": "0e0e4544c2a0a3475529154b7534d0d58683466efa04a2bb2e763b476db0bb16"
}
},
"kubectl": {
@@ -531,6 +595,9 @@
"v1.25.11": "d12bc7d26313546827683ff7b79d0cb2e7ac17cdad4dce138ed518e478b148a7",
"v1.25.12": "75842752ea07cb8ee2210df40faa7c61e1317e76d5c7968e380cae83447d4a0f",
"v1.25.13": "22c5d5cb95b671ea7d7accd77e60e4a787b6d40a6b8ba4d6c364cb3ca818c29a",
+ "v1.25.14": "06351e043b8ecd1206854643a2094ccf218180c1b3fab5243f78d2ccfc630ca2",
+ "v1.25.15": "6428297af0b06d1bb87601258fb61c13d82bf3187b2329b5f38b6f0fec5be575",
+ "v1.25.16": "5a9bc1d3ebfc7f6f812042d5f97b82730f2bdda47634b67bddf36ed23819ab17",
"v1.26.0": "b6769d8ac6a0ed0f13b307d289dc092ad86180b08f5b5044af152808c04950ae",
"v1.26.1": "d57be22cfa25f7427cfb538cfc8853d763878f8b36c76ce93830f6f2d67c6e5d",
"v1.26.2": "fcf86d21fb1a49b012bce7845cf00081d2dd7a59f424b28621799deceb5227b3",
@@ -540,14 +607,27 @@
"v1.26.6": "ee23a539b5600bba9d6a404c6d4ea02af3abee92ad572f1b003d6f5a30c6f8ab",
"v1.26.7": "d9dc7741e5f279c28ef32fbbe1daa8ebc36622391c33470efed5eb8426959971",
"v1.26.8": "d8e0dba258d1096f95bb6746ca359db2ee8abe226e777f89dc8a5d1bb76795aa",
+ "v1.26.9": "98ea4a13895e54ba24f57e0d369ff6be0d3906895305d5390197069b1da12ae2",
+ "v1.26.10": "93ad44b4072669237247bfbc171be816f08e7e9e4260418d2cfdd0da1704ae86",
+ "v1.26.11": "27c34a0870230d9dd723e1e01114634e396cd2a3d25ced263b769a4bd53e4edd",
+ "v1.26.12": "8e6af8d68e7b9d2a1eb43255c0da793276e549a34a2b9c3c87a9c26438e7fd71",
"v1.27.0": "71a78259d70da9c5540c4cf4cff121f443e863376f68f89a759d90cef3f51e87",
"v1.27.1": "7fe3a762d926fb068bae32c399880e946e8caf3d903078bea9b169dcd5c17f6d",
"v1.27.2": "4f38ee903f35b300d3b005a9c6bfb9a46a57f92e89ae602ef9c129b91dc6c5a5",
"v1.27.3": "fba6c062e754a120bc8105cde1344de200452fe014a8759e06e4eec7ed258a09",
"v1.27.4": "4685bfcf732260f72fce58379e812e091557ef1dfc1bc8084226c7891dd6028f",
"v1.27.5": "9a091fb65e4cf4e8be3ce9a21c79210177dd7ce31a2998ec638c92f37f058bcd",
+ "v1.27.6": "2b7adb71c8630904da1b94e262c8c3c477e9609b3c0ed8ae1213a1e156ae38dd",
+ "v1.27.7": "e5fe510ba6f421958358d3d43b3f0b04c2957d4bc3bb24cf541719af61a06d79",
+ "v1.27.8": "027b3161e99fa0a7fa529e8f17f73ee2c0807c81c721ca7cf307f6b41c17bc57",
+ "v1.27.9": "d0caae91072297b2915dd65f6ef3055d27646dce821ec67d18da35ba9a8dc85b",
"v1.28.0": "4717660fd1466ec72d59000bb1d9f5cdc91fac31d491043ca62b34398e0799ce",
- "v1.28.1": "e7a7d6f9d06fab38b4128785aa80f65c54f6675a0d2abef655259ddd852274e1"
+ "v1.28.1": "e7a7d6f9d06fab38b4128785aa80f65c54f6675a0d2abef655259ddd852274e1",
+ "v1.28.2": "c922440b043e5de1afa3c1382f8c663a25f055978cbc6e8423493ec157579ec5",
+ "v1.28.3": "0c680c90892c43e5ce708e918821f92445d1d244f9b3d7513023bcae9a6246d1",
+ "v1.28.4": "893c92053adea6edbbd4e959c871f5c21edce416988f968bec565d115383f7b8",
+ "v1.28.5": "2a44c0841b794d85b7819b505da2ff3acd5950bd1bcd956863714acc80653574",
+ "v1.29.0": "0e03ab096163f61ab610b33f37f55709d3af8e16e4dcc1eb682882ef80f96fd5"
},
"arm64": {
"v1.19.0": "d4adf1b6b97252025cb2f7febf55daa3f42dc305822e3da133f77fd33071ec2f",
@@ -640,6 +720,9 @@
"v1.25.11": "2eb5109735c1442dd3b91a15ff74e24748efd967a3d7bf1a2b16e7aa78400677",
"v1.25.12": "315a1515b7fe254d7aa4f5928007b4f4e586bfd91ea6cbf392718099920dcb8a",
"v1.25.13": "90bb3c9126b64f5eee2bef5a584da8bf0a38334e341b427b6986261af5f0d49b",
+ "v1.25.14": "a52ec9119e390ad872a74fc560a6569b1758a4217fd2b03e966f77aaa2a2b706",
+ "v1.25.15": "ae213606b3965872b4e97ceb58fce5be796e7b26ea680681e8a3c2b549fe1701",
+ "v1.25.16": "d6c23c80828092f028476743638a091f2f5e8141273d5228bf06c6671ef46924",
"v1.26.0": "79b14e4ddada9e81d2989f36a89faa9e56f8abe6e0246e7bdc305c93c3731ea4",
"v1.26.1": "4027cb0a2840bc14ec3f18151b3360dd2d1f6ce730ed5ac28bd846c17e7d73f5",
"v1.26.2": "291e85bef77e8440205c873686e9938d7f87c0534e9a491de64e3cc0584295b6",
@@ -649,14 +732,27 @@
"v1.26.6": "8261d35cd374c438104bb5257e6c9dafb8443cd0eed8272b219ec5aa17b8ca40",
"v1.26.7": "71edc4c6838a7332e5f82abb35642ce7f905059a258690b0a585d3ed6de285b3",
"v1.26.8": "e93f836cba409b5ef5341020d9501067a51bf8210cb35649518e5f4d114244cf",
+ "v1.26.9": "f945c63220b393ddf8df67d87e67ff74b7f56219a670dee38bc597a078588e90",
+ "v1.26.10": "5752e3908fa1d338eb1fa99a6f39c6a4c27b065cb459da84e35c4ec718879f14",
+ "v1.26.11": "4a6d2b7204af3cf84cd0e2c670fbb211501050c9a288de49de3c6363d4e0a63e",
+ "v1.26.12": "b9cfdb6c9a53146330d5694e711c48febb7ec022aea8d16a51b5e12d761580cc",
"v1.27.0": "f8e09630211f2b7c6a8cc38835e7dea94708d401f5c84b23a37c70c604602ddc",
"v1.27.1": "fd3cb8f16e6ed8aee9955b76e3027ac423b6d1cc7356867310d128082e2db916",
"v1.27.2": "1b0966692e398efe71fe59f913eaec44ffd4468cc1acd00bf91c29fa8ff8f578",
"v1.27.3": "7bb7fec4e28e0b50b603d64e47629e812408751bd1e0ce059b2fee83b0e3ff6f",
"v1.27.4": "5178cbb51dcfff286c20bc847d64dd35cd5993b81a2e3609581377a520a6425d",
"v1.27.5": "0158955c59c775165937918f910380ed7b52fca4a26fb41a369734e83aa44874",
+ "v1.27.6": "7322a6f600de6d0d06cf333bdc24cd2a340bba12920b0c2385c97884c808c810",
+ "v1.27.7": "61fc334f2c0290270e43fb8a1d4ff07e8cec5642d5a123eb7ab66a134b04ae83",
+ "v1.27.8": "97ed6739e2803e63fd2d9de78be22d5ba6205bb63179a16ec773063526525a8e",
+ "v1.27.9": "bda475539fdeda9d8a85a84b967af361af264d0826c121b23b0b62ee9b00cd2d",
"v1.28.0": "f5484bd9cac66b183c653abed30226b561f537d15346c605cc81d98095f1717c",
- "v1.28.1": "46954a604b784a8b0dc16754cfc3fa26aabca9fd4ffd109cd028bfba99d492f6"
+ "v1.28.1": "46954a604b784a8b0dc16754cfc3fa26aabca9fd4ffd109cd028bfba99d492f6",
+ "v1.28.2": "ea6d89b677a8d9df331a82139bb90d9968131530b94eab26cee561531eff4c53",
+ "v1.28.3": "06511f03e34d8ee350bd55717845e27ebec3116526db7c60092eeb33a475a337",
+ "v1.28.4": "edf1e17b41891ec15d59dd3cc62bcd2cdce4b0fd9c2ee058b0967b17534457d7",
+ "v1.28.5": "f87fe017ae3ccfd93df03bf17edd4089672528107f230563b8c9966909661ef2",
+ "v1.29.0": "8f7a4bd6bae900a4ddab12bd1399aa652c0d59ea508f39b910e111d248893ff7"
}
},
"etcd": {
@@ -680,7 +776,10 @@
"v3.5.4": "b1091166153df1ee0bb29b47fb1943ef0ddf0cd5d07a8fe69827580a08134def",
"v3.5.5": "7910a2fdb1863c80b885d06f6729043bff0540f2006bf6af34674df2636cb906",
"v3.5.6": "4db32e3bc06dd0999e2171f76a87c1cffed8369475ec7aa7abee9023635670fb",
- "v3.5.7": "a43119af79c592a874e8f59c4f23832297849d0c479338f9df36e196b86bc396"
+ "v3.5.7": "a43119af79c592a874e8f59c4f23832297849d0c479338f9df36e196b86bc396",
+ "v3.5.8": "d4c1b8d90ad53658f12ffc293afc5694b7bc6cb093af609188649a799e1cc8dc",
+ "v3.5.9": "d59017044eb776597eca480432081c5bb26f318ad292967029af1f62b588b042",
+ "v3.5.10": "26e90d024fa2310bc52bb40e7f2132e81640b55f8fc446c00ae07e30af2a44fd"
},
"arm64": {
"v3.4.13": "1934ebb9f9f6501f706111b78e5e321a7ff8d7792d3d96a76e2d01874e42a300",
@@ -702,7 +801,10 @@
"v3.5.4": "8e9c2c28ed6b35f36fd94300541da10e1385f335d677afd8efccdcba026f1fa7",
"v3.5.5": "a8d177ae8ecfd1ef025c35ac8c444041d14e67028c1a7b4eda3a69a8dee5f9c3",
"v3.5.6": "888e25c9c94702ac1254c7655709b44bb3711ebaabd3cb05439f3dd1f2b51a87",
- "v3.5.7": "1a35314900da7db006b198dd917e923459b462128101736c63a3cda57ecdbf51"
+ "v3.5.7": "1a35314900da7db006b198dd917e923459b462128101736c63a3cda57ecdbf51",
+ "v3.5.8": "3f4441b293a2d0d4d2f8b2cd9504376e15818f7b865ef4b436e8e6f865f895ff",
+ "v3.5.9": "bb201c106a61bbab59e2d9f37f4bdff99d50201f513c66b4578741eab581fb28",
+ "v3.5.10": "ff74a6018d9b2a1320bff30e5a11b4f2f5c2a3d147df8a8bad53c01b9f800ee1"
}
},
"helm": {
@@ -744,7 +846,8 @@
"v3.10.2": "72f1c0fcfb17b41b89087e9232e50f20c606e44a0edc2bb9737e05d1c75b8c4f",
"v3.10.3": "cc5223b23fd2ccdf4c80eda0acac7a6a5c8cdb81c5b538240e85fe97aa5bc3fb",
"v3.11.0": "930918464763e66f9f99bed076357abc4bc56b040c053fce9884314964ca0fcc",
- "v3.11.1": "f5366ce6d2118b0ef7134db08273a058649d88a27deb4b9d3cc0881bb55119a8"
+ "v3.11.1": "f5366ce6d2118b0ef7134db08273a058649d88a27deb4b9d3cc0881bb55119a8",
+ "v3.13.1": "77a68582fac7290df476e1e698f7dd70bb496bf1d475e123664e921f4478c567"
},
"arm64": {
"v3.2.1": "20bb9d66e74f618cd104ca07e4525a8f2f760dd6d5611f7d59b6ac574624d672",
@@ -784,7 +887,8 @@
"v3.10.2": "a60d66e54d28529d41bef1309d32f1d6c47ba2201ca4dfdab17a33834c0ffc52",
"v3.10.3": "2b75e7112367ca237cd39408353dcfef9b81b1b5cf78e4826bdccb061dbb8dbd",
"v3.11.0": "f8ab55641ca83ce6d2ab7c048ed86794c9dc15f7e197fb7c6e7c2ec3c2d76c12",
- "v3.11.1": "2de8125127d555a006290f7dcd57235b1d83444a020b3bf7248c77cd6d3a629b"
+ "v3.11.1": "2de8125127d555a006290f7dcd57235b1d83444a020b3bf7248c77cd6d3a629b",
+ "v3.13.1": "aa8b2996fa70837083286fb3a33a153105ff11067ae2424b1ae7cf250b0dc353"
}
},
"kubecni": {
@@ -796,7 +900,8 @@
"v1.0.1": "5238fbb2767cbf6aae736ad97a7aa29167525dcd405196dfbc064672a730d3cf",
"v1.1.0": "05d46ac19d01669d424ee57401c0deba101763ac494858064b4ea4ffdcc37c5d",
"v1.1.1": "b275772da4026d2161bf8a8b41ed4786754c8a93ebfb6564006d5da7f23831e5",
- "v1.2.0": "f3a841324845ca6bf0d4091b4fc7f97e18a623172158b72fc3fdcdb9d42d2d37"
+ "v1.2.0": "f3a841324845ca6bf0d4091b4fc7f97e18a623172158b72fc3fdcdb9d42d2d37",
+ "v1.3.0": "754a71ed60a4bd08726c3af705a7d55ee3df03122b12e389fdba4bea35d7dd7e"
},
"arm64": {
"v0.8.2": "922b6a3b864a9849cc5bd1672823b1891094260461c2cdd9718778ca8dcaef82",
@@ -806,7 +911,8 @@
"v1.0.1": "2d4528c45bdd0a8875f849a75082bc4eafe95cb61f9bcc10a6db38a031f67226",
"v1.1.0": "33fc7b8d9d5be2d7f95e69e6a9e2af206879942f1e6b7615c04017dce5067f1a",
"v1.1.1": "16484966a46b4692028ba32d16afd994e079dc2cc63fbc2191d7bfaf5e11f3dd",
- "v1.2.0": "525e2b62ba92a1b6f3dc9612449a84aa61652e680f7ebf4eff579795fe464b57"
+ "v1.2.0": "525e2b62ba92a1b6f3dc9612449a84aa61652e680f7ebf4eff579795fe464b57",
+ "v1.3.0": "de7a666fd6ad83a228086bd55756db62ef335a193d1b143d910b69f079e30598"
}
},
"k3s": {
@@ -860,7 +966,8 @@
"20.10.22": "945c3a3ddcb79ee7307496c2f39eb3d8372466e8654e63d60bbb462e4a3c1427",
"20.10.23": "0ee39f72cc434137d294c14d30897826bad6e24979e421f51a252769ad37e6d1",
"23.0.0": "6a03bbda96845b7451be2f6aba69c3816c60a97de318e83fd1b39d1be262d8af",
- "23.0.1": "ec8a71e79125d3ca76f7cc295f35eea225f4450e0ffe0775f103e2952ff580f6"
+ "23.0.1": "ec8a71e79125d3ca76f7cc295f35eea225f4450e0ffe0775f103e2952ff580f6",
+ "24.0.6": "99792dec613df93169a118b05312a722a63604b868e4c941b1b436abcf3bb70f"
},
"arm64": {
"20.10.2": "9ea59f249ae92bbaa9831a22f2affa2edc9e824f9daaba831ca51d6d22ef2df5",
@@ -886,7 +993,8 @@
"20.10.22": "2c75cd6c3dc9b81cb5bde664c882e4339a2054e09cf09606f9f7dd6970e7f078",
"20.10.23": "5c40bb7dcd1aad94be49ad75d24e7fd409119ed0eaad04f5d13c4fddfb397c8a",
"23.0.0": "2919ff3448187d4f13cfbe2332707cff3f6dcf2baaac42a34bea8dd21f434f4a",
- "23.0.1": "3865f837dbd951b19eeb5f7d87aada2e865b2017e9462fe389f0e5d9a438324d"
+ "23.0.1": "3865f837dbd951b19eeb5f7d87aada2e865b2017e9462fe389f0e5d9a438324d",
+ "24.0.6": "d9f58aecc42451503e82e6e0562cafa1812b334c92186a7f486e111e70a0f5bd"
}
},
"containerd": {
@@ -907,7 +1015,22 @@
"1.6.15": "191bb4f6e4afc237efc5c85b5866b6fdfed731bde12cceaa6017a9c7f8aeda02",
"1.6.16": "2415b431a900275c14942f87f751e1e13d513c1c2f062322b5ca5a9a2190f22a",
"1.6.17": "5f0584d000769d0cf08fc0e25135614ef5bf52971a6069175c78437699f3b8d4",
- "1.6.18": "c4e516376a2392520a87abea94baf2045cc3a67e9e0c90c75fb6ed038170561e"
+ "1.6.18": "c4e516376a2392520a87abea94baf2045cc3a67e9e0c90c75fb6ed038170561e",
+ "1.6.19": "3262454d9b3581f4d4da0948f77dde1be51cfc42347a1548bc9ab6870b055815",
+ "1.6.20": "bb9a9ccd6517e2a54da748a9f60dc9aa9d79d19d4724663f2386812f083968e2",
+ "1.6.21": "04dcc1b99368492caee758583e531392683268197e58156888a3cea2941117b6",
+ "1.6.22": "5671eb4eba97f0ec98223c84401c9aeb21d0ef16ac3ece3eb8fadd46174d7eab",
+ "1.6.23": "bcf16bb63a295721a2603e9a56602c5d18e5443df04a9f2c1ca5328f41556fcc",
+ "1.6.24": "a56fac5ba03c3d6f74ceae14abdc9fafabcba900105e9890c0ac895cc00164ad",
+ "1.7.0": "b068b05d58025dc9f2fc336674cac0e377a478930f29b48e068f97c783a423f0",
+ "1.7.1": "9504771bcb816d3b27fab37a6cf76928ee5e95a31eb41510a7d10ae726e01e85",
+ "1.7.2": "2755c70152ab40856510b4549c2dd530e15f5355eb7bf82868e813c9380e22a7",
+ "1.7.3": "de7f61aacba88ee647a7dcde1ca77672ec44ab9fb3e58ae90c0efc9b2d8f3068",
+ "1.7.4": "fc070fabfe3539d46ae5db160d18381270928b3f912e2e800947e9fbd43f510c",
+ "1.7.5": "33609ae2d5838bc5798306a1ac30d7f2c6a8cff785ca6253d2be8a8b3ccbab25",
+ "1.7.6": "58408cfa025003e671b0af72183b963363d519543d0d0ba186037e9c57489ffe",
+ "1.7.7": "371de359d6102c51f6ee2361d08297948d134ce7379e01cb965ceeffa4365fba",
+ "1.7.8": "5f1d017a5a7359514d6187d6656e88fb2a592d107e6298db7963dbddb9a111d9"
},
"arm64": {
"1.6.2": "a4b24b3c38a67852daa80f03ec2bc94e31a0f4393477cd7dc1c1a7c2d3eb2a95",
@@ -926,7 +1049,22 @@
"1.6.15": "d63e4d27c51e33cd10f8b5621c559f09ece8a65fec66d80551b36cac9e61a07d",
"1.6.16": "c2bf51fde02ec9cf8b9c18721bc4f53bd1f19fb2bb3251f41ece61af7347e082",
"1.6.17": "7e110faa738bff2f5f0ffd54c4ec2c17c05fd2af6de4877c839794ca3dadd61c",
- "1.6.18": "56b83a0bc955edc5ebaa3bd0f788e654b63395be00fcb1bd03ff4bdfe4b5e1e7"
+ "1.6.18": "56b83a0bc955edc5ebaa3bd0f788e654b63395be00fcb1bd03ff4bdfe4b5e1e7",
+ "1.6.19": "25a0dd6cce4e1058824d6dc277fc01dc45da92539ccb39bb6c8a481c24d2476e",
+ "1.6.20": "c3e6a054b18b20fce06c7c3ed53f0989bb4b255c849bede446ebca955f07a9ce",
+ "1.6.21": "d713d8fbec491705ffe8c33ecc9051a904f6eedc92574928e1d33616f291c583",
+ "1.6.22": "7882d6e7f4e97dcba041c37592c4cb9e7a5b4d972380c74d959e388b12d57d01",
+ "1.6.23": "ea7afb82dc5789307e684ef9b4a55ce1ee9a05dc02c2118df640b01207208c45",
+ "1.6.24": "1d741e9e2d907f02a8b2a46034a28ff9aacdba88c485cef2f4bad18be9ea23ba",
+ "1.7.0": "e7e5be2d9c92e076f1e2e15c9f0a6e0609ddb75f7616999b843cba92d01e4da2",
+ "1.7.1": "1f828dc063e3c24b0840b284c5635b5a11b1197d564c97f9e873b220bab2b41b",
+ "1.7.2": "d75a4ca53d9addd0b2c50172d168b12957e18b2d8b802db2658f2767f15889a6",
+ "1.7.3": "85d2eaedabff57ac1d7cd3884bf232155c4c46491f6b071982e4f7b684b74445",
+ "1.7.4": "ea5a04379bd4252fc1e0b7b37f69cd516350c5269054483535d6eab7a0c79d2e",
+ "1.7.5": "98fc6990820d52d45b56ea2cda808157d4e61bb30ded96887634644c03025fa9",
+ "1.7.6": "d844a1c8b993e7e9647f73b9814567004dce1287c0529ce55c50519490eafcce",
+ "1.7.7": "0a104f487193665d2681fcb5ed83f2baa5f97849fe2661188da835c9d4eaf9e3",
+ "1.7.8": "3fc551e8f51150804d80cc1958a271bd2252b6334f0355244d0faa5da7fa55d1"
}
},
"runc": {
@@ -934,13 +1072,17 @@
"v1.1.1": "5798c85d2c8b6942247ab8d6830ef362924cd72a8e236e77430c3ab1be15f080",
"v1.1.2": "e0436dfc5d26ca88f00e84cbdab5801dd9829b1e5ded05dcfc162ce5718c32ce",
"v1.1.3": "6e8b24be90fffce6b025d254846da9d2ca6d65125f9139b6354bab0272253d01",
- "v1.1.4": "db772be63147a4e747b4fe286c7c16a2edc4a8458bd3092ea46aaee77750e8ce"
+ "v1.1.4": "db772be63147a4e747b4fe286c7c16a2edc4a8458bd3092ea46aaee77750e8ce",
+ "v1.1.9": "b9bfdd4cb27cddbb6172a442df165a80bfc0538a676fbca1a6a6c8f4c6933b43",
+ "v1.1.10": "81f73a59be3d122ab484d7dfe9ddc81030f595cc59968f61c113a9a38a2c113a"
},
"arm64": {
"v1.1.1": "20c436a736547309371c7ac2a335f5fe5a42b450120e497d09c8dc3902c28444",
"v1.1.2": "6ebd968d46d00a3886e9a0cae2e0a7b399e110cf5d7b26e63ce23c1d81ea10ef",
"v1.1.3": "00c9ad161a77a01d9dcbd25b1d76fa9822e57d8e4abf26ba8907c98f6bcfcd0f",
- "v1.1.4": "dbb71e737eaef454a406ce21fd021bd8f1b35afb7635016745992bbd7c17a223"
+ "v1.1.4": "dbb71e737eaef454a406ce21fd021bd8f1b35afb7635016745992bbd7c17a223",
+ "v1.1.9": "b43e9f561e85906f469eef5a7b7992fc586f750f44a0e011da4467e7008c33a0",
+ "v1.1.10": "4830afd426bdeacbdf9cb8729524aa2ed51790b8c4b28786995925593708f1c8"
}
},
"crictl": {
@@ -951,7 +1093,8 @@
"v1.24.1": "4006d3af110b144865be0d308145e1f90f7b40dfa0b208d82d3d1d25f3b7bf97",
"v1.24.2": "53432dd365f7bf045c1e65ee2e44c74df6a0a8f0a798f640a945c8e07ad8682e",
"v1.25.0": "86ab210c007f521ac4cdcbcf0ae3fb2e10923e65f16de83e0e1db191a07f0235",
- "v1.26.0": "cda5e2143bf19f6b548110ffba0fe3565e03e8743fadd625fee3d62fc4134eed"
+ "v1.26.0": "cda5e2143bf19f6b548110ffba0fe3565e03e8743fadd625fee3d62fc4134eed",
+ "v1.28.0": "8dc78774f7cbeaf787994d386eec663f0a3cf24de1ea4893598096cb39ef2508"
},
"arm64": {
"v1.22.0": "a713c37fade0d96a989bc15ebe906e08ef5c8fe5e107c2161b0665e9963b770e",
@@ -960,7 +1103,8 @@
"v1.24.1": "02cc96f03fcd6fbf36746fe9cc29566bf5ddd223b4fcb7e3f948566cee45e6ca",
"v1.24.2": "c1410b15d5009287c94eabcc63b14dba68726771fa87fef743867df2eea0a6d5",
"v1.25.0": "651c939eca010bbf48cc3932516b194028af0893025f9e366127f5b50ad5c4f4",
- "v1.26.0": "b632ca705a98edc8ad7806f4279feaff956ac83aa109bba8a85ed81e6b900599"
+ "v1.26.0": "b632ca705a98edc8ad7806f4279feaff956ac83aa109bba8a85ed81e6b900599",
+ "v1.28.0": "06e9224e42bc5e23085751e93cccdac89f7930ba6f7a45b8f8fc70ef663c37c4"
}
},
"registry": {