talos/internal/integration/cli/services.go
Andrey Smirnov a76f6d69db
feat: allow kubelet to be restarted and provide negative nodeIP subnets
Fixes #4407 fixes #4489

This PR started by enabling simple restart of the `kubelet` service via
services API, but it turned out there's a problem:

When kubelet restarts, CNI is already up, so there's an interface on the
host with CNI node IP, the code which picks kubelet node IP finds it and
tries to add it to the list of kubelet node IPs which completely breaks
kubelet.

Solution was easy: allow node IPs to be filtered out - e.g. we never
want kubelet node IP to be from the pod CIDR.

But this filtering feature is also useful in other cases, so I added
that as well.

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2021-11-15 15:43:34 +03:00

58 lines
1.6 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//go:build integration_cli
// +build integration_cli
package cli
import (
"regexp"
"time"
"github.com/talos-systems/talos/internal/integration/base"
)
// ServicesSuite verifies dmesg command.
type ServicesSuite struct {
base.CLISuite
}
// SuiteName ...
func (suite *ServicesSuite) SuiteName() string {
return "cli.ServicesSuite"
}
// TestList verifies service list.
func (suite *ServicesSuite) TestList() {
suite.RunCLI([]string{"services", "--nodes", suite.RandomDiscoveredNode()},
base.StdoutShouldMatch(regexp.MustCompile(`STATE`)),
base.StdoutShouldMatch(regexp.MustCompile(`apid`)),
)
}
// TestStatus verifies service status.
func (suite *ServicesSuite) TestStatus() {
suite.RunCLI([]string{"service", "apid", "--nodes", suite.RandomDiscoveredNode()},
base.StdoutShouldMatch(regexp.MustCompile(`STATE`)),
base.StdoutShouldMatch(regexp.MustCompile(`apid`)),
base.StdoutShouldMatch(regexp.MustCompile(`\[Running\]`)),
)
}
// TestRestart verifies kubelet restart.
func (suite *ServicesSuite) TestRestart() {
node := suite.RandomDiscoveredNode()
suite.RunCLI([]string{"service", "kubelet", "restart", "--nodes", node})
time.Sleep(200 * time.Millisecond)
suite.RunAndWaitForMatch([]string{"service", "-n", node, "kubelet"}, regexp.MustCompile(`EVENTS\s+\[Running\]: Health check successful`), 30*time.Second)
}
func init() {
allSuites = append(allSuites, new(ServicesSuite))
}