本文的环境如下:
操作系统: Mac OSX EI Caption
Docker:Docker version 18.03.1-ce, build 9ee9f40
Minikube:minikube version: v0.27.0
Kubernetes: v1.10.0
Minikube 介绍
Minikube支持Kubenetes的以下特性:
- DNS
- NodePorts
- ConfigMaps and Secrets
- Dashboards
- Container Runtime: Docker, rkt and CRI-O
- Enabling CNI (Container Network Interface)
- Ingress
Minikube 安装
因为 Google 在国内没办法访问,我使用了阿里版的 Minikube 。
Minikube运行要求安装有VirtualBox或VMWare Fusion,我用的是VirtualBox。
VirtualBox安装很简单,从官方下载DMG安装即可。
下载安装 Minikube
1 | curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v0.27.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ |
启动 Minikube
1 | minikube start --registry-mirror=https://registry.docker-cn.com |
如果你遇到这个错误,Error restarting cluster: restarting kube-proxy: waiting for kube-proxy to be up for configmap update: timed out waiting for the condition
通过 minikube delete,minikube start 可以解决
打开 Minikube 控制台
1 | minikube dashboard |
随后浏览器中会自动打开这个界面。
使用
Minikube在本地虚拟机环境中部署 Kubernetes。
启动 Cluster
1 | bogon:k8s rousseau$ minikube start |
该命令创建并配置一个运行了单个Kubernetes节点的虚拟机。Minikube 启动过程中,可以用--extra-config=component.key=value
的形式给 Kubernetes 指定参数。
停止 Cluster
1 | bogon:k8s rousseau$ minikube stop |
删除 Cluster
1 | bogon:k8s rousseau$ minikube delete |
访问服务
1 | minikube service [-n NAMESPACE] [--url] NAME |
网络
前面的原理图说明了Minikube启动了一个虚拟机,这个虚拟机的地址是Host-Only的,要获得主机IP,执行。
1 | bogon:k8s rousseau$ minikube ip |
存储
简单的示例
构建一个 Node 服务
构建一个简单的Node网页程序,用户访问的时候输出hello world。
1 | var http = require('http'); |
可以在终端中执行node server.js
并通过 http://localhost:8080 查看效果
生成镜像
编写 Dockerfile 文件
1 | FROM node:6.9.2 |
因为我们使用的是 Minikube ,不需要把镜像放到镜像仓库中,只需要放在Minikube VM中。
1 | bogon:k8s rousseau$ eval $(minikube docker-env) |
部署
使用kubectl
命令行部署应用。
1 | bogon:k8s rousseau$ kubectl run hello-node --image=hello-node:v1 --port=8080 |
Pods在Kubernetes中是一组容器的集合,在这个例子中只有一个容器实例,所以看到的各项统计数字都是1。
创建服务
默认情况下,Pod只能通过内部地址访问,为了让 hello-node 可以从外部访问,需要将Pod暴露为 Kubernetes 的服务。
1 | bogon:k8s rousseau$ kubectl expose deployment hello-node --type=LoadBalancer |
1 | ```bash |
这个命令会自动打开浏览器窗口访问服务,使用本地IP。
更新应用
假设我们更新了应用,输出新的一段话。
1 | response.end('Hello World Again!'); |
生成镜像
1 | docker build -t hello-node:v2 . |
更新部署
1 | kubectl set image deployment/hello-node hello-node=hello-node:v2 |
查看更新
1 | minikube service hello-node |
销毁服务
1 | kubectl delete service hello-node |
参考资料:
1、Minikube - Kubernetes本地实验环境
2、Hello Minikube
3、Running Kubernetes Locally via Minikube
4、Install Minikube