mirror of
https://github.com/kubesphere/website.git
synced 2025-12-29 15:42:49 +00:00
112 lines
5.0 KiB
Markdown
112 lines
5.0 KiB
Markdown
# How to build KubeSphere
|
||
|
||
This document walks you through how to get started with building KubeSphere in your local environment.
|
||
|
||
## Preparing the environment
|
||
|
||
### Go
|
||
|
||
KubeSphere development is based on [Kubernetes](https://github.com/kubernetes/kubernetes). Both of them are written in [Go](http://golang.org/). If you don't have a Go development environment, please [set it up](http://golang.org/doc/code.html) first.
|
||
|
||
| Kubernetes | requires Go |
|
||
|----------------|-------------|
|
||
| 1.13+ | >= 1.12 |
|
||
|
||
> Tips:
|
||
>
|
||
> - Ensure your GOPATH and PATH have been configured in accordance with the Go
|
||
environment instructions.
|
||
> - It's recommended to install [macOS GNU tools](https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x) when using MacOS for development.
|
||
|
||
### Docker
|
||
|
||
KubeSphere components are often deployed as containers in Kubernetes. If you need to rebuild the KubeSphere components in the Kubernetes cluster, you'll need to [install Docker](https://docs.docker.com/install/) in advance.
|
||
|
||
### Dependency Management
|
||
|
||
KubeSphere uses [Go Modules](https://github.com/golang/go/wiki/Modules) to manage dependencies in the `vendor/` tree.
|
||
|
||
> Note: KubeSphere uses `go module` to manage dependencies, but the development process still relies on `GOPATH`
|
||
> In the CRD development process, you need to use tools to automatically generate code. The tools used by KubeSphere still need to rely on `GOPATH`.
|
||
> For Chinese contributors who are going to pull the go module, we recommend you to use [goproxy.cn](https://goproxy.cn) as the proxy.
|
||
|
||
## Building KubeSphere Core on a Local OS/shell Environment
|
||
|
||
### For Quick Taste Binary
|
||
|
||
When you go get KubeSphere, you can choose the version you want to get: `go get kubesphere.io/kubesphere@version-you-want`
|
||
|
||
For modules stored in source control repositories, the version suffix can also be a commit hash, branch identifier, or other syntax known to the source control system, as in 'go get golang.org/x/text@master'. The version suffix @latest explicitly requests the default behavior described above.
|
||
|
||
> Note: Before getting KubeSphere, you need to synchronize the contents of the `replace` section of the go.mod file of the KubeSphere you want to version.
|
||
|
||
```bash
|
||
mkdir ks-tmp
|
||
cd ks-tmp
|
||
echo 'module kubesphere' > go.mod
|
||
echo 'replace (
|
||
github.com/Sirupsen/logrus v1.4.1 => github.com/sirupsen/logrus v1.4.1
|
||
github.com/kiali/kiali => github.com/kubesphere/kiali v0.15.1-0.20190407071308-6b5b818211c3
|
||
github.com/kubernetes-sigs/application => github.com/kubesphere/application v0.0.0-20190518133311-b9d9eb0b5cf7
|
||
)' >> go.mod
|
||
|
||
GO111MODULE=on go get kubesphere.io/kubesphere@d649e3d0bbc64bfba18816c904819e4850d021e0
|
||
GO111MODULE=on go build -o ks-apiserver kubesphere.io/kubesphere/cmd/ks-apiserver # build ks-apiserver
|
||
GO111MODULE=on go build -o ks-apigateway kubesphere.io/kubesphere/cmd/ks-apigateway # build ks-apigateway
|
||
GO111MODULE=on go build -o ks-controller-manager kubesphere.io/kubesphere/cmd/controller-manager # build ks-controller-manager
|
||
GO111MODULE=on go build -o ks-iam kubesphere.io/kubesphere/cmd/ks-iam # build ks-iam
|
||
```
|
||
|
||
### For Building KubeSphere Core Images
|
||
|
||
KubeSphere components are often deployed as a container in a Kubernetes cluster, you may need to build a Docker image locally.
|
||
|
||
1. Clone repo to local.
|
||
|
||
```bash
|
||
git clone https://github.com/kubesphere/kubesphere.git
|
||
cd kubesphere
|
||
```
|
||
|
||
2. Run Docker command to build image.
|
||
|
||
```bash
|
||
# $REPO is the docker registry to push to
|
||
# $Tag is the tag name of the docker image
|
||
# The full go build process will be executed in the Dockerfile, so you may need to set GOPROXY in it.
|
||
docker build -f build/ks-apigateway/Dockerfile -t $REPO/ks-apigateway:$TAG .
|
||
docker build -f build/ks-apiserver/Dockerfile -t $REPO/ks-apiserver:$TAG .
|
||
docker build -f build/ks-iam/Dockerfile -t $REPO/ks-account:$TAG .
|
||
docker build -f build/ks-controller-manager/Dockerfile -t $REPO/ks-controller-manager:$TAG .
|
||
docker build -f ./pkg/db/Dockerfile -t $REPO/ks-devops:flyway-$TAG ./pkg/db/
|
||
```
|
||
|
||
### For KubeSphere Core Local Development Building
|
||
|
||
1. Create a `kubesphere` work directory under `GOPATH` and clone the source code.
|
||
|
||
```bash
|
||
mkdir -p $GOPATH/src/kubesphere.io/
|
||
cd $GOPATH/src/kubesphere.io/
|
||
git clone https://github.com/kubesphere/kubesphere
|
||
```
|
||
|
||
2. Use command `make` to build binary
|
||
|
||
```bash
|
||
make ks-apiserver # Build ks-apiserver binary
|
||
make ks-iam # Build ks-iam binary
|
||
make controller-manager # Build ks-controller-manager binary
|
||
make ks-apigateway # Build ks-apigateway binary
|
||
```
|
||
|
||
If you need to build a docker image, you can refer to the previous section.
|
||
|
||
### Test
|
||
|
||
It‘s recommended to use local Kubernetes clusters, such as [minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/), or to install an single-node [all-in-one](https://github.com/kubesphere/kubesphere#all-in-one) environment (Kubernetes-based) for quick testing.
|
||
|
||
> Tip: It also supports to use Docker for Desktop ships with Kubernetes as the test environment.
|
||
|
||
See [How to run KubeSphere apiserver](how-to-run-kubesphere-core.md)
|