LoginSignup
4
5

More than 3 years have passed since last update.

CentOS8でkind (Kubernetes in Docker) をinstallする

Last updated at Posted at 2019-10-16

はじめに

今回は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コマンドを実行するだけだと ターミナルを閉じた時に初期化される ため今回は~/.bashrcexport文を書き永続的に環境変数を設定する。

[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_ENABLED0 になっていないとこの現象が起きるみたいです。

[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つを選択できる状態になると思っていたのですが・・・。
勉強不足が故、どなたか分かる方ご教示願います・・・。
深く理解するためには公式ドキュメント熟読するしかないか・・・。

参考

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5