1. 准备一个虚拟机环境

我个人使用的是Vitual Box

Linux系统使用的是Centos7

2. 虚拟机安装Linux

直接选择最小内容安装即可,我个人喜欢纯净再纯净

3. 安装Docker


从头到尾走完即可

这边我选择的docker版本和文章中一样,为18.09.5

4. 安装K8S环境

4.1 放弃kubeadm

本来尝试基于kubeadm来安装k8s集群,然后安装完成后,k8s-master节点可以正常启动,但是观察的时候就发现每次在启动的时候cpu会超高(虚拟机2c4g环境)。一旦启动k8s-node节点,cpu就直接100%下不来了。后面尝试将虚拟机配置增加到4c8g,也没有明显的改善。没有确定具体原因,果断放弃尝试kubeadm了,反正只是为了学习,直接使用minikube这种轻量级的方式来搭建k8s集群。

4.2 使用minikube搭建k8s

  1. 先添加kubernetes的yum源,在虚拟机中执行如下命令
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=1
EOF
  1. 安装kubectl库,kubectl是一个官方提供的k8s的 CLI 工具库。
yum install -y kubectl-1.21.2
  1. 下载并安装minikube
curl -LO https://storage.googleapis.com/minikube/releases/v1.22.0/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
  1. 启动minikube,这边踩过很多的坑,在文章末尾依次记录
minikube start --image-mirror-country='cn'

如果不添加--image-mirror-country='cn'的话,默认走的是国外镜像,速度很慢

如果使用的是root用户直接启动的话,需要在命令后面再加上 --force (不是好习惯,但我们只是为了学习,所以无所谓啦)

  1. 后续重新启动minikube的时候,直接使用minikube start即可,不需要再加上后面的--image-mirror-country='cn'参数了
  2. 使用 minikube dashboard --url=false 命令,查看k8s控制台



k8s 部署redis mysql mq k8s 部署minio_linux


下面打印出的url就是控制台的页面了,不过此时我们还无法直接在主机电脑上的浏览器中直接访问控制台,需要设置一下,将虚拟机中的端口放出来才行。

# port是上面dashboard命令后面返回的端口号  address是你自己虚拟机的ip地址
nohup kubectl proxy --port=36123 --address='192.168.0.107' --accept-hosts='^.*' > ./nohup.out &

然后就可以在windows浏览器中直接访问k8s控制台啦,可以愉快的玩耍了


k8s 部署redis mysql mq k8s 部署minio_java_02


5. 启动minikube时踩的坑

  1. 启动的时候告警

The image 'registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0' was not found; unable to add it to cache.


k8s 部署redis mysql mq k8s 部署minio_kubernetes_03


这种找不到镜像的错误还后面还会经常遇到,但是这里并不会影响minikube的正常启动,待启动完成之后我们再解决。

所有的找不到镜像的问题,我们都可以采用手动拉取镜像的方法解决,比如这里说的是找不到registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0镜像。

我们就可以去docker的官方仓库(https://hub.docker.com/)里查看有没有coredns/coredns镜像,这里发现有的,接着我们直接在虚拟机中使用docker pull coredns/coredns:1.8.0命令拉取官方提供的镜像。


k8s 部署redis mysql mq k8s 部署minio_docker_04


接着使用docker tag coredns/coredns:1.8.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0命令,修改镜像名称为刚刚提示找不到的镜像名称。

  1. 在minikube dashboard的时候,在验证 proxy 运行状况时系统卡住


k8s 部署redis mysql mq k8s 部署minio_kubernetes_05


使用 kubectl get pod -A 命令,发现有几个镜像没有启动成功

使用 kubectl describe pod storage-provisioner -n kube-system 查看具体原因


k8s 部署redis mysql mq k8s 部署minio_java_06


发现是 k8s-minikube/storage-provisioner:v5 镜像没有拉下来,同样的,我们去dockerhub官网上找有没有该镜像,这里发现没有官方的镜像,但是好像在有用户自己上传的镜像。

这里由于是minikube内部的报错了,我们需要使用 minikube ssh 命令,进入minikube的内部环境,然后再拉取镜像。

minikube ssh
docker pull kedu0105/storage-provisioner:v5
docker tag kedu0105/storage-provisioner:v5 registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5
exit


k8s 部署redis mysql mq k8s 部署minio_kubernetes_07


同理另外的两个pod分别是缺少registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetesui/metrics-scraper:v1.0.4、registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetesui/dashboard:v2.1.0镜像,我们使用相同的方法手动拉取

minikube ssh
docker pull kubernetesui/metrics-scraper:v1.0.4
docker tag kubernetesui/metrics-scraper:v1.0.4 registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetesui/metrics-scraper:v1.0.4
docker pull kubernetesui/dashboard:v2.1.0
docker tag kubernetesui/dashboard:v2.1.0 registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetesui/dashboard:v2.1.0
exit

此时再执行 kubectl get pod -A 命令,就发现所有的pod都正常启动了 (如果有还未启动的,就手动delete一下这个pod,让他自己重建)


k8s 部署redis mysql mq k8s 部署minio_kubernetes_08


大功告成