【k8s】使用Minikube搭建模拟本机K8s实验环境
使用Minikube搭建模拟本机K8s实验环境
[TOC]
前言
由于研究istio需要,准备在本机搭建一套k8s环境,测试完成后再部署到线上。通过搜集了资料,能支持自动化在本机创建实验环境的工具有两套:
+ Minikube
+ Minishift
本次搭建本人优先选择了开发更成熟的前者Minikube
.
工具的原理都相似,主要是以下流程:
启动的内部执行过程: + 创建虚拟机 + 设置boot2docker + 为本地计算机和VM创建证书 + 在本地计算机和虚拟机之间建立网络 + 在VM上运行基于Docker镜像的本地Kubernetes集群
环境: + Centos7 x64 + CPU 2G x 4核 开启虚拟化 Intel VT-x + 内存 8G + 硬盘 SSD 50GB
准备
需要注意:
1.本文章所介绍的方法和指出的问题仅针对当前组件版本,新版本有可能已经解决,若使用新版本请以最新版本文档为准。
2.本文章方法仅推荐用于本机实验环境部署,线上部署请使用二进制部署
或Kubeadm
等其他方式.
组件支持: + VirtualBox (或者Kvm默认使用的是VitualBox) + KubeCtl v1.9.4 + Minikube v0.25.1
VirtualBox安装
Yum安装
step1:卸载老版本,若未安装过可忽略
yum remove VirtualBox-4*
step2:添加VirtualBox安装源
cd /etc/yum.repos.d/
wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
step3:安装相关依赖(这部很关键)
yum update
yum -y install binutils qt gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms
step4:安装VirtualBox 5.1
yum -y install VirtualBox-5.1
step5:重建VirtualBox 5.1内核模块
/usr/lib/virtualbox/vboxdrv.sh setup
step6: 添加组用户
usermod -a -G vboxusers $(whoami)
step7: 登陆组
newgrp vboxusers
step7: 若出现KERN_DIR的错误,则需要设置相应的全局变量
KERN_DIR=/usr/src/kernels/3.10.0-229.7.2.el7.x86_64
export KERN_DIR
KubeCtl安装
https://github.com/kubernetes/kubernetes/release
自动下载编译好的稳定版二进制文件
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.9.4/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
Minikube安装
https://github.com/kubernetes/minikube/releases
自动下载编译好的稳定版二进制文件
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.25.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
Kvm2虚拟机环境安装
# 安装kvm
$ sudo yum install libvirt-daemon-kvm qemu-kvm
# 添加当前用户到libvirt组
$ sudo usermod -a -G libvirt $(whoami)
# 登陆组libvirt
$ newgrp libvirt
# 修改文件所属用户
sudo chown -R $(whoami):libvirtd /var/run/libvirt
# 安装kvm2
curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 && chmod +x docker-machine-driver-kvm2 && sudo mv docker-machine-driver-kvm2 /usr/local/bin/
# 使用kvm2虚拟机启动Minikube
minikube start --vm-driver=kvm2 --docker-env HTTP_PROXY=http://127.0.0.1:8118 --docker-env HTTPS_PROXY=http://127.0.0.1:8118
运行
由于minikube默认使用的是VirtualBox
,若是使用了其他VM需要设置一下。
Minikube支持以下驱动:
+ virtualbox
+ vmwarefusion
+ KVM2
+ KVM (deprecated in favor of KVM2)
+ hyperkit
+ xhyve
+ hyperv
# 默认使用VirtualBox
minikube start
# 使用docker代理
minikube start --vm-driver=kvm2 --docker-env HTTP_PROXY=http://127.0.0.1:8118 --docker-env HTTPS_PROXY=http://127.0.0.1:8118
# 使用KVM2
minikube start --vm-driver kvm2
[root@localhost software]# minikube start
Starting local Kubernetes v1.9.4 cluster...
Starting VM...
Downloading Minikube ISO
142.22 MB / 142.22 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading localkube binary
163.02 MB / 163.02 MB [============================================] 100.00% 0s
65 B / 65 B [======================================================] 100.00% 0s
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.
# 使用minikube status检查运行状态
[root@localhost software]# minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
首次启动会自动下载镜像和设置集群需要一段时间。
常用指令
# 启动
$ minikube start
# 仪表盘
$ minikube dashboard
踩坑与填坑
VirtualBox无法运行
启动Minikube时候卡在 Starting cluster components
可能原因: Minikube与K8s版本不匹配
检查方式:
$ minikube version
minikube version: v0.28.0
$ kubectl version
到release note上看版本是否对应,并不一定追求最近,搭配稳定最重要
Dashboarh 无法启动
可能原因: 部分容器未启动成功
具体原因: 由于GFW,虚拟机内部Docker无法正常从gcr.io外部源拉取镜像,需要设置代理或采用本地源
检查方式:
# 查看日志
$ minikube logs
# 根据下表,找到未拉取成功或者启动成功的镜像,手动下载
|序号|依赖镜像名称|源地址| |:-|:-|:-| |1|pause-amd64:3.0|gcr.io/google_containers/pause-amd64:3.0| |2|kube-addon-manager-amd64:v6.5|gcr.io/google-containers/kube-addon-manager-amd64:v6.5| |3|kubernetes-dashboard-amd64:v1.8.1|k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.1| |4|k8s-dns-dnsmasq-nanny-amd64:1.14.5|k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.5| |5|k8s-dns-kube-dns-amd64:1.14.5|k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.5| |6|storage-provisioner:v1.8.1|gcr.io/k8s-minikube/storage-provisioner:v1.8.1|
解决方法:
从可用镜像库拉取镜像,用docker tag
功能设置成系统需要的标志
镜像源:
+ Aliyun: registry.cn-hangzhou.aliyuncs.com/google-containers
+ DockerHub:https://hub.docker.com/u/mirrorgooglecontainers/
# 从镜像拉取
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
# 修改tag
docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0
# 镜像pause-amd64
docker pull mirrorgooglecontainers/pause-amd64:3.0
docker tag mirrorgooglecontainers/pause-amd64:3.0 gcr.io/google-containers/pause-amd64:3.0
# 镜像kube-addon-manager
docker pull mirrorgooglecontainers/kube-addon-manager-amd64:v6.5
docker tag mirrorgooglecontainers/kube-addon-manager-amd64:v6.5 gcr.io/google-containers/kube-addon-manager-amd64:v6.5
# 镜像kubernetes-dashboard
docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.8.1
docker tag mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.8.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.1
# 镜像k8s-dns-dnsmasq-nanny
docker pull mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64:1.14.5
docker tag mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64:1.14.5 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.5
# 镜像k8s-dns-sidecar
docker pull mirrorgooglecontainers/k8s-dns-sidecar-amd64:1.14.5 &&
docker tag mirrorgooglecontainers/k8s-dns-sidecar-amd64:1.14.5 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.5
# 镜像k8s-dns-kube-dns
docker pull mirrorgooglecontainers/k8s-dns-kube-dns-amd64:1.14.5
docker tag mirrorgooglecontainers/k8s-dns-kube-dns-amd64:1.14.5 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.5
# 镜像storage-provisioner
docker pull dieudonnecc/storage-provisioner:v1.8.1 &&
docker tag dieudonnecc/storage-provisioner:v1.8.1 gcr.io/k8s-minikube/storage-provisioner:v1.8.1