minikube中部署的第一個Kubernete應(yīng)用
(Proudly powered by QKQ)
上一篇文章安装好了minikube,那么接下来就试试kubernetes的hello world。
Q: 将应用部署到kubernetes需要几个步骤?
A: 在kubernetes中部署应用,首先需要将应用做成镜像,然后才能部署在kubernetes中。所以:
创建一个镜像
需要一个镜像仓库用来存放镜像
编写kubernetes的deployment文件,将镜像部署成为pod
编写kubernetes的service文件,创建pod的服务,并对外暴露端口
这里,我们先跳过创建镜像这一步,直接使用网络上的echo镜像。即: A: 镜像从docker hub中拉取,然后在本地建立一个镜像仓库。建立镜像仓库很简单: 该命令会从docker hub上拉取registry镜像,并启动成为容器,该端口为5000。 然后我们从docker hub拉取echo镜像: 再将镜像打一个tag,然后push到本地镜像仓库: 注意,192.168.99.1是minikube创建的虚拟机的网络,由于我们需要在虚拟机中使用这个docker registry,所以为该地址。 创建镜像之后使用docker pull 192.168.99.1:5000/echo:v1.0,发现拉取不下来。由于这是一个私有仓库,所以在docker daemon中需要添加这个insecure registry(不安全的仓库)。在macos上的docker daemon里的preferences里的daemon页,insecure registries里加上192.168.99.1:5000,然后重启daemon,即可成功拉取镜像。 在minikube start的时候,需要使用命令 最终的minikube start指令为: A: 此时,我们要创建一个pod。pod是什么?就是一个或者多个容器,pod是kubernetes调度的基本单元。 使用 A: service是用来干什么的?k8s里面的service是用来访问pod的,由于pod可能被重启,重启之后ip就变了,而service具有名字,可以通过名字来访问service代表的pod。 注意,其中的targetPort跟deployment里面的containerPort一致。nodePort表示我们将minikube创建的机器的端口跟service的port映射了起来,而service的port又跟pod的port映射了起来。 总结一下,要运行app,我们需要: 镜像 镜像仓库 Deployment,即Pod,即容器的载体 Service,对外暴露服务的ip和端口
kennship/http-echo,这是一个简单的nodejs代码,它接收一个请求,返回请求信息。其Q: 如何建立一个私有镜像仓库?
docker run -d -p 5000:5000 --name registry registry:2
docker pull kennship/http-echo
docker tag kennship/http-echo 192.168.99.1:5000/echo:v1.0
docker push 192.168.99.1:5000/echo:v1.0
如果在tag的时候不加v1.0这个标签,在进行pull的时候会报类似于manifest not found之类的错误。--insecure-registries=192.168.99.1:5000
来设置虚拟机里面的docker daemon的private registry。minikube start --docker-env http_proxy=[http://192.168.99.1:1087](http://192.168.99.1:1087/) --docker-env https_proxy=[http://192.168.99.1:1087](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 --insecure-registry=192.168.99.1:5000
Q: kubernetes的deployment指令?
我们有了镜像,镜像的运行时是容器,所以我们需要容器,k8s里面容器以pod的形式运行。deployment是用来创建pod的。
echo的deployment(文件名为deploy.yaml):# deploy.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: echo-deployment labels: app: echospec: replicas: 1 selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: koly-echo image: 192.168.99.1:5000/echo:v1.0 ports: - containerPort: 3000
kubectl apply -f deploy.yaml
来告诉k8s运行一个基于echo镜像的pod。
然后我们可以使用kubectl get pods
来查看我们的pod是否运行成功。Q: echo服务的service?
echo服务的Service(文件名service.yaml):apiVersion: v1kind: Servicemetadata: name: echo-servicespec: selector: app: echo type: NodePort ports: - protocol: TCP port: 80 targetPort: 3000 nodePort: 30080
此时,我们可以通过minikube ip来获取机器的ip地址,然后使用:curl -v http://$(minikube ip):30080/hello
来访问echoserver了。
返回结果:* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 1087 (#0)> GET http://192.168.99.101:30080/hello HTTP/1.1> Host: 192.168.99.101:30080> User-Agent: curl/7.54.0> Accept: */*> Proxy-Connection: Keep-Alive>< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Content-Length: 259
< ETag: W/"103-vpP+vLOLEtvy++USO5/H0ZHELDg"
< Date: Sun, 06 Jan 2019 12:11:21 GMT
< Connection: keep-alive
< Proxy-Connection: keep-alive
<
* Connection #0 to host 127.0.0.1 left intact
{"path":"/hello","headers":{"host":"192.168.99.101:30080","user-agent":"curl/7.54.0","accept":"*/*"},"method":"GET","body":{},"fresh":false,"hostname":"192.168.99.101","ip":"::ffff:172.17.0.1","ips":[],"protocol":"http","query":{},"subdomains":[],"xhr":false}
作者:Mr_Hospital
链接:https://www.jianshu.com/p/7cc5f727c225
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章