fayeah / blogs

方法论、问题驱动、总结
6 stars 0 forks source link

【Kubernetes】用minikube在Kubernetes上run一个node服务 #2

Open fayeah opened 4 years ago

fayeah commented 4 years ago

昨天接到了一个任务,for security让我自定义istio的response header。那我就在本地玩玩看咯,只是由于村里的网络太差,在本地run这些需要下载很多images和dependency。所以这个任务我只做到了使用minikube在Kubernetes上run了一个node服务,由于第一次setup,也是遇到了不少坑。记录一下。

prerequirement: Docker, minikube, kubectl, docker-machine-driver-vmware (我本地的版本Docker-18.06.1-ce-mac73 (26764),minikube-v1.6.2, kubectl-v1.17.0)

Minikube 最大的好处是我们可以在本地run Kubernetes,非常方便地创建和销毁cluster。

使用Minikube创建cluster

可以指定cpus,memory, vm等。我们有几个vm driver可以选择,但是hyperkit使用起来ip好像有点问题,后面download image一直没办法下载。vmwarefusion是deprecated,不建议使用。我用vmware还比较顺畅。

minikube start --vm-driver=vmware

看到最后一行Done,就完成了创建。 image

reuse minikube Docker Daemon.

由于我想使用我本地的Dockerfile和server.js来build,而minikube也刚好有内嵌的Docker Daemon,所以我可以使用一个命令将docker能够直接访问minikube vm的docker env。

eval $(minikube docker-env)

前后docker image对比: image image

Build Docker image

到Dockerfile和server.js目录下

docker build -t foo:0.0.1 .

Run in Minikube with built image

kubectl run hello-node --image=foo:0.0.1 --image-pull-policy=Never

Check server is running

kubectl get pods

make sure the pod is running image

Create Kubernetes service

默认情况下,该pod只能在kubernetes cluster内部访问,为了能够在外部也访问到,我们需要创建一个Kubernetes service。

kubectl expose deployment hello-node --type=LoadBalancer --port=8080

然后,检查下刚刚创建的service

kubectl get services

open service

minikube service hello-foo

会自动打开一个浏览器访问前面启动的服务。至此,在本地kubernetes 集群并且创建pod,使其在外部能够访问,基本已经完成。

下一步就是,destroy。没错,我们创建的目的就是为了销毁!

Minikube clean up

kubectl delete service hello-node
kubectl delete deployment hello-node
minikube stop
minikube delete

minikube,kubenetes,istio等还有许许多多需要发掘,不过我还是先做mobile吧,ops太伤脑袋了……

fayeah commented 4 years ago

index.js

var http=require('http');

var server = http.createServer(function(req, response) {
    response.writeHead(200, {"Content-Type": "text/pain"});
    response.end("Hellow world\n");
  }
)
server.listen(8000);

Dockerfile

FROM mhart/alpine-node
COPY index.js .
CMD node index.js