土狗屋

土狗屋

単核小鶏上のMinikube実践(一)

ゼロ、前書き#

今回の実験に使用するサーバーの状態について簡単に説明します:

サーバーは、国内のあるメーカーの 1 ヶ月の試用版を無料で利用しており、申請後ずっと使う機会がありませんでした。今日は暇なので、以前自分が Hackintosh で何度も失敗した minikube のインストールを試してみることにしました...

サーバーの構成は以下の通りです:

# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:30:48]
$ uname -a
Linux VM-253eb12c-e466-4202-b8eb-7892ae3ed8db 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux

# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:31:06]
$ head -n 1 /etc/issue
Debian GNU/Linux 9 \n \l

# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:31:10]
$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 79
model name	: Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz
stepping	: 1
microcode	: 0xb00002a
cpu MHz		: 2098.882
cache size	: 40960 KB
physical id	: 0
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt arat
bugs		:
bogomips	: 4199.99
clflush size	: 64
cache_alignment	: 64
address sizes	: 43 bits physical, 48 bits virtual
power management:

# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:31:14]
$ free -m
              total        used        free      shared  buff/cache   available
Mem:            978         763          58           0         156          80
Swap:          4095         383        3712

次に minikube のインストールを開始します
docker 関連のインストールは皆さんもよく知っていると思うので、今回は書きません

一、Minikube のインストール#

1. kubectl のインストール#

# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools [17:50:52] C:130
$ wget "https://storage.googleapis.com/kubernetes-release/release/v1.18.1/bin/linux/amd64/kubectl" -O "/usr/local/bin/kubectl"
--2020-04-13 17:50:57--  https://storage.googleapis.com/kubernetes-release/release/v1.18.1/bin/linux/amd64/kubectl
Resolving storage.googleapis.com (storage.googleapis.com)... 34.64.4.112, 2404:6800:4008:801::2010
Connecting to storage.googleapis.com (storage.googleapis.com)|34.64.4.112|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 44027904 (42M) [application/octet-stream]
Saving to: ‘/usr/local/bin/kubectl’

/usr/local/bin/kubectl              100%[==================================================================>]  41.99M  2.38MB/s    in 31s

2020-04-13 17:51:29 (1.37 MB/s) - ‘/usr/local/bin/kubectl’ saved [44027904/44027904]

この部分では、debian 系の Linux ディストリビューションを使用している場合、次のようにして kubectl をインストールすることもできます。

$ sudo snap install kubectl --classic

2. minikube のダウンロード#


# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools [17:54:11] C:1
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
>   && chmod +x minikube
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:13 --:--:--     0^C

  • 理論的には、私のように minikube のバイナリファイルを取得する過程で高い壁に阻まれる人が多いでしょう(国内サーバー)

  • この時、私が選んだ方法は、自分のコンピュータでダウンロードしてからサーバーに転送することです。

# バイナリファイルの名前を変更
mv minikube-linux-amd64 minikube
# 実行権限を付与
chmod +x minikube
# minikubeをpathに移動
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/

二、minikube の起動#

  • 次に、私が今日のインストール中に遭遇した問題を一つ一つ記録し、この文章を読んでいる皆さんの参考にしたいと思います:

2.1 直接起動#


# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:03:52]
$ minikube start
* minikube v1.9.2 on Debian 9.12
* 自動的にdockerドライバーが選択されました
* "docker"ドライバーはroot権限で使用すべきではありません。
* VM内でminikubeを実行している場合は、--driver=noneを使用することを検討してください:
*   https://minikube.sigs.k8s.io/docs/reference/drivers/none/

デフォルトの Hypervisor 環境では root 権限で minikube を実行できないことがわかります。以下は公式の Hypervisor のチュートリアルからの引用です。

Hypervisor のインストール#

まだ hypervisor をインストールしていない場合は、以下のいずれかの方法でインストールしてください:

・KVM、QEMU も使用しています

• VirtualBox

Minikube は、Kubernetes コンポーネントを VM 内ではなくホスト内で実行するために、--vm-driver=none オプションを使用することもサポートしています。このドライバー方式を使用するには、Docker と Linux 環境が必要ですが、hypervisor は必要ありません。

Debian 系の OS で none ドライバー方式を使用する場合は、Docker を.deb パッケージでインストールしてください。snap パッケージの方法は使用しないでください。Minikube はこの方法をサポートしていません。Docker の.deb パッケージをダウンロードできます。

警告:

none VMドライバー方式には、セキュリティとデータ損失の問題がある可能性があります。--vm-driver=noneを使用する前に、この文書を参照して詳細情報を取得してください。

Minikube は、Docker ドライバーに似た vm-driver=podman という別の方法もサポートしています。root ユーザーとして Podman を実行することで、コンテナがオペレーティングシステム上のすべての機能を使用するために十分な権限を持つことが最も確実です。

警告:

Podmanドライバー方式は、コンテナをrootユーザーとして実行する必要があります。通常のユーザーアカウントでは、コンテナを実行するために必要なオペレーティングシステム上のすべての機能を使用するための十分な権限がありません。

