本文主要介绍:
使用Homebrew安装VitrualBox
$ brew cask install virtualbox
使用curl下载并安装最新版本Minikube
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && \
chmod +x minikube && \
sudo mv minikube /usr/local/bin/
使用Homebrew安装xhyve驱动程序并设置其权限
$ brew install docker-machine-driver-xhyve
# docker-machine-driver-xhyve need root owner and uid
$ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
$ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
使用Homebrew下载kubectl命令管理工具
$ brew install kubectl
$ minikube start --vm-driver=xhyve
本文使用Minikube,而不是将Docker镜像push到registry,可以使用与Minikube VM相同的Docker主机构建镜像,以使镜像自动存在。为此,请确保使用Minikube Docker守护进程:
$ eval $(minikube docker-env)
可以在~/.kube/config文件中查看所有可用的环境 。
$ kubectl config use-context minikube
$ kubectl cluster-info
$ minikube dashboard
将这段代码保存在一个名为hellonode的文件夹中,文件名server.js:
var http = require('http');
var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);
运行应用:
$ node server.js
在 http://localhost:8080 中查看。
在hellonode文件夹中创建一个Dockerfile命名的文件
FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
$ eval $(minikube docker-env)
$ docker build -t hello-node:v1 .
一个Pod可以是一个容器,也可以是多个容器的组合,本例中的Pod只有一个容器。Kubernetes会为Deployment生成Pod,并且会检查Pod的健康状况,如果它终止,则重新启动一个Pod的容器,通过Deployment来管理Pod的创建和扩展。
使用kubectl run命令创建Deployment来管理Pod
$ kubectl run hello-node --image=hello-node:v1 --port=8080
查看Deployment
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-node 1 1 1 1 22h
查看所有Pod
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-658d8f6754-vklw4 1/1 Running 1 22h
在Pod中执行bash命令
$ kubectl exec hello-node-658d8f6754-vklw4 ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4332 656 ? Ss 00:31 0:00 /bin/sh -c node server.js
root 5 0.0 1.2 679976 25568 ? Sl 00:31 0:00 node server.js
root 11 0.0 0.0 17496 2020 ? Rs 06:49 0:00 ps aux
查看Pod详情
kubectl describe pod hello-node-658d8f6754-vklw4
查看Pod日志
kubectl logs hello-node-658d8f6754-vklw4
查看群集events
kubectl get events
查看kubectl配置
kubectl config view
默认情况,这Pod只能通过Kubernetes群集内部IP访问。要使hello-node容器从Kubernetes虚拟网络外部访问,须要使用Kubernetes Service暴露Pod。
使用kubectl expose命令将Pod暴露到外部环境
$ kubectl expose deployment hello-node --type=LoadBalancer
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.103.43.207 <pending> 8080:30908/TCP 22h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h
通过–type=LoadBalancer flag来在群集外暴露Service,在支持负载均衡的云提供商上,将配置外部IP地址来访问Service。在Minikube上,该LoadBalancer type使服务可以通过minikube Service命令访问。
$ minikube service hello-node
该命令将打开浏览器,访问node应用
Pod日志查看方式
$ kubectl logs <POD-NAME>
response.end('Hello World Again!');
$ eval $(minikube docker-env)
$ docker build -t hello-node:v2 .
$ kubectl set image deployment/hello-node hello-node=hello-node:v2
$ minikube service hello-node
$ kubectl delete service hello-node
$ kubectl delete deployment hello-node
$ minikube stop