はじめに
今回はkindをinstallしようとしたが前段階のgoのinstallで手こずったのでそこから共有します。ならタイトル変えろ
kind (Kubernetes in Docker) とは
一言でいえば、LocalでKubernetesクラスタを構築する手段の一つ。
LocalなKubernetesにはいろいろ選択肢がある。
- Docker for Mac
- Minikube
- microk8s
その中でkindというツールを今回は導入してみようと思う。
kindの特徴は以下の通りだ。
- 他のツールと違い マルチノードクラスタ の作成機能がある。
- Kubernetesの公式プロジェクトかつ、Kubernetesそのもののテストにも用いられている。
詳しくは調べてほしいが初めての人はこれを知っておくだけで十分であろう。
では早速導入してみる。
前提条件
docker, kubectl が既にinstall済
[root@hogehoge test]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
[root@hogehoge test]# docker --version
Docker version 18.06.3-ce, build d7080c1
[root@hogehoge test]# kubectl version --short
Client Version: v1.15.0
Server Version: v1.15.4
CentOS8にDockerをinstallする方法は前回の記事を参照してください。
CentOS8でDockerCEをinstallする
では早速kindをinstall・・・?
Quick Start を読むとどうやらkindをinstallするにはGoの最新版がinstallされていないといけないらしい。てことでいつものyum
改めdnf
コマンドで。
[root@hogehoge test]# dnf install golang
メタデータの期限切れの最終確認: 2:16:42 時間前の 2019年10月16日 12時18分36秒 に実施しました。
依存関係が解決しました。
=============================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリ サイズ
=============================================================================================================================================================
Installing:
golang x86_64 1.11.6-1.module_el8.0.0+192+8b12aa21 AppStream 637 k
依存関係をインストール中:
(中略)
トランザクションの概要
=============================================================================================================================================================
インストール 22 パッケージ
ダウンロードサイズの合計: 159 M
インストール済みのサイズ: 522 M
これでよろしいですか? [y/N]:
バージョン1.11・・・
全然最新版じゃない!!
golangの最新版をinstall
go1.13 が2019/10/16時点で最新なのでここから入手。
[root@hogehoge ~]# cd /usr/local
[root@hogehoge local]# wget https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz
--2019-10-16 14:43:07-- https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz
dl.google.com (dl.google.com) をDNSに問いあわせています... 216.58.197.238, 2404:6800:4004:80f::200e
dl.google.com (dl.google.com)|216.58.197.238|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 120040373 (114M) [application/octet-stream]
`go1.13.1.linux-amd64.tar.gz' に保存中
go1.13.1.linux-amd6 100%[===================>] 114.48M 95.0MB/s 時間 1.2s
2019-10-16 14:43:09 (95.0 MB/s) - `go1.13.1.linux-amd64.tar.gz' へ保存完了 [120040373/120040373]
[root@hogehoge local]# tar -zxvf go1.13.1.linux-amd64.tar.gz
(中略)
[root@hogehoge local]# ls
bin etc games go go1.13.1.linux-amd64.tar.gz include lib lib64 libexec sbin share src
goというディレクトリがとりあえず出来た。go1.13.1.linux-amd64.tar.gz自体はもう削除しても大丈夫そう。
PATHを通す
go
コマンドを使えるようにする。ただexport
コマンドを実行するだけだと ターミナルを閉じた時に初期化される ため今回は~/.bashrc
にexport
文を書き永続的に環境変数を設定する。
[root@hogehoge go]# vi ~/.bashrc
下3行を新たに追加して上書き保存。
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:/usr/local/go/bin
後はbashrcを適用するだけ。
[root@hogehoge go]# source ~/.bashrc
[root@hogehoge go]# go version
go version go1.13.1 linux/amd64
無事go
コマンドが使えるようになりました。
kindをinstall
kind v0.5.1 が2019/10/16時点で最新なのでv0.5.1を指定してinstallする。
[root@hogehoge go]# GO111MODULE="on" go get sigs.k8s.io/kind@v0.5.1
(中略)
# sigs.k8s.io/kind
/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exec: "gcc": executable file not found in $PATH
install出来ない。何故だ・・・。
原因
詳しいことは分からないが(分かる人もしいたら教えて頂けると嬉しいです)goの環境変数である CGO_ENABLED が 0 になっていないとこの現象が起きるみたいです。
[root@hogehoge go]# go env | grep CGO_ENABLED
CGO_ENABLED="1"
対処
こちらもexport
コマンドで1を0にすればいいのですが、折角なので先ほどと同じように永続的な設定をしてみます。
[root@hogehoge go]# vi ~/.bashrc
下1行を新たに追加して上書き保存。
# .bashrc
(中略)
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:/usr/local/go/bin
export CGO_ENABLED=0
[root@hogehoge go]# source ~/.bashrc
[root@hogehoge go]# go env | grep CGO_ENABLED
CGO_ENABLED="0"
では改めて
[root@hogehoge go]# GO111MODULE="on" go get sigs.k8s.io/kind@v0.5.1
go: finding sigs.k8s.io v0.5.1
go: finding sigs.k8s.io/kind v0.5.1
go: downloading sigs.k8s.io/kind v0.5.1
(中略)
[root@hogehoge go]# kind version
v0.5.1
[root@hogehoge go]# type kind
kind はハッシュされています (/root/go/bin/kind)
無事installが出来たみたいですね。
これでいつでもkindでクラスタ作成出来るようになりました。
終わりに
実は事前にkubeadm経由でクラスタ(といってもmastar1台のみなのでクラスタとは呼べない?)を作っていたのですが、kindで新たに作成すると元々作っていたクラスタが行方不明?になる現象が起きています・・・。
[root@hogehoge go]# kind get clusters
[root@hogehoge go]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
hogehoge Ready master 19d v1.15.0
[root@hogehoge go]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
[root@hogehoge go]# kind create cluster
Creating cluster "kind" ...
? Ensuring node image (kindest/node:v1.15.3) ?
? Preparing nodes ?
? Creating kubeadm config ?
? Starting control-plane ??
? Installing CNI ?
? Installing StorageClass ?
Cluster creation complete. You can now use the cluster with:
export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
kubectl cluster-info
[root@hogehoge go]# export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
[root@hogehoge go]# kubectl cluster-info
Kubernetes master is running at https://127.0.0.1:46279
KubeDNS is running at https://127.0.0.1:46279/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@hogehoge go]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready master 48s v1.15.3
[root@hogehoge go]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kind kind kubernetes-admin
kind自体は問題なく作れていそうですが、私の想定としては
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kind kind kubernetes-admin
kubernetes-admin@kubernetes kubernetes kubernetes-admin
と表示されいつでも2つを選択できる状態になると思っていたのですが・・・。
勉強不足が故、どなたか分かる方ご教示願います・・・。
深く理解するためには公式ドキュメント熟読するしかないか・・・。