最後に、私は直接 --vm-driver=none を使用して minikube を起動することにしました(実際には Hypervisor をインストールするのが面倒だったので......)

2.2 start --driver=none#


# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:06:22] C:69
$ minikube start --driver=none
* minikube v1.9.2 on Debian 9.12
* ユーザー設定に基づいてnoneドライバーを使用しています
X 申し訳ありませんが、Kubernetes v1.18.0にはrootのパスにconntrackがインストールされている必要があります

指示に従って conntrack をインストールします。

# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:06:38] C:78
$ apt install conntrack
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  conntrack
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 32.9 kB of archives.
After this operation, 104 kB of additional disk space will be used.
Get:1 http://mirrors.163.com/debian stretch/main amd64 conntrack amd64 1:1.4.4+snapshot20161117-5 [32.9 kB]
Fetched 32.9 kB in 0s (723 kB/s)
Selecting previously unselected package conntrack.
(Reading database ... 72364 files and directories currently installed.)
Preparing to unpack .../conntrack_1%3a1.4.4+snapshot20161117-5_amd64.deb ...
Unpacking conntrack (1:1.4.4+snapshot20161117-5) ...
Setting up conntrack (1:1.4.4+snapshot20161117-5) ...

# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:08:16]
$ minikube start --driver=none
* minikube v1.9.2 on Debian 9.12
* ユーザー設定に基づいてnoneドライバーを使用しています
* クラスタminikube内のコントロールプレーンノードを起動しています
* localhostで実行中(CPUs=1、Memory=978MB、Disk=35784MB)...
* OSリリースはDebian GNU/Linux 9(stretch)です
* Docker 19.03.8上でKubernetes v1.18.0を準備中...
! このベアメタルマシンはhttps://k8s.gcr.ioにアクセスするのに問題があります
* 新しい外部イメージをプルするには、プロキシを設定する必要があるかもしれません: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
    > kubectl.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
    > kubelet.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
    > kubeadm.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
    > kubeadm: 37.96 MiB / 37.96 MiB [---------------] 100.00% 1.39 MiB p/s 28s
    > kubectl: 41.98 MiB / 41.98 MiB [---------------] 100.00% 1.09 MiB p/s 39s
    > kubelet: 108.01 MiB / 108.01 MiB [-------------] 100.00% 1.95 MiB p/s 56s
! 初期化に失敗しました。再試行します: run: /bin/bash -c "sudo env PATH=/var/lib/minikube/binaries/v1.18.0:$PATH kubeadm init --config /var/tmp/minikube/kubeadm.yaml  --ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests,DirAvailable--var-lib-minikube,DirAvailable--var-lib-minikube-etcd,FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml,FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml,FileAvailable--etc-kubernetes-manifests-etcd.yaml,Port-10250,Swap,SystemVerification": exit status 1
stdout:
[init] Kubernetesバージョンを使用しています: v1.18.0
[preflight] プレフライトチェックを実行中

stderr:
W0413 18:09:22.694854  112079 configset.go:202] WARNING: kubeadmはAPIグループ[kubelet.config.k8s.io kubeproxy.config.k8s.io]のコンポーネント設定を検証できません
	[WARNING IsDockerSystemdCheck]: Docker cgroupドライバーとして"cgroupfs"が検出されました。推奨されるドライバーは"systemd"です。 https://kubernetes.io/docs/setup/cri/を参照してください。
	[WARNING Swap]: スワップを有効にした状態での実行はサポートされていません。スワップを無効にしてください。
	[WARNING FileExisting-ebtables]: ebtablesがシステムパスに見つかりません
	[WARNING FileExisting-ethtool]: ethtoolがシステムパスに見つかりません
	[WARNING FileExisting-socat]: socatがシステムパスに見つかりません
	[WARNING Service-Kubelet]: kubeletサービスが有効になっていません。'systemctl enable kubelet.service'を実行してください。
エラー実行フェーズプレフライト: [preflight] 致命的なエラーがいくつか発生しました:
	[ERROR NumCPU]: 利用可能なCPUの数1は必要な2未満です
[preflight] 何をしているか分かっている場合は、チェックを非致命的にすることができます`--ignore-preflight-errors=...`
このエラーのスタックトレースを表示するには、--v=5以上で実行してください

*
X クラスターの起動エラー: run: /bin/bash -c "sudo env PATH=/var/lib/minikube/binaries/v1.18.0:$PATH kubeadm init --config /var/tmp/minikube/kubeadm.yaml  --ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests,DirAvailable--var-lib-minikube,DirAvailable--var-lib-minikube-etcd,FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml,FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml,FileAvailable--etc-kubernetes-manifests-etcd.yaml,Port-10250,Swap,SystemVerification": exit status 1
stdout:
[init] Kubernetesバージョンを使用しています: v1.18.0
[preflight] プレフライトチェックを実行中

