kubernetes

k8sをソースコードからビルドしてローカルで起動する

はじめに

前々回、kubeadmを使い、ローカルでk8sを起動する方法を紹介しました。今回はkubeadmを使わずにk8sのソースコードからビルドし、起動する方法を紹介します。k8sのソースコードをいじって自分用のk8s環境を作りたいという方にはぜひ参考にしてください。

環境

Ubutnu 18.02

手順

まず、dockerをインストールします。ちゃんと公式ドキュメントを見ましょう。たまに非公式なものをインストールするとエラーが出ます。

   sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   (lsb_release -cs) \
   stable"
   sudo apt update
   sudo apt-get install docker-ce docker-ce-cli containerd.io

次にetcdをインストールするのですが、これは一回飛ばします。k8sのソースコードにはetcdをインストールするためのシェルスクリプトが入っているので怒られたらそれを使います。
あとgo言語ですね。 バージョンを確認して入れましょう。 自分のk8sソースコードに対応したgoを入れてください。 参考までに自分のインストール方法を載せます。

  curl -O https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz
  tar -C /usr/local -xzf go1.13.1.linux-amd64.tar.gz
  export PATH=$PATH:/usr/local/go/bin

追記:
もし「exec: "gcc": executable file not found in $PATH」 といった表示が出たら、sudo apt install gccでgccをインストールしてください。
OpenSSLとCFSSLもインストールします。それぞれコマンドを打ってみて既にインストールされているようならば問題ありません。自分の環境ではOpenSSLは入っていたのでCFSSLだけインストールします。

  go get -u github.com/cloudflare/cfssl/cmd/...
  export PATH=$PATH:$GOPATH/bin

それではk8sソースコードをcloneします。cloneする際、オプション -b でバージョンを指定することをおすすめします。最新のバージョンはまだ発見されていないバグがあるかもしれません。(まあ安定版も同じかもしれませんが)

追記:
git cloneする場所は~/go/src/k8s.io/ をおすすめします。

mkdir ~/go/src/k8s.io/
cd ~/go/src/k8s.io/
git clone https://github.com/kubernetes/kubernetes.git -b v1.15.5

cloneしたらkubernetesに入り、kubernetesを起動するためのシェルスクリプトを実行します。

cd kubernetes
hack/local-up-cluster.sh

ここでエラーがでました。git issueを探してみるとこんなものがありました。どうやらgo言語のモジュール関連のエラーらしいですね。
/hack/lib/init.shにある「GO111MODULE = auto」を「GO111MODULE = off」に変えると起動できます。

参考文献

Redirecting…
kube-system tiller-deploy-f9b8476d-zkln4 always pending by failed scheduling · Issue #4181 · helm/helm
how to fix this? Output of helm version: Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710",...
community/running-locally.md at master · kubernetes/community
Kubernetes community content. Contribute to kubernetes/community development by creating an account on GitHub.
switch build scripts to use go modules, stop requiring $GOPATH · Issue #82531 · kubernetes/kubernetes
Tasks to move to go1.13: resolve #82506 / heketi/heketi#1648 (fixed upstream heketi/heketi#1649) fixed in k8s in #82805 update gofmt-formatted source to be comp...
そーたの技術ブログ

コメント

タイトルとURLをコピーしました