Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch agent from StatefulSet to Deployment (SURE-9419) #3364

Merged
merged 3 commits into from
Feb 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/scripts/deploy-fleet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ eventually helm upgrade --install fleet charts/fleet \
# wait for controller and agent rollout
kubectl -n cattle-fleet-system rollout status deploy/fleet-controller
{ grep -E -q -m 1 "fleet-agent-local.*1/1"; kill $!; } < <(kubectl get bundles -n fleet-local -w)
kubectl -n cattle-fleet-system rollout status statefulset/fleet-agent
kubectl -n cattle-fleet-system rollout status deployment/fleet-agent

# label local cluster
kubectl patch clusters.fleet.cattle.io -n fleet-local local --type=json -p '[{"op": "add", "path": "/metadata/labels/management.cattle.io~1cluster-display-name", "value": "local" }]'
2 changes: 1 addition & 1 deletion .github/scripts/upgrade-rancher-fleet-to-dev-fleet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,6 @@ sleep 5
{ grep -E -q -m 1 "fleet-agent-c.*1/1"; kill $!; } < <(kubectl get bundles -n fleet-default -w)

kubectl config use-context k3d-downstream
kubectl -n cattle-fleet-system rollout status statefulset/fleet-agent
kubectl -n cattle-fleet-system rollout status deployment/fleet-agent

helm list -A
39 changes: 37 additions & 2 deletions charts/fleet-agent/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
apiVersion: apps/v1
kind: StatefulSet
kind: Deployment
metadata:
name: fleet-agent
spec:
serviceName: fleet-agent
selector:
matchLabels:
app: fleet-agent
Expand All @@ -18,6 +17,18 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
{{- if $.Values.leaderElection.leaseDuration }}
- name: CATTLE_ELECTION_LEASE_DURATION
value: {{$.Values.leaderElection.leaseDuration}}
{{- end }}
{{- if $.Values.leaderElection.retryPeriod }}
- name: CATTLE_ELECTION_RETRY_PERIOD
value: {{$.Values.leaderElection.retryPeriod}}
{{- end }}
{{- if $.Values.leaderElection.renewDeadline }}
- name: CATTLE_ELECTION_RENEW_DEADLINE
value: {{$.Values.leaderElection.renewDeadline}}
{{- end }}
image: '{{ template "system_default_registry" . }}{{.Values.image.repository}}:{{.Values.image.tag}}'
name: fleet-agent-register
command:
Expand Down Expand Up @@ -51,6 +62,18 @@ spec:
- name: DRIFT_RECONCILER_WORKERS
value: {{ quote $.Values.agent.reconciler.workers.drift }}
{{- end }}
{{- if $.Values.leaderElection.leaseDuration }}
- name: CATTLE_ELECTION_LEASE_DURATION
value: {{$.Values.leaderElection.leaseDuration}}
{{- end }}
{{- if $.Values.leaderElection.retryPeriod }}
- name: CATTLE_ELECTION_RETRY_PERIOD
value: {{$.Values.leaderElection.retryPeriod}}
{{- end }}
{{- if $.Values.leaderElection.renewDeadline }}
- name: CATTLE_ELECTION_RENEW_DEADLINE
value: {{$.Values.leaderElection.renewDeadline}}
{{- end }}
image: '{{ template "system_default_registry" . }}{{.Values.image.repository}}:{{.Values.image.tag}}'
name: fleet-agent
command:
Expand Down Expand Up @@ -79,6 +102,18 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
{{- if $.Values.leaderElection.leaseDuration }}
- name: CATTLE_ELECTION_LEASE_DURATION
value: {{$.Values.leaderElection.leaseDuration}}
{{- end }}
{{- if $.Values.leaderElection.retryPeriod }}
- name: CATTLE_ELECTION_RETRY_PERIOD
value: {{$.Values.leaderElection.retryPeriod}}
{{- end }}
{{- if $.Values.leaderElection.renewDeadline }}
- name: CATTLE_ELECTION_RENEW_DEADLINE
value: {{$.Values.leaderElection.renewDeadline}}
{{- end }}
image: '{{ template "system_default_registry" . }}{{.Values.image.repository}}:{{.Values.image.tag}}'
name: fleet-agent-clusterstatus
command:
Expand Down
9 changes: 0 additions & 9 deletions charts/fleet-agent/templates/service.yaml

This file was deleted.

6 changes: 6 additions & 0 deletions charts/fleet-agent/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,9 @@ agent:
workers:
bundledeployment: "50"
drift: "50"

## Leader election configuration
leaderElection:
leaseDuration: 30s
retryPeriod: 10s
renewDeadline: 25s
2 changes: 1 addition & 1 deletion dev/setup-fleet
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ helm -n cattle-fleet-system upgrade --install --create-namespace --wait --reset-
# wait for controller and agent rollout
kubectl -n cattle-fleet-system rollout status deployment/fleet-controller
{ grep -E -q -m 1 "fleet-agent-local.*1/1"; kill $!; } < <(kubectl get bundles -n fleet-local -w)
kubectl -n cattle-fleet-system rollout status statefulset/fleet-agent
kubectl -n cattle-fleet-system rollout status deployment/fleet-agent

