Skip to content

Commit

Permalink
sysdump: exclude endpoint object files by default
Browse files Browse the repository at this point in the history
Set the `--exclude-object-files` flag that was added in
cilium/cilium#22370 as a default flag when
running sysdump.

The flag is added only if cilium version is > 1.12.4, which is the
latest release before cilium/cilium#22370 was merged to main.

Signed-off-by: Thomas Balthazar <thomas@balthazar.info>
  • Loading branch information
tbalthazar committed Dec 13, 2022
1 parent 30310b1 commit 95c56ff
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 9 deletions.
10 changes: 2 additions & 8 deletions connectivity/check/context.go
Expand Up @@ -509,18 +509,12 @@ func (ct *ConnectivityTest) initCiliumPods(ctx context.Context) error {
func (ct *ConnectivityTest) DetectMinimumCiliumVersion(ctx context.Context) (*semver.Version, error) {
var minVersion *semver.Version
for name, ciliumPod := range ct.ciliumPods {
stdout, err := ciliumPod.K8sClient.ExecInPod(ctx, ciliumPod.Pod.Namespace, ciliumPod.Pod.Name,
defaults.AgentContainerName, []string{"cilium", "version", "-o", "jsonpath={$.Daemon.Version}"})
if err != nil {
return nil, fmt.Errorf("unable to fetch cilium version on pod %q: %w", name, err)
}
v, _, _ := strings.Cut(strings.TrimSpace(stdout.String()), "-") // strips proprietary -releaseX suffix
podVersion, err := semver.Parse(v)
podVersion, err := ciliumPod.K8sClient.GetCiliumVersion(ctx, ciliumPod.Pod)
if err != nil {
return nil, fmt.Errorf("unable to parse cilium version on pod %q: %w", name, err)
}
if minVersion == nil || podVersion.LT(*minVersion) {
minVersion = &podVersion
minVersion = podVersion
}
}

Expand Down
23 changes: 23 additions & 0 deletions k8s/client.go
Expand Up @@ -808,6 +808,29 @@ func getCiliumVersionFromImage(image string) (string, error) {
return version, nil
}

// GetCiliumVersion returns a semver.Version representing the version of cilium
// running in the cilium-agent pod
func (c *Client) GetCiliumVersion(ctx context.Context, p *corev1.Pod) (*semver.Version, error) {
o, _, err := c.ExecInPodWithStderr(
ctx,
p.Namespace,
p.Name,
defaults.AgentContainerName,
[]string{"cilium", "version", "-o", "jsonpath={$.Daemon.Version}"},
)
if err != nil {
return nil, fmt.Errorf("unable to fetch cilium version on pod %q: %w", p.Name, err)
}

v, _, _ := strings.Cut(strings.TrimSpace(o.String()), "-") // strips proprietary -releaseX suffix
podVersion, err := semver.Parse(v)
if err != nil {
return nil, fmt.Errorf("unable to parse cilium version on pod %q: %w", p.Name, err)
}

return &podVersion, nil
}

func (c *Client) GetRunningCiliumVersion(ctx context.Context, namespace string) (string, error) {
pods, err := c.ListPods(ctx, namespace, metav1.ListOptions{LabelSelector: defaults.AgentPodSelector})
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions sysdump/client.go
Expand Up @@ -15,6 +15,7 @@ import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"

"github.com/blang/semver/v4"
ciliumv2 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2"
ciliumv2alpha1 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2alpha1"

Expand All @@ -37,6 +38,7 @@ type KubernetesClient interface {
GetLogs(ctx context.Context, namespace, name, container string, sinceTime time.Time, limitBytes int64, previous bool) (string, error)
GetPodsTable(ctx context.Context) (*metav1.Table, error)
GetSecret(ctx context.Context, namespace, name string, opts metav1.GetOptions) (*corev1.Secret, error)
GetCiliumVersion(ctx context.Context, p *corev1.Pod) (*semver.Version, error)
GetVersion(ctx context.Context) (string, error)
ListCiliumClusterwideNetworkPolicies(ctx context.Context, opts metav1.ListOptions) (*ciliumv2.CiliumClusterwideNetworkPolicyList, error)
ListCiliumClusterwideEnvoyConfigs(ctx context.Context, opts metav1.ListOptions) (*ciliumv2.CiliumClusterwideEnvoyConfigList, error)
Expand Down
18 changes: 17 additions & 1 deletion sysdump/sysdump.go
Expand Up @@ -15,6 +15,7 @@ import (
"sync"
"time"

"github.com/blang/semver/v4"
"github.com/cilium/workerpool"
"github.com/mholt/archiver/v3"
corev1 "k8s.io/api/core/v1"
Expand Down Expand Up @@ -1194,8 +1195,23 @@ func (c *Collector) submitCiliumBugtoolTasks(ctx context.Context, pods []*corev1
}
}()

// Default flags for cilium-bugtool
bugtoolFlags := []string{"--archiveType=gz"}
ciliumVersion, err := c.Client.GetCiliumVersion(ctx, p)
if err == nil {
// We want to run cilium-bugtool with this flag by default, but it was
// introduced after this version of cilium
if minimumVersion, err := semver.Parse("1.12.4"); err == nil {
if ciliumVersion.GT(minimumVersion) {
bugtoolFlags = append(bugtoolFlags, "--exclude-object-files")
}
}
}
// Additional flags
bugtoolFlags = append(bugtoolFlags, c.Options.CiliumBugtoolFlags...)

// Run 'cilium-bugtool' in the pod.
command := append([]string{ciliumBugtoolCommand, "--archiveType=gz"}, c.Options.CiliumBugtoolFlags...)
command := append([]string{ciliumBugtoolCommand}, bugtoolFlags...)

c.logDebug("Executing cilium-bugtool command: %v", command)
o, e, err := c.Client.ExecInPodWithStderr(ctx, p.Namespace, p.Name, containerName, command)
Expand Down

0 comments on commit 95c56ff

Please sign in to comment.