Forked from fedebongio/gist:8cfcc15740d8d1ddd7a2bcca55b58b61
Created
March 16, 2022 20:04
-
-
Save msgongora/fad1426ca07c8ca70ebeccbceee98c93 to your computer and use it in GitHub Desktop.
Revisions
-
msgongora renamed this gist
Mar 16, 2022 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
fedebongio created this gist
Nov 16, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,161 @@ Copyright 2018 Google LLC. SPDX-License-Identifier: Apache-2.0 Authors: [email protected], [email protected] [email protected], [email protected] # Building Kubernetes from Source in Minutes In this repo you'll find instructions for building kubernetes (k8s) from source in minutes. You will start a GCP VM, install kubernetes (k8s) build and runtime dependencies, then build k8s from source. Afterward, we'll startup the local build and verify its working. ## Prerequisites You must have a Google Cloud Account and gcloud installed and setup locally. You can find instructions on installing gcloud and authenticating with google cloud [here](https://cloud.google.com/sdk/docs/quickstarts). ## Starting a GCP VM ``` $ gcloud compute instances create ${USER}-k8s-build \ --image-family centos-7 \ --image-project centos-cloud \ --machine-type n1-standard-2 \ --boot-disk-size=50GB \ --preemptible ``` * -machine-type: n1-standard-2 has 7.5GB RAM and takes about 22m to build k8s, while a n1-standard-8 takes about 11m to build * --boot-disk-size: default boot disk side (10GB) is insufficient for kubernetes build * --preemptible (optional) Full documentation on creating VMs can be found [here](https://cloud.google.com/compute/docs/instances/create-start-instance). ## Installing dependencies and cloning k8s repo ``` $ gcloud compute ssh ${USER}-k8s-build --command=" sudo yum -y update # install dependencies and docker sudo yum -y install yum-utils \ net-tools \ device-mapper-persistent-data \ lvm2 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo sudo yum -y install docker-ce sudo systemctl enable docker sudo systemctl start docker # add user, so sudo isn't required for docker commands sudo usermod -a -G docker ${USER} # install gcc to build kubernetes sudo yum -y install gcc # install git to clone kubernetes sudo yum -y install git # cleanup sudo yum -y clean all # install golang-11 curl -O https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.11.2.linux-amd64.tar.gz echo 'export PATH=\${PATH}:/usr/local/go/bin' >> ~/.bash_profile rm -f go1.11.2.linux-amd64.tar.gz # clone kubernetes GOPATH_K8S=\${HOME}/go/src/k8s.io/kubernetes mkdir -p \${GOPATH_K8S} git clone https://github.com/kubernetes/kubernetes \${GOPATH_K8S} # install etcd so that we can run build locally cd \${GOPATH_K8S} hack/install-etcd.sh echo 'export PATH=\${GOPATH_K8S}/third_party/etcd:\${PATH}' >> ~/.bash_profile " ``` ## Building k8s/ ## Note: this must be run as a separate `gcloud compute ssh` command as previous command, or logout and login again in order for usermod to take effects. ``` $ gcloud compute ssh ${USER}-k8s-build --command=" cd \${HOME}/go/src/k8s.io/kubernetes # build kubernetes time make quick-release " ``` #### Output snippet ``` <snip> +++ [0707 14:02:12] Docker builds done +++ [0707 14:03:32] Building tarball: final +++ [0707 14:03:32] Building tarball: test real 10m47.515s user 2m39.393s sys 0m19.103s ``` On a n1-standard-2 building k8s took 22m, and on a n1-standard-8 building k8s took 11m. ## Starting local build of k8s ``` $ gcloud compute ssh ${USER}-k8s-build --command=" GOPATH_K8S=\${HOME}/go/src/k8s.io/kubernetes export PATH=\${PATH}:/usr/local/go/bin export PATH=\${GOPATH_K8S}/third_party/etcd:\${PATH} cd ${GOPATH_K8S} # startup local build hack/local-up-cluster.sh " ``` #### Output snippet ``` <snip> Local Kubernetes cluster is running. Press Ctrl-C to shut it down. <snip> ``` ## Verifying local build To verify that the local build is operational, we'll execute a kubectl command against it. ``` $ gcloud compute ssh ${USER}-k8s-build --command=" export KUBERNETES_PROVIDER=local export KUBECONFIG=/var/run/kubernetes/admin.kubeconfig \${HOME}/go/src/k8s.io/kubernetes/cluster/kubectl.sh get nodes " ``` #### Output snippet ``` NAME STATUS ROLES AGE VERSION 127.0.0.1 Ready <none> 46s v1.12.0-alpha.0.1948+097f300a4d8dd8 ``` ## Cleaning up by deleting the compute instance ``` $ gcloud compute instances delete ${USER}-k8s-build ``` ## Optional: add a unit test in kubernetes source code and run it ## We recommend directly ssh to the VM and do the editing. cd ${HOME}/go/src/k8s.io/kubernetes emacs -nw pkg/util/normalizer/normalizer_test.go // Add your test for normalizer // Add test target in pkg/util/normalizer/BUILD # To run test make test WHAT=./pkg/util/normalizer