# label local cluster
kubectl patch clusters.fleet.cattle.io -n fleet-local local --type=json -p '[{"op": "add", "path": "/metadata/labels/management.cattle.io~1cluster-display-name", "value": "local" }]'
4 changes: 2 additions & 2 deletions e2e/installation/verify_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,15 @@ var _ = Describe("Fleet Installation", func() {
Context("Verify agents are updated to new image", func() {
It("has the expected fleet images", func() {
Eventually(func() string {
out, _ := k.Namespace(localAgentNamespace).Get("statefulsets", "-owide")
out, _ := k.Namespace(localAgentNamespace).Get("deployments", "-owide")
return out
}).Should(ContainSubstring("rancher/fleet-agent:" + version))
})

It("has the expected fleet-agent image in the downstream cluster", Label("multi-cluster"), func() {
kd := env.Kubectl.Context(env.Downstream)
Eventually(func() string {
out, _ := kd.Namespace(agentNamespace).Get("statefulsets", "-owide")
out, _ := kd.Namespace(agentNamespace).Get("deployments", "-owide")
return out
}).Should(ContainSubstring("rancher/fleet-agent:" + version))
})
Expand Down
44 changes: 20 additions & 24 deletions e2e/multi-cluster/installation/agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,24 @@ import (

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/matchers"
"github.com/rancher/fleet/e2e/testenv/kubectl"
)

var (
agentMode string
kd kubectl.Command
)

var _ = Describe("Fleet installation with TLS agent modes", func() {
BeforeEach(func() {
kd = env.Kubectl.Context(env.Downstream)

_, err := kd.Delete(
"pod",
"-n",
"cattle-fleet-system",
"-l",
"app=fleet-agent",
)
Expect(err).NotTo(HaveOccurred())
})

JustBeforeEach(func() {
Expand All @@ -33,7 +39,6 @@ var _ = Describe("Fleet installation with TLS agent modes", func() {
),
)
Expect(err).ToNot(HaveOccurred(), string(out))

})

Context("with non-strict agent TLS mode", func() {
Expand All @@ -43,7 +48,7 @@ var _ = Describe("Fleet installation with TLS agent modes", func() {
})

It("reaches the server without cert issues", func() {
Eventually(func() bool {
Eventually(func(g Gomega) error {
logs, err := kd.Namespace("cattle-fleet-system").Logs(
"-l",
"app=fleet-agent",
Expand All @@ -52,19 +57,13 @@ var _ = Describe("Fleet installation with TLS agent modes", func() {
"--tail=-1",
)
if err != nil {
return false
return err
}

regexMatcher := matchers.MatchRegexpMatcher{
Regexp: "Failed to register agent.*could not find the requested resource",
}
reachesServerWithoutCertIssue, err := regexMatcher.Match(logs)
if err != nil {
return false
}
g.Expect(logs).To(MatchRegexp("Failed to register agent.*could not find the requested resource"))

return reachesServerWithoutCertIssue
}).Should(BeTrue())
return nil
}).ShouldNot(HaveOccurred())
})
})
})
Expand All @@ -76,7 +75,7 @@ var _ = Describe("Fleet installation with TLS agent modes", func() {
})

It("cannot reach the server because the cert is signed by an unknown authority", func() {
Eventually(func() bool {
Eventually(func(g Gomega) error {
logs, err := kd.Namespace("cattle-fleet-system").Logs(
"-l",
"app=fleet-agent",
Expand All @@ -85,19 +84,16 @@ var _ = Describe("Fleet installation with TLS agent modes", func() {
"--tail=-1",
)
if err != nil {
return false
return err
}

regexMatcher := matchers.MatchRegexpMatcher{
Regexp: "Failed to register agent.*signed by unknown authority",
}
reachesServerWithoutCertIssue, err := regexMatcher.Match(logs)
g.Expect(logs).To(MatchRegexp("Failed to register agent.*signed by unknown authority"))
if err != nil {
return false
return err
}

return reachesServerWithoutCertIssue
}).Should(BeTrue())
return nil
}).ShouldNot(HaveOccurred())
})
})
})
Expand Down
44 changes: 41 additions & 3 deletions e2e/multi-cluster/installation/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ func TestE2E(t *testing.T) {
}

var (
env *testenv.Env
ku kubectl.Command
config string
env *testenv.Env
ku kubectl.Command
kd kubectl.Command
config string
strategy string
)

var _ = BeforeSuite(func() {
Expand All @@ -31,6 +33,7 @@ var _ = BeforeSuite(func() {

env = testenv.New()
ku = env.Kubectl.Context(env.Upstream)
kd = env.Kubectl.Context(env.Downstream)

// Save initial state of `fleet-controller` config map
cfg, err := ku.Get(
Expand All @@ -42,6 +45,29 @@ var _ = BeforeSuite(func() {
"jsonpath={.data.config}")
Expect(err).ToNot(HaveOccurred(), cfg)

// Save initial state of `fleet-agent` deployment
strategy, err = kd.Get(
"deployment",
"fleet-agent",
"-n",
"cattle-fleet-system",
"-o",
"jsonpath={.spec.strategy}",
)
Expect(err).ToNot(HaveOccurred(), cfg)

// Patch `fleet-agent` deployment to use Recreate strategy
out, err := kd.Patch(
"deployment",
"fleet-agent",
"-n",
"cattle-fleet-system",
"--type=merge",
"-p",
`{"spec":{"strategy":{"type":"Recreate", "rollingUpdate":null}}}`,
)
Expect(err).ToNot(HaveOccurred(), string(out))

cfg = strings.ReplaceAll(cfg, `"`, `\"`)
config = strings.ReplaceAll(cfg, "\n", "")
})
Expand All @@ -58,4 +84,16 @@ var _ = AfterSuite(func() {
fmt.Sprintf(`{"data":{"config":"%s"}}`, config),
)
Expect(err).ToNot(HaveOccurred(), string(out))

// Restore initial state of deployment
out, err = kd.Patch(
"deployment",
"fleet-agent",
"-n",
"cattle-fleet-system",
"--type=merge",
"-p",
fmt.Sprintf(`{"spec":{"strategy":%s}}`, strategy),
)
Expect(err).ToNot(HaveOccurred(), string(out))
})
Loading
Loading