Skip to content

Commit 4c1bfa6

Browse files
committed
feat: set up kubernetes api server for each machine
Make it bind on the siderolink address. Pull in secrets generation code from the Talos repo. Set up a single embedded etcd for the whole emulator. Each API server connects to the same etcd but is using a different prefix: one prefix per cluster. Implement controllers that clean up etcd state after the cluster is destroyed. Signed-off-by: Artem Chernyshev <[email protected]>
1 parent ae49d4d commit 4c1bfa6

File tree

22 files changed

+2745
-44
lines changed

22 files changed

+2745
-44
lines changed

cmd/talemu/main.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323
"go.uber.org/zap/zapcore"
2424
"golang.org/x/sync/errgroup"
2525

26+
emuruntime "github.com/siderolabs/talemu/internal/pkg/emu"
27+
"github.com/siderolabs/talemu/internal/pkg/kubefactory"
2628
"github.com/siderolabs/talemu/internal/pkg/machine"
2729
"github.com/siderolabs/talemu/internal/pkg/machine/runtime"
2830
"github.com/siderolabs/talemu/internal/pkg/machine/runtime/resources/emu"
@@ -90,14 +92,28 @@ var rootCmd = &cobra.Command{
9092
return err
9193
}
9294

95+
kubernetes, err := kubefactory.New(ctx, "_out", logger)
96+
if err != nil {
97+
return err
98+
}
99+
100+
runtime, err := emuruntime.NewRuntime(emulatorState, kubernetes, logger)
101+
if err != nil {
102+
return err
103+
}
104+
105+
eg.Go(func() error {
106+
return runtime.Run(ctx)
107+
})
108+
93109
for i := range cfg.machinesCount {
94110
machine, err := machine.NewMachine(fmt.Sprintf("machine-%04d", i+1000), logger, emulatorState)
95111
if err != nil {
96112
return err
97113
}
98114

99115
eg.Go(func() error {
100-
return machine.Run(ctx, params, i+1000)
116+
return machine.Run(ctx, params, i+1000, kubernetes)
101117
})
102118

103119
machines = append(machines, machine)

go.mod

Lines changed: 140 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,27 @@ module github.com/siderolabs/talemu
22

33
go 1.22.5
44

5-
// forked go-yaml that introduces RawYAML interface, which can be used to populate YAML fields using bytes
6-
// which are then encoded as a valid YAML blocks with proper indentation
7-
replace gopkg.in/yaml.v3 => github.com/unix4ever/yaml v0.0.0-20220527175918-f17b0f05cf2c
5+
replace (
6+
// forked go-yaml that introduces RawYAML interface, which can be used to populate YAML fields using bytes
7+
// which are then encoded as a valid YAML blocks with proper indentation
8+
gopkg.in/yaml.v3 => github.com/unix4ever/yaml v0.0.0-20220527175918-f17b0f05cf2c
9+
10+
// all these rewrites are here to import k8s.io/kubernetes module
11+
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.30.2
12+
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.30.2
13+
k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.30.2
14+
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.30.2
15+
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.2
16+
k8s.io/mount-utils => k8s.io/mount-utils v0.30.2
17+
k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.30.2
18+
)
819

920
require (
1021
github.com/akutz/memconn v0.1.0
1122
github.com/cosi-project/runtime v0.5.2
1223
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0
1324
github.com/hashicorp/go-multierror v1.1.1
14-
github.com/jsimonetti/rtnetlink v1.4.1
25+
github.com/jsimonetti/rtnetlink v1.4.2
1526
github.com/jsimonetti/rtnetlink/v2 v2.0.2
1627
github.com/jxskiss/base62 v1.1.0
1728
github.com/martinlindhe/base36 v1.1.1
@@ -31,53 +42,171 @@ require (
3142
github.com/siderolabs/go-procfs v0.1.2
3243
github.com/siderolabs/go-retry v0.3.3
3344
github.com/siderolabs/grpc-proxy v0.4.1
34-
github.com/siderolabs/image-factory v0.4.2
45+
github.com/siderolabs/image-factory v0.2.1
3546
github.com/siderolabs/net v0.4.0
3647
github.com/siderolabs/omni/client v0.39.0
37-
github.com/siderolabs/siderolink v0.3.5
48+
github.com/siderolabs/siderolink v0.3.9
3849
github.com/siderolabs/talos/pkg/machinery v1.8.0-alpha.1.0.20240709134906-3bab15214de9
3950
github.com/spf13/cobra v1.8.1
4051
github.com/stretchr/testify v1.9.0
4152
go.etcd.io/bbolt v1.3.10
53+
go.etcd.io/etcd/client/v3 v3.5.14
54+
go.etcd.io/etcd/server/v3 v3.5.14
4255
go.uber.org/multierr v1.11.0
4356
go.uber.org/zap v1.27.0
4457
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
4558
golang.org/x/sync v0.7.0
46-
golang.org/x/sys v0.21.0
59+
golang.org/x/sys v0.22.0
4760
golang.org/x/time v0.5.0
4861
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6
4962
google.golang.org/grpc v1.65.0
5063
google.golang.org/protobuf v1.34.2
64+
k8s.io/apimachinery v0.30.2
65+
k8s.io/apiserver v0.30.2
66+
k8s.io/client-go v0.30.2
67+
k8s.io/kubernetes v1.30.2
5168
)
5269

5370
require (
71+
cloud.google.com/go/compute/metadata v0.3.0 // indirect
72+
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
73+
github.com/GoogleCloudPlatform/k8s-cloud-provider v1.18.1-0.20220218231025-f11817397a1b // indirect
74+
github.com/NYTimes/gziphandler v1.1.1 // indirect
75+
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 // indirect
76+
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
77+
github.com/beorn7/perks v1.0.1 // indirect
5478
github.com/blang/semver/v4 v4.0.0 // indirect
5579
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
80+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
5681
github.com/containerd/go-cni v1.1.10 // indirect
5782
github.com/containernetworking/cni v1.2.2 // indirect
83+
github.com/coreos/go-oidc v2.2.1+incompatible // indirect
84+
github.com/coreos/go-semver v0.3.1 // indirect
85+
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
5886
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
87+
github.com/distribution/reference v0.5.0 // indirect
5988
github.com/dustin/go-humanize v1.0.1 // indirect
89+
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
90+
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
91+
github.com/felixge/httpsnoop v1.0.4 // indirect
92+
github.com/fsnotify/fsnotify v1.7.0 // indirect
6093
github.com/gertd/go-pluralize v0.2.1 // indirect
94+
github.com/go-logr/logr v1.4.2 // indirect
95+
github.com/go-logr/stdr v1.2.2 // indirect
96+
github.com/go-openapi/jsonpointer v0.21.0 // indirect
97+
github.com/go-openapi/jsonreference v0.21.0 // indirect
98+
github.com/go-openapi/swag v0.23.0 // indirect
99+
github.com/gogo/protobuf v1.3.2 // indirect
100+
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
101+
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
102+
github.com/golang/protobuf v1.5.4 // indirect
61103
github.com/google/btree v1.1.2 // indirect
104+
github.com/google/cel-go v0.17.8 // indirect
105+
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect
62106
github.com/google/go-cmp v0.6.0 // indirect
107+
github.com/google/gofuzz v1.2.0 // indirect
108+
github.com/google/s2a-go v0.1.7 // indirect
109+
github.com/google/uuid v1.6.0 // indirect
110+
github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
111+
github.com/googleapis/gax-go/v2 v2.11.0 // indirect
112+
github.com/gorilla/websocket v1.5.3 // indirect
113+
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
114+
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
115+
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
63116
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
64117
github.com/hashicorp/errwrap v1.1.0 // indirect
118+
github.com/imdario/mergo v0.3.16 // indirect
65119
github.com/inconshreveable/mousetrap v1.1.0 // indirect
120+
github.com/jonboulle/clockwork v0.4.0 // indirect
121+
github.com/josharian/intern v1.0.0 // indirect
66122
github.com/josharian/native v1.1.0 // indirect
123+
github.com/json-iterator/go v1.1.12 // indirect
124+
github.com/mailru/easyjson v0.7.7 // indirect
125+
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
67126
github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 // indirect
68127
github.com/mdlayher/packet v1.1.2 // indirect
69128
github.com/mdlayher/socket v0.5.1 // indirect
129+
github.com/moby/spdystream v0.2.0 // indirect
130+
github.com/moby/sys/mountinfo v0.6.2 // indirect
131+
github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect
132+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
133+
github.com/modern-go/reflect2 v1.0.2 // indirect
134+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
135+
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
136+
github.com/opencontainers/go-digest v1.0.0 // indirect
70137
github.com/opencontainers/runtime-spec v1.2.0 // indirect
138+
github.com/opencontainers/selinux v1.11.0 // indirect
139+
github.com/pkg/errors v0.9.1 // indirect
71140
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
141+
github.com/pquerna/cachecontrol v0.1.0 // indirect
142+
github.com/prometheus/client_golang v1.17.0 // indirect
143+
github.com/prometheus/client_model v0.6.1 // indirect
144+
github.com/prometheus/common v0.45.0 // indirect
145+
github.com/prometheus/procfs v0.15.1 // indirect
146+
github.com/robfig/cron/v3 v3.0.1 // indirect
72147
github.com/ryanuber/go-glob v1.0.0 // indirect
73148
github.com/siderolabs/protoenc v0.2.1 // indirect
149+
github.com/sirupsen/logrus v1.9.3 // indirect
150+
github.com/soheilhy/cmux v0.1.5 // indirect
74151
github.com/spf13/pflag v1.0.5 // indirect
75-
golang.org/x/crypto v0.24.0 // indirect
76-
golang.org/x/net v0.26.0 // indirect
152+
github.com/stoewer/go-strcase v1.3.0 // indirect
153+
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 // indirect
154+
github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510 // indirect
155+
go.etcd.io/etcd/api/v3 v3.5.14 // indirect
156+
go.etcd.io/etcd/client/pkg/v3 v3.5.14 // indirect
157+
go.etcd.io/etcd/client/v2 v2.305.14 // indirect
158+
go.etcd.io/etcd/pkg/v3 v3.5.14 // indirect
159+
go.etcd.io/etcd/raft/v3 v3.5.14 // indirect
160+
go.opencensus.io v0.24.0 // indirect
161+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect
162+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect
163+
go.opentelemetry.io/otel v1.28.0 // indirect
164+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect
165+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 // indirect
166+
go.opentelemetry.io/otel/metric v1.28.0 // indirect
167+
go.opentelemetry.io/otel/sdk v1.28.0 // indirect
168+
go.opentelemetry.io/otel/trace v1.28.0 // indirect
169+
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
170+
golang.org/x/crypto v0.25.0 // indirect
171+
golang.org/x/exp v0.0.0-20240707233637-46b078467d37 // indirect
172+
golang.org/x/net v0.27.0 // indirect
173+
golang.org/x/oauth2 v0.21.0 // indirect
174+
golang.org/x/term v0.22.0 // indirect
77175
golang.org/x/text v0.16.0 // indirect
176+
golang.org/x/tools v0.23.0 // indirect
78177
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
79178
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 // indirect
80-
google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4 // indirect
81-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect
179+
google.golang.org/api v0.126.0 // indirect
180+
google.golang.org/appengine v1.6.8 // indirect
181+
google.golang.org/genproto v0.0.0-20240711142825-46eb208f015d // indirect
182+
google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d // indirect
183+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d // indirect
184+
gopkg.in/gcfg.v1 v1.2.3 // indirect
185+
gopkg.in/inf.v0 v0.9.1 // indirect
186+
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
187+
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
188+
gopkg.in/warnings.v0 v0.1.2 // indirect
189+
gopkg.in/yaml.v2 v2.4.0 // indirect
82190
gopkg.in/yaml.v3 v3.0.1 // indirect
191+
k8s.io/api v0.30.2 // indirect
192+
k8s.io/apiextensions-apiserver v0.30.2 // indirect
193+
k8s.io/cloud-provider v0.30.2 // indirect
194+
k8s.io/cluster-bootstrap v0.0.0 // indirect
195+
k8s.io/component-base v0.30.2 // indirect
196+
k8s.io/component-helpers v0.30.2 // indirect
197+
k8s.io/controller-manager v0.30.2 // indirect
198+
k8s.io/dynamic-resource-allocation v0.0.0 // indirect
199+
k8s.io/klog/v2 v2.130.1 // indirect
200+
k8s.io/kms v0.30.2 // indirect
201+
k8s.io/kube-aggregator v0.0.0 // indirect
202+
k8s.io/kube-openapi v0.0.0-20240709000822-3c01b740850f // indirect
203+
k8s.io/kubelet v0.30.2 // indirect
204+
k8s.io/legacy-cloud-providers v0.0.0 // indirect
205+
k8s.io/mount-utils v0.0.0 // indirect
206+
k8s.io/pod-security-admission v0.0.0 // indirect
207+
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
208+
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect
209+
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
210+
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
211+
sigs.k8s.io/yaml v1.4.0 // indirect
83212
)

0 commit comments

Comments
 (0)