我们不生产代码,但我们是bug的专业制造者

Minikube本地部署kubernetes

1.环境准备,软件介绍

  • Centos7操作系统(在windows下安装VM虚拟机)
  • virtual BOX(需要在centos中安装)
  • minikube
  • Kubectl
  • docker
    1.本次练习基于windows系统的linux虚拟机,所以先在windows系统下安装虚拟机软件Vmware,同时在linux官网上下载linux的Centos7版本的iso镜像,在创建新的虚拟机时用到,怎么在vm中安装虚拟机可自行google,注意,能成功运行下面的命令你的虚拟机需要联网+翻墙,否则不会成功。
    2.在wm中安装好centos系统的后第一个要解决的就是上网问题,从网上搜了很多方法,大部分是教你通过ifconfig命令然后修改eth0信息之类,对我的不起作用,后来找到了适合我的方法,第一步是先将虚拟机的网络调成桥接模式,第二步给虚拟机一个虚拟的网络端口eth0,网络也是采用桥接的形式


    3.安装virtual Box
    在centos中的terminal输入以下命令
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # cd /etc/yum.repos.d/
    # wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
    # yum update
    # yum install binutils qt gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms
    # export KERN_DIR=/usr/src/kernels/3.10.0-327.22.2.el7.x86_64
    ##这步是给virtual Box设置内核,内核可以在/usr/sr/kernels中查看,一般yum update后内核会升级,这里选用版本高的那个来设置内核,注意此处根据具体情况3.10.0-327.22.2.el7.x86_64可能有所变化
    # yum install VirtualBox-5.0
    #更新内核
    # /usr/lib/virtualbox/vboxdrv.sh setup

成功后重启一下虚拟机,在设置的处理器中选中复选框Virtualize Intel VT-x/EPT or AMD-V/RVI ,

否则到时用minikube start会报

1
2
3
4
# minikube start
Starting local Kubernetes cluster...
E0727 06:27:17.242507 66718 start.go:78] Error starting host: Error creating. Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
#

注意:只能在VM停下来的时候才能设定
4.安装minikube并设定

1
# curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.7.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

简单解释
curl -Lo 会把minikube下载到本地
chmod +x 给其加上执行权限
mv kubectl /usr/local/bin下是因为普通用户的path中缺省的有/usr/local/bin
然后用minikube version查看一下命令,出现版本号说明安装成功,不过可能后续还会有坑要继续踩!
5.下载并设定kubectl,kubectl是kubernetes的客户端工具

1
2
3
# curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
#kubectl version
##查看版本号看看是否成功

6.最后使用minikube start命令启动kubernetes集群
成功后是这样子的

2.部署运行实例

首先恭喜你,经历千辛万苦爬了那么多坑才来到这一步,环境我们已经安装完毕,现在来演示运行一个实例,这里我以tomcat 镜像为例,演示部署服务,发布服务,扩容缩容服务等操作。
1、创建并启动 minikube 虚拟机

1
2
3
4
5
$ minikube start
Starting local Kubernetes cluster...
Running pre-create checks...
Creating machine...
Starting local Kubernetes cluster...

成功后可以看到

2、创建 hello-minikube 部署

1
2
$ kubectl run hello-minikube --image=tomcat:8.0 --port=8080
deployment "hello-minikube" created

3、发布服务 hello-minikube

1
2
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

4、查看 pods

1
2
3
4
5
6
7
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-598805112-3bzmf 1/1 ContainerCreating 0 5s
## 注意:刚开始时,pod 没有完全创建好的时候,状态是 ContainerCreating,当部署完成后,状态就变成 Running,不过你会遇到问题的,别慌,后面介绍怎么解决。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-598805112-3bzmf 1/1 Running 0 25s

5、获取服务地址

1
2
3
$ minikube service hello-minikube --url
http://192.168.99.102:30724
$ minikube service hello-minikube 将直接使用默认浏览器打开网址。

6、停止 minikube 虚拟机

1
2
3
$ minikube stop
Stopping local Kubernetes cluster...
Stopping "minikube"...

更多的命令可以查看minikube和kubectl的命令介绍,比如怎么删除服务啦

3.脱坑指南

1.在安装virtual BOx时报

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Downloading Packages:
Setting up and reading Presto delta metadata
Traceback (most recent call last):
File "/usr/bin/yum", line 29, in <module>
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 285, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 219, in main
return_code = base.doTransaction()
File "/usr/share/yum-cli/cli.py", line 498, in doTransaction
problems = self.downloadPkgs(downloadpkgs, callback_total=self.download_callback_total_cb)
File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 1986, in downloadPkgs
self.plugins.run('predownload', pkglist=pkglist)
File "/usr/lib/python2.6/site-packages/yum/plugins.py", line 184, in run
func(conduitcls(self, self.base, conf, **kwargs))
File "/usr/lib/yum-plugins/presto.py", line 576, in predownload_hook
xpostreposetup_hook(conduit, repos)
File "/usr/lib/yum-plugins/presto.py", line 548, in xpostreposetup_hook
pinfo[active_repo.id] = PrestoParser(deltamd).getDeltas()
File "/usr/lib/yum-plugins/presto.py", line 509, in __init__
for event, elem in iterparse(fo):
File "<string>", line 64, in __iter__
SyntaxError: not well-formed (invalid token): line 1, column 0

的错误,这时需要yum clean all再yum update
2.在运行kubectl get pods发现 hello-minikube 的状态一直是 ContainerCreating,并且 READY 为 0/1,使用kubectl describe pods得到以下信息

1
Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for gcr.io/google_containers/pause:2.0, this may be because there are no credentials on this request. details: (API error (500): Get https://gcr.io/v1/_ping: dial tcp 64.233.189.82:443: i/o timeout\n)"

意思是有一个镜像 gcr.io/google_containers/pause-amd64:3.0 显示拉取失败,分析原因应该是 gcr.io 这个地址被墙了。那怎么办呢!
首先安装docker

1
2
3
4
5
6
7
8
9
10
11
12
#查看你当前的内核版本
uname -r
#安装 Docker
yum -y install docker
#启动 Docker 后台服务
service docker start
#测试运行 hello-world,由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
docker run hello-world
安装docker应该没有什么大问题。

然后利用docker去阿里云上拉取image镜像。

1
2
3
minikube ssh
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

删除pod后再观察下,这时应该变为running了

1
2
kubectl delete pods xxxx
kubectl get pod --all-namespaces

解决方法参照mac安装kubernetes并运行echoserver
然后在运行minikube service XXXX就可以看到tomcat的首页了,

其实就是把tomcat的服务用容器包起来,然后通过clusterIp+port的端口去访问这个服务。

Docker Mysql主从数据库搭建

  1. 1. 1.环境准备,软件介绍
  2. 2. 2.部署运行实例
  3. 3. 3.脱坑指南