#1 Minikubeとは?
Minikubeは、単一ノードのKubernetes環境を構築するためのコマンドです。
複数台から構成される環境は構築できません。
ここでは、下記公式ページにしたがって、MinikubeによるKubernetes環境を構築してみました。
https://kubernetes.io/docs/tasks/tools/install-minikube/#before-you-begin
#2 環境
VMware Workstation 14 Player上の仮想マシンを使いました。
仮想マシンのOS版数は以下のとりです。仮想マシンは、最小構成で作成しました。
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@master ~]# uname -r
3.10.0-693.el7.x86_64
#3 仮想マシンをIntel-VT対応に変更
「Intel VT-x...」のチェックボックスをONにして、仮想マシンを起動します。
仮想マシンが起動したら、Intel-VT対応かどうかを確認します。
なお、lscpuコマンドのインストール方法は、ここ(lscpuコマンドの使い方)を参照してください。
[root@master ~]# lscpu |grep vmx
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec arat
/proc/cpuinfoの中身を直接確認することもできます。
[root@master ~]# cat /proc/cpuinfo |grep vmx
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec arat
(以下、略)
#4 kubectlコマンドのインストール
[root@master ~]# vi /etc/yum.repos.d/kubernetes.repo
[root@master ~]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
[root@master ~]# yum install -y kubectl
[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.4", GitCommit:"5ca598b4ba5abb89bb773071ce452e33fb66339d", GitTreeState:"clean", BuildDate:"2018-06-06T08:13:03Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
#5 VirtualBoxのインストール
下記ページよりVirtualBoxパッケージをダウンロードします。
https://www.virtualbox.org/wiki/Linux_Downloads
[root@master ~]# wget https://download.virtualbox.org/virtualbox/5.2.12/VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
--2018-06-20 19:52:52-- https://download.virtualbox.org/virtualbox/5.2.12/VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
download.virtualbox.org (download.virtualbox.org) をDNSに問いあわせています... 23.217.126.192
download.virtualbox.org (download.virtualbox.org)|23.217.126.192|:443 に接続しています... 接続しました。
[root@master ~]# ls VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
ダウンロードしたパッケージをインストールします。
私の環境では、以下のようなエラーが発生しました。
[root@master ~]# rpm -ivh VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
警告: VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 98ab5139: NOKEY
エラー: 依存性の欠如:
libGL.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libICE.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libSDL-1.2.so.0()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libSM.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libX11-xcb.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libX11.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libXcursor.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libXext.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libXinerama.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libXmu.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libXrender.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libXt.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libfontconfig.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libpng15.so.15()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libpng15.so.15(PNG15_0)(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libvpx.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
libxcb.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
エラーメッセージに表示されたパッケージインストールします。
[root@master ~]# yum -y install libGL* libICE* libSDL* libSM* libX11* libXcursor* libXext* libXinerama* libXmu* libXrender* libXt* libfontconfig* libpng15* libvpx* libxcb*
再度、VirtualBoxパッケージをインストールします。
私の環境では、インストール完了まで少し時間(数分)がかかりました。
[root@master ~]# rpm -ivh VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
警告: VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 98ab5139: NOKEY
準備しています... ################################# [100%]
更新中 / インストール中...
1:VirtualBox-5.2-5.2.12_122591_el7-################################# [100%]
Creating group 'vboxusers'. VM users must be member of that group!
#6 minikubeコマンドのインストール
[root@master ~]# curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 40.8M 100 40.8M 0 0 121k 0 0:05:43 0:05:43 --:--:-- 143k
[root@master ~]# minikube version
minikube version: v0.28.0
[root@master ~]# minikube get-k8s-versions
The following Kubernetes versions are available when using the localkube bootstrapper:
- v1.10.0
- v1.9.4
- v1.9.0
- v1.8.0
- v1.7.5
- v1.7.4
- v1.7.3
- v1.7.2
- v1.7.0
- v1.7.0-rc.1
- v1.7.0-alpha.2
- v1.6.4
- v1.6.3
- v1.6.0
- v1.6.0-rc.1
- v1.6.0-beta.4
- v1.6.0-beta.3
- v1.6.0-beta.2
- v1.6.0-alpha.1
- v1.6.0-alpha.0
- v1.5.3
- v1.5.2
- v1.5.1
- v1.4.5
- v1.4.3
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.7
- v1.3.6
- v1.3.5
- v1.3.4
- v1.3.3
- v1.3.0
#7 Kubernetesクラスタの起動
minikubeコマンドを実行して、Kubernetesクラスタを起動します。
私の環境では、実行完了するまで60分程度かかりました。
[root@master ~]# minikube --vm-driver=virtualbox start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
153.08 MB / 153.08 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Finished Downloading kubelet v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
ちなみに、kubernetesクラスタを停止するには、stopコマンドを使います。
[root@master ~]# minikube stop
Stopping local Kubernetes cluster...
Machine stopped.
#8 Minikubeの状態確認
[root@master ~]# minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
[root@master ~]# minikube service list
|-------------|----------------------|-----------------------------|
| NAMESPACE | NAME | URL |
|-------------|----------------------|-----------------------------|
| default | kubernetes | No node port |
| kube-system | kube-dns | No node port |
| kube-system | kubernetes-dashboard | http://192.168.99.100:30000 |
|-------------|----------------------|-----------------------------|
#9 ノードの状態確認
[root@master ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@master ~]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready master 3m v1.10.0 <none> Buildroot 2018.05 4.16.14 docker://17.12.1-ce
[root@master ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* minikube minikube minikube
#10 podの起動/削除
nginxのPodを起動してみます。ここでもpodの起動に時間(20?分程度)がかかりました。
[root@master ~]# kubectl run nginx --image=nginx
deployment.apps "nginx" created
podの状態を確認する。まだ、Podの作成中(ContainerCreating)であることがわかる。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-65899c769f-sqfhk 0/1 ContainerCreating 0 23s
podの状態を確認する。PodがRunning状態になったことがわかる。
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-65899c769f-sqfhk 1/1 Running 0 14m
deploymentの状態を確認する。
[root@master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 1 1 1 1 25m
[root@master ~]# kubectl delete deployment nginx
deployment.extensions "nginx" deleted
[root@master ~]# kubectl get pod
No resources found.
[root@master ~]# kubectl get deployment
No resources found.
#11 エラー対処
Podは起動したものの、メッセージ(/var/log/messages)を確認すると
エラーらしきメッセージが多数出力されていたので、その対処をしました。
##11.1 "Configuration file /etc/systemd/system/kubelet.service is marked executable. Please remove executable permission bits. Proceeding anyway."
ユニットファイル(kubelet.service)に実行権が設定されていたので、表題のエラーがでていたようです。
指示にしたがって、ユニットファイルの実行権を落としました。
[root@master ~]# ls -l /etc/systemd/system/kubelet.service
-rwxr-xr-x. 1 root root 221 6月 8 22:39 /etc/systemd/system/kubelet.service
[root@master ~]# chmod 644 /etc/systemd/system/kubelet.service
[root@master ~]# ls -l /etc/systemd/system/kubelet.service
-rw-r--r--. 1 root root 221 6月 8 22:39 /etc/systemd/system/kubelet.service
##11.2 "unable to load client CA file /etc/kubernetes/pki/ca.crt: open /etc/kubernetes/pki/ca.crt: no such file or directory"
[root@master ~]#vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
#Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/root/.minikube/ca.crt"
#12 エスカレーション
下記問題について、コミュニティにエスカレーションをしました。
https://github.com/kubernetes/minikube/issues/2927
しばらくぶりに状況を確認したら、根本原因や修正方法等はわかりませんが、
クローズしていました。
#Z 参考情報
Minikubeを使ってローカル環境にKubernetes環境を用意する
Download VirtualBox for Linux Hosts
Kubernetes 1.10のkubeletの起動オプションをKubelet ConfigファイルとPodSecurityPolicyで置き換える