stderr:
W0413 18:09:24.195084  112217 configset.go:202] WARNING: kubeadmはAPIグループ[kubelet.config.k8s.io kubeproxy.config.k8s.io]のコンポーネント設定を検証できません
	[WARNING IsDockerSystemdCheck]: Docker cgroupドライバーとして"cgroupfs"が検出されました。推奨されるドライバーは"systemd"です。 https://kubernetes.io/docs/setup/cri/を参照してください。
	[WARNING Swap]: スワップを有効にした状態での実行はサポートされていません。スワップを無効にしてください。
	[WARNING FileExisting-ebtables]: ebtablesがシステムパスに見つかりません
	[WARNING FileExisting-ethtool]: ethtoolがシステムパスに見つかりません
	[WARNING FileExisting-socat]: socatがシステムパスに見つかりません
	[WARNING Service-Kubelet]: kubeletサービスが有効になっていません。'systemctl enable kubelet.service'を実行してください。
エラー実行フェーズプレフライト: [preflight] 致命的なエラーがいくつか発生しました:
	[ERROR NumCPU]: 利用可能なCPUの数1は必要な2未満です
[preflight] 何をしているか分かっている場合は、チェックを非致命的にすることができます`--ignore-preflight-errors=...`
このエラーのスタックトレースを表示するには、--v=5以上で実行してください

*
* minikubeはエラーのため終了しています。上記のメッセージが役に立たない場合は、問題を開いてください:
  - https://github.com/kubernetes/minikube/issues/new/choose

エラーメッセージによると、minikube を起動するには 2 つの CPU が必要です。どうしようもない貧乏人ですが、幸いにも公式は 1 つの CPU で強制的に起動することをサポートしています。


# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:09:25] C:70
$ minikube start --driver=none --extra-config=kubeadm.ignore-preflight-errors=NumCPU --force --cpus 1
* minikube v1.9.2 on Debian 9.12
* 既存のプロファイルに基づいてnoneドライバーを使用しています
! 'none'ドライバーは--cpusフラグを尊重しません
* クラスタminikube内のコントロールプレーンノードを起動しています
* "minikube"の既存のnoneベアメタルマシンを再起動しています...
* OSリリースはDebian GNU/Linux 9(stretch)です
* Docker 19.03.8上でKubernetes v1.18.0を準備中...
  - kubeadm.ignore-preflight-errors=NumCPU
! このベアメタルマシンはhttps://k8s.gcr.ioにアクセスするのに問題があります
* 新しい外部イメージをプルするには、プロキシを設定する必要があるかもしれません: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/

ああ、また古典的なネットワークの問題が発生しました。プロキシを設定します。


# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:13:20] C:130
$ minikube start --driver=none --extra-config=kubeadm.ignore-preflight-errors=NumCPU --force --cpus 1 --image-repository=registry.cn-hangzhou.a
liyuncs.com/google_containers
* minikube v1.9.2 on Debian 9.12
* 既存のプロファイルに基づいてnoneドライバーを使用しています
! 'none'ドライバーは--cpusフラグを尊重しません
* イメージリポジトリregistry.cn-hangzhou.aliyuncs.com/google_containersを使用しています
* クラスタminikube内のコントロールプレーンノードを起動しています
* 実行中のnone "minikube"ベアメタルマシンを更新しています...
* OSリリースはDebian GNU/Linux 9(stretch)です
* Docker 19.03.8上でKubernetes v1.18.0を準備中...
  - kubeadm.ignore-preflight-errors=NumCPU
* アドオンを有効にしています: default-storageclass, storage-provisioner
* ローカルホスト環境を構成中...
*
! 'none'ドライバーは、既存のVMと統合する必要がある専門家向けに設計されています
* ほとんどのユーザーは、rootを必要としない新しい'docker'ドライバーを使用するべきです!
* 詳細については、次を参照してください: https://minikube.sigs.k8s.io/docs/reference/drivers/none/
*
! kubectlとminikubeの設定は/rootに保存されます
! 自分のユーザーとしてkubectlまたはminikubeコマンドを使用するには、それらを移動する必要があるかもしれません。たとえば、自分の設定を上書きするには、次のように実行します:
*
  - sudo mv /root/.kube /root/.minikube $HOME
  - sudo chown -R $USER $HOME/.kube $HOME/.minikube
*
* これは、環境変数CHANGE_MINIKUBE_NONE_USER=trueを設定することによって自動的に行うこともできます
* 完了しました!kubectlは現在"minikube"を使用するように構成されています
* 最良の結果を得るには、kubectlをインストールしてください: https://kubernetes.io/docs/tasks/tools/install-kubectl/

これで、minikube は無事に起動しました。簡単に確認してみましょう。

三、minikube のインストール状態を確認#


# root @ VM-253eb12c-e466-4202-b8eb-7892ae3ed8db in /home/tools/k8s [18:17:44] C:126
$ minikube status

host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

問題ありません。次回は minikube を基にした k8s の実践を行います。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。