(Proudly powered by QKQ)
学习使用Kubernetes,需要一个环境,可以在google cloud上买一个,但是还是觉得本地有一个环境比较好。本地的环境,鉴于资源关系,所以选择了minikube。minikube即迷你kubernetes。
我的机器是Macbook,使用的MacOS。安装了Mac下的docker engine/daemon。docker engine跟docker daemon有什么区别呢?其实指向的东西是一样的,叫法不同。
Q: 环境是什么样的?
A: 本地环境
- Macbook
- MacOS Mojave 10.14.1
- docker version 18.09.0
- 由于需要从外网下载,所以需要使用ssX-NG(你懂的)
- VirtualBox,使用的虚拟机提供者是VirtualBox
Q: 都遇到了哪些坑?
A:
- 直接minikube start无法完成安装。
- 卡在restarting cluster components...
- 虚拟机无法连接主机的proxy
- 配置docker engine的env不生效
- 安装速度慢
- 不知道怎么样才算安装成功
Q: 最终安装的指令是什么?
A:
export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087; # 注意两个都是http,不是https
minikube start --docker-env http_proxy=http://192.168.99.1:1087 --docker-env https_proxy=http://192.168.99.1:1087 --docker-env no_proxy=localhost,127.0.0.1,192.168.99.0/24 --log_dir=tmp --cpus 4 --memory 8192
解释一下命令:
- export http_proxy命令是添加命令行代理,主要是为了让minikube可以在命令行通过proxy去下载相关文件
- --docker-env http_proxy...,设置虚拟机中docker daemon的环境变量,这里的环境变量http_proxy表示虚拟机中docker daemon使用的代理
- --docker-env no_proxy,设置虚拟机中docker daemon不使用代理的地址段
- --log_dir=tmp,设置minikube的日志存储位置,这里是当前目录下的tmp文件夹。该目录下会出现INFO和ERROR的日志,INFO是一定会有,ERROR是出错的时候才有。比如
- --cpus 4,设置虚拟机的cpu核数
- --memory 8192,设置虚拟机的内存大小,单位为M
还有一个设置log级别的:
- --v=0 INFO level logs
- --v=1 WARNING level logs
- --v=2 ERROR level logs
- --v=3 libmachine logging
- --v=7 libmachine --debug level logging
比如:minikube --v=2
就是ERROR level logs
Q: minikube干了什么?
A: 没有官方文档解释做了些什么,我猜测的:
- 下载minikube iso,存储位置为~/.minikube/cache/iso/minikube-v0.32.0.iso
- 下载kubeadm,存储位置为~/.minikube/cache/v1.12.4/kubeadm
- 下载kubelet,存储位置为~/.minikube/cache/v1.12.4/kubelet
- 创建并启动虚拟机
- 将需要的文件拷入虚拟机
- 使用kubeadm安装kubernetes
- kubeadm会下载镜像,并启动镜像
注意:~/.minikube是minikube的缓存和配置文件的存储位置
Q: 为什么直接minikube start无法完成安装?
A: 如上所述,minikube会去下载很多东西,这些在google的服务器上,不使用代理无法下载。
Q: 卡在restarting cluster components...
A: 通过设置log的目录,可以通过具体的log查看卡住的原因。我遇到的一般是下载不了镜像的原因。
一般来说,设置了docker daemon的proxy就能够下载镜像了。如果下载不了,可能是proxy的问题。如果是在Mac上,可以看看下面虚拟机无法联机主机proxy的问题。
如果proxy设置没有问题,但是minikube start还是无法下载镜像的话(通过log查看),可以通过minikube ssh登入虚拟机,然后手动执行
kubeadm config images pull
进行镜像的拉取。
Q: 虚拟机无法连接主机的proxy
A: 需要在ss-NG的设置里面,将http proxy listen address设置为0.0.0.0。表示允许任何主机的访问。
Q: 配置docker engine的env不生效?
A: 这个问题跟中途配置--cpu和--memory不生效的问题一样,原因应该是该命令是在创建虚拟机之后就写入到虚拟机里了,所以中途如果需要更改的话,需要删除虚拟机,重来一次。执行minikube delete,然后重新minikube start就可以了。
Q: 安装速度慢
A: 跟网络有关系,毕竟要下载iso和kubeadm和kubelet需要一定时间,这几个东西也不小:
- minikube-v0.32.0.iso,179M
- kubeadm,52M
-
kubelet,169M
其中还有镜像的大小:
Q: 不知道怎么才算安装成功?
A: 几个地方可以查看:
minikube安装完成之后提示"Please enjoy minikube"
kubectl version的结果:
使用minikube ssh登录进去之后的镜像和容器:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
golang 1.12-rc 62c3cb756f2b 7 days ago 768MB
k8s.gcr.io/kubernetes-dashboard-amd64 v1.10.1 f9aed6605b81 2 weeks ago 122MB
k8s.gcr.io/kube-proxy v1.12.4 6d393e89739f 3 weeks ago 96.5MB
k8s.gcr.io/kube-apiserver v1.12.4 c04b373449d3 3 weeks ago 194MB
k8s.gcr.io/kube-controller-manager v1.12.4 51b2a8e5ff78 3 weeks ago 164MB
k8s.gcr.io/kube-scheduler v1.12.4 c1b5e63c0b56 3 weeks ago 58.4MB
k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 3 months ago 220MB
k8s.gcr.io/coredns 1.2.2 367cdc8433a4 4 months ago 39.2MB
k8s.gcr.io/echoserver 1.10 365ec60129c5 9 months ago 95.4MB
k8s.gcr.io/kube-addon-manager v8.6 9c16409588eb 10 months ago 78.4MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 12 months ago 742kB
gcr.io/k8s-minikube/storage-provisioner v1.8.1 4689081edb10 14 months ago 80.8MB
docker ps的结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45b499003095 f9aed6605b81 "/dashboard --insecu…" About an hour ago Up About an hour k8s_kubernetes-dashboard_kubernetes-dashboard-5bff5f8fb8-jf7cn_kube-system_3becda82-109f-11e9-a635-080027950248_6
4b543d5826a4 4689081edb10 "/storage-provisioner" About an hour ago Up About an hour k8s_storage-provisioner_storage-provisioner_kube-system_3c18aa92-109f-11e9-a635-080027950248_5
d1b90336f259 6d393e89739f "/usr/local/bin/kube…" About an hour ago Up About an hour k8s_kube-proxy_kube-proxy-wkjvw_kube-system_a1d18719-1163-11e9-82ed-080027950248_0
38b20b7159b3 k8s.gcr.io/pause:3.1 "/pause" About an hour ago Up About an hour k8s_POD_kube-proxy-wkjvw_kube-system_a1d18719-1163-11e9-82ed-080027950248_0
5f9fb9690da5 367cdc8433a4 "/coredns -conf /etc…" 2 hours ago Up About an hour k8s_coredns_coredns-576cbf47c7-p6jtb_kube-system_356e9d95-109f-11e9-a635-080027950248_3
cefd5489117d 367cdc8433a4 "/coredns -conf /etc…" 2 hours ago Up About an hour k8s_coredns_coredns-576cbf47c7-72lfg_kube-system_35709bb7-109f-11e9-a635-080027950248_3
89ae1be3eb8d 365ec60129c5 "/usr/local/bin/run.…" 2 hours ago Up 2 hours k8s_hello-minikube_hello-minikube-6b75d57bbd-82kz2_default_4277ca41-10ae-11e9-a635-080027950248_3
a79f3369be02 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_coredns-576cbf47c7-72lfg_kube-system_35709bb7-109f-11e9-a635-080027950248_3
a84812c7f90f k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_kubernetes-dashboard-5bff5f8fb8-jf7cn_kube-system_3becda82-109f-11e9-a635-080027950248_3
928b5194a662 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_coredns-576cbf47c7-p6jtb_kube-system_356e9d95-109f-11e9-a635-080027950248_3
1568fa422077 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_storage-provisioner_kube-system_3c18aa92-109f-11e9-a635-080027950248_3
e59fdc28d4a7 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_hello-minikube-6b75d57bbd-82kz2_default_4277ca41-10ae-11e9-a635-080027950248_3
beafe5c71c98 51b2a8e5ff78 "kube-controller-man…" 2 hours ago Up 2 hours k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_62402c9ecb1701a979883b1f71d73a28_0
64f5023d6f25 c1b5e63c0b56 "kube-scheduler --ad…" 2 hours ago Up 2 hours k8s_kube-scheduler_kube-scheduler-minikube_kube-system_e1b3e16379a55d4c355fa42bc75eb023_3
050aba98dfbd 3cab8e1b9802 "etcd --advertise-cl…" 2 hours ago Up 2 hours k8s_etcd_etcd-minikube_kube-system_400930335566057521570dcbaf3dbb0b_3
f668c2424f79 9c16409588eb "/opt/kube-addons.sh" 2 hours ago Up 2 hours k8s_kube-addon-manager_kube-addon-manager-minikube_kube-system_d682efea6fd7d1c11b13f78e8c81af08_3
ce5a972e40bf c04b373449d3 "kube-apiserver --au…" 2 hours ago Up 2 hours k8s_kube-apiserver_kube-apiserver-minikube_kube-system_cd449a681c0514127b733c5f103919f2_1
7cb7b9d729aa k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_kube-scheduler-minikube_kube-system_e1b3e16379a55d4c355fa42bc75eb023_3
73f0ef3e2040 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_kube-controller-manager-minikube_kube-system_62402c9ecb1701a979883b1f71d73a28_0
93a060e8c13c k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_etcd-minikube_kube-system_400930335566057521570dcbaf3dbb0b_3
2c6c4cad486b k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_kube-apiserver-minikube_kube-system_cd449a681c0514127b733c5f103919f2_1
4265c3c78569 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_kube-addon-manager-minikube_kube-system_d682efea6fd7d1c11b13f78e8c81af08_3
Q: minikube ssh很慢?
A: 使用minikube --logtostderr -v 9 ssh
指令,可以看到minikube会去查看是否有更新,所以很慢。目前没有什么解决办法,可以尝试手动ssh进入虚拟机。
怎么手动登入呢?
使用用户:docker,密码:tcuser登录。比如:
ssh docker@192.168.99.100,然后输入密码
Q: minikube的常用指令有哪些?
A:
- minikube version,查看minikube的版本
- minikube start,启动minikube
- minikube ssh,ssh到虚拟机中
- minikube logs,显示minikube的log
- minikube dashboard,启动minikube dashboard
- minikube ip,显示虚拟机地址
- minikube stop,停止虚拟机
- minikube delete,删除虚拟机