Tried building it locally, doesn't seem to work. Then when I do a string replace to replace all k8s.io/kubernetes with github.com/ibuildthecloud/k3s imports, and then finally fails with no errors..
What am I missing?
root@7c02726b2cf2:/go/src/github.com/ibuildthecloud/k3s# go build -o k3s github.com/ibuildthecloud/k3s
main.go:9:2: cannot find package "k8s.io/kubernetes/cmd/agent" in any of:
/go/src/github.com/ibuildthecloud/k3s/vendor/k8s.io/kubernetes/cmd/agent (vendor tree)
/usr/local/go/src/k8s.io/kubernetes/cmd/agent (from $GOROOT)
/go/src/k8s.io/kubernetes/cmd/agent (from $GOPATH)
main.go:10:2: cannot find package "k8s.io/kubernetes/cmd/server" in any of:
/go/src/github.com/ibuildthecloud/k3s/vendor/k8s.io/kubernetes/cmd/server (vendor tree)
/usr/local/go/src/k8s.io/kubernetes/cmd/server (from $GOROOT)
/go/src/k8s.io/kubernetes/cmd/server (from $GOPATH)
root@7c02726b2cf2:/go/src/github.com/ibuildthecloud/k3s# sed -i 's@"k8s.io/kubernetes/@"github.com/ibuildthecloud/k3s/@' main.go
root@7c02726b2cf2:/go/src/github.com/ibuildthecloud/k3s# go build -o k3s github.com/ibuildthecloud/k3s
cmd/server/server.go:32:2: cannot find package "k8s.io/kubernetes/pkg/apis/componentconfig" in any of:
/go/src/github.com/ibuildthecloud/k3s/vendor/k8s.io/kubernetes/pkg/apis/componentconfig (vendor tree)
/usr/local/go/src/k8s.io/kubernetes/pkg/apis/componentconfig (from $GOROOT)
/go/src/k8s.io/kubernetes/pkg/apis/componentconfig (from $GOPATH)
/go/src/k8s.io/kubernetes/vendor/github.com/google/cadvisor/accelerators/nvidia.go:30:2: build constraints exclude all Go files in /go/src/k8s.io/kubernetes/vendor/github.com/mindprince/gonvml
root@7c02726b2cf2:/go/src/github.com/ibuildthecloud/k3s# find . -type f -name "*.go" | xargs sed -i 's@"k8s.io/kubernetes/@"github.com/ibuildthecloud/k3s/@'
root@7c02726b2cf2:/go/src/github.com/ibuildthecloud/k3s# go build -o k3s github.com/ibuildthecloud/k3s
vendor/github.com/google/cadvisor/container/containerd/factory.go:28:2: build constraints exclude all Go files in /go/src/github.com/ibuildthecloud/k3s/vendor/github.com/google/cadvisor/container/libcontainer
vendor/github.com/google/cadvisor/accelerators/nvidia.go:30:2: build constraints exclude all Go files in /go/src/github.com/ibuildthecloud/k3s/vendor/github.com/mindprince/gonvml
root@7c02726b2cf2:/go/src/github.com/ibuildthecloud/k3s# echo $?
1
My local host configuration, for reference:
git clone k3s repo to kubernetes folder
âš¡ root@k8s î‚° /paasdata/gopath/src/k8s.io/kubernetes î‚° pwd
/paasdata/gopath/src/k8s.io/kubernetes
âš¡ root@k8s î‚° /paasdata/gopath/src/k8s.io/kubernetes î‚° go version
go version go1.10.3 linux/amd64
âš¡ root@k8s î‚° /paasdata/gopath/src/k8s.io/kubernetes î‚° go env
GOARCH="amd64"
GOBIN="/usr/local/go/bin"
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/paasdata/gopath"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build915405053=/tmp/go-build -gno-record-gcc-switches"
âš¡ root@k8s î‚° /paasdata/gopath/src/k8s.io/kubernetes î‚°
Ah, so I think I figured it out, I was trying to compile it for arm. The following did the trick:
root@c827fae677e6:/go# apt-get install -y gccgo-arm-linux-gnueabi gccgo-arm-linux-gnueabihf
root@c827fae677e6:/go# GOOS="linux" GOARCH="arm" CC=arm-linux-gnueabi-gcc go build k8s.io/kubernetes
root@c827fae677e6:/go# file kubernetes
kubernetes: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=50d1fa29ceb9bcb575ebf91699905ff2b266f01b, not stripped
I will test to see if it works tonight
Sorry, this is a fork of github.com/kubernetes/kubernetes which uses the go package k8s.io so you have to clone this repo to k8s.io/kubernetes in your GOPATH. I'll update the README to make that more clear.
Yeah! Got that working. I'm just testing it on my pi now, but I'm getting a nil pointer derefence error:
```
# ./k3s
I0928 23:02:23.845563 4013 server.go:516] external host was not specified, using 192.168.100.207
I0928 23:02:30.652278 4013 plugins.go:149] Loaded 3 admission controller(s) successfully in the following order: NamespaceLifecycle,ServiceAccount,DefaultStorageClass.
I0928 23:02:30.654000 4013 plugins.go:149] Loaded 3 admission controller(s) successfully in the following order: NamespaceLifecycle,ServiceAccount,DefaultStorageClass.
E0928 23:02:30.674719 4013 runtime.go:66] Observed a panic: "invalid memory address or nil pointer dereference" (runtime error: invalid memory address or nil pointer dereference)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:72
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:65
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:51
/usr/local/go/src/runtime/asm_arm.s:519
/usr/local/go/src/runtime/panic.go:513
/usr/local/go/src/runtime/panic.go:82
/usr/local/go/src/runtime/signal_unix.go:390
/usr/local/go/src/runtime/internal/atomic/atomic_arm.go:124
/go/src/k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3/driver/generic.go:157
/go/src/k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3/kv.go:135
/go/src/k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3/kv.go:118
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go:569
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:723
/go/src/k8s.io/kubernetes/vendor/k8s.io/client-go/tools/cache/reflector.go:249
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:270
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:239
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:236
/usr/local/go/src/runtime/asm_arm.s:867
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1c670]
goroutine 74 [running]:
k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:58 +0xec
panic(0x18e9ab0, 0x31b71b8)
/usr/local/go/src/runtime/panic.go:513 +0x194
runtime/internal/atomic.goLoad64(0x4f05354, 0x1b209f0, 0x1)
/usr/local/go/src/runtime/internal/atomic/atomic_arm.go:124 +0x1c
k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3/driver.(Generic).List(0x4f05300, 0x1f1c710, 0x4c460bc, 0x0, 0x0, 0xf4240, 0x0, 0x4fd6540, 0x3a, 0x0, ...)
/go/src/k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3/driver/generic.go:157 +0x78c
k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3.(kv).opGet(0x5710040, 0x1f1c710, 0x4c460bc, 0x1, 0x4fd6540, 0x3a, 0x0, 0x0, 0x0, 0x0, ...)
/go/src/k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3/kv.go:135 +0x88
k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3.(kv).Get(0x5710040, 0x1f1c710, 0x4c460bc, 0x4fd64c0, 0x39, 0x57a6020, 0x1, 0x4, 0x0, 0x0, ...)
/go/src/k8s.io/kubernetes/vendor/github.com/coreos/etcd/clientv3/kv.go:118 +0x74
k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/etcd3.(store).List(0x4f83600, 0x1f1c710, 0x4c460bc, 0x51f7e30, 0x2f, 0x0, 0x0, 0x1f22848, 0x4e82010, 0x1f25af8, ...)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/etcd3/store.go:569 +0x684
k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage.(cacherListerWatcher).List(0x5710120, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:723 +0x9c
k8s.io/kubernetes/vendor/k8s.io/client-go/tools/cache.(Reflector).ListAndWatch(0x503d4a0, 0x4ff2d80, 0x0, 0x0)
/go/src/k8s.io/kubernetes/vendor/k8s.io/client-go/tools/cache/reflector.go:249 +0x14c
k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage.(*Cacher).startCaching(0x4d93290, 0x4ff2d80)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:270 +0xbc
k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage.NewCacherFromConfig.func1.1()
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:239 +0x4c
k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1(0x5020fd8)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133 +0x4c
k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil(0x4c6bfd8, 0x3b9aca00, 0x0, 0x0, 0x0, 0x1, 0x4ff2d80)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134 +0xa8
k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.Until(0x5020fd8, 0x3b9aca00, 0x0, 0x4ff2d80)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x48
k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage.NewCacherFromConfig.func1(0x4d93290, 0x4ff2d80)
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:236 +0x8c
created by k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage.NewCacherFromConfig
/go/src/k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/cacher.go:234 +0x430
``
Actually, I think I should ask, does this run with docker in stead of runc/containerd? As I'm trying to run it on arm
@hoshsadiq
It look like only support containerd, the Dockershim has been removed :smiley:
https://github.com/ibuildthecloud/k3s#run
@hoshsadiq Docker support was removed, only containerd. Docker is a huge source of pain for me in general for my production k8s clusters. So far I have been very happy with containerd. The biggest issue is the compatibility with third part tools.
How do you readd support for Docker?
I'm guessing you'll have to manually go in and undo everything that is docker related that he removed. This means going through his commits and finding these. probably harder to do that simply setting up containerd, which is compatible with docker anyway
@hoshsadiq the atomic.goLoad64 is related with armhf arch. I have same issue and after I switch to a arm64 board(Pine64), k3s can run without error.
I fixed the armhf issue on master. atomic.LoadInt methods on arm 32 bit require that the variable be memory aligned.
Most helpful comment
Sorry, this is a fork of
github.com/kubernetes/kuberneteswhich uses the go packagek8s.ioso you have to clone this repo tok8s.io/kubernetesin your GOPATH. I'll update the README to make that more clear.