Minikube体验
本文的环境如下:
操作系统: 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
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
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 控制台
minikube dashboard
随后浏览器中会自动打开这个界面。
使用
Minikube在本地虚拟机环境中部署 Kubernetes。
启动 Cluster
bogon:k8s rousseau$ minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
该命令创建并配置一个运行了单个Kubernetes节点的虚拟机。Minikube 启动过程中,可以用--extra-config=component.key=value
的形式给 Kubernetes 指定参数。
停止 Cluster
bogon:k8s rousseau$ minikube stop
删除 Cluster
bogon:k8s rousseau$ minikube delete
访问服务
minikube service [-n NAMESPACE] [--url] NAME
网络
前面的原理图说明了Minikube启动了一个虚拟机,这个虚拟机的地址是Host-Only的,要获得主机IP,执行。
bogon:k8s rousseau$ minikube ip
192.168.99.100
存储
简单的示例
构建一个 Node 服务
构建一个简单的Node网页程序,用户访问的时候输出hello world。
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查看效果
生成镜像
编写 Dockerfile 文件
FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
因为我们使用的是 Minikube ,不需要把镜像放到镜像仓库中,只需要放在Minikube VM中。
bogon:k8s rousseau$ eval $(minikube docker-env)
bogon:k8s rousseau$ docker build -t hello-node:v1 .
Sending build context to Docker daemon 3.072kB
Step 1/4 : FROM node:6.9.2
6.9.2: Pulling from library/node
75a822cd7888: Pull complete
57de64c72267: Pull complete
4306be1e8943: Pull complete
871436ab7225: Pull complete
0110c26a367a: Pull complete
1f04fe713f1b: Pull complete
ac7c0b5fb553: Pull complete
Digest: sha256:2e95be60faf429d6c97d928c762cb36f1940f4456ce4bd33fbdc34de94a5e043
Status: Downloaded newer image for node:6.9.2
---> faaadb4aaf9b
Step 2/4 : EXPOSE 8080
---> Running in a3229e6d0438
Removing intermediate container a3229e6d0438
---> f8e1aa12de28
Step 3/4 : COPY server.js .
---> 5254ea79c7a4
Step 4/4 : CMD node server.js
---> Running in 060ef7e6f713
Removing intermediate container 060ef7e6f713
---> 2fe0fd2e98d7
Successfully built 2fe0fd2e98d7
Successfully tagged hello-node:v1
部署
使用 kubectl
命令行部署应用。
bogon:k8s rousseau$ kubectl run hello-node --image=hello-node:v1 --port=8080
deployment.apps "hello-node" created
bogon:k8s rousseau$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-node 1 1 1 1 26s
bogon:k8s rousseau$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-658d8f6754-7mz28 1/1 Running 0 37s
Pods在Kubernetes中是一组容器的集合,在这个例子中只有一个容器实例,所以看到的各项统计数字都是1。
创建服务
默认情况下,Pod只能通过内部地址访问,为了让 hello-node 可以从外部访问,需要将Pod暴露为 Kubernetes 的服务。
bogon:k8s rousseau$ kubectl expose deployment hello-node --type=LoadBalancer
service "hello-node" exposed
bogon:k8s rousseau$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.108.143.198 <pending> 8080:32386/TCP 7s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1h
--type=LoadBalancer
参数表示我们希望将我们的服务暴露在外面,在云的环境中支持负载均衡情况下,只需要提供负载均衡的地址。在Minikube中,LoadBanlancer
类型让服务可以通过minikube service
来访问
minikube service hello-node
这个命令会自动打开浏览器窗口访问服务,使用本地IP。
更新应用
假设我们更新了应用,输出新的一段话。
response.end('Hello World Again!');
生成镜像
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
参考资料:
1、Minikube - Kubernetes本地实验环境
2、Hello Minikube
3、Running Kubernetes Locally via Minikube
4、Install Minikube
Minikube体验的更多相关文章
- minikube国内在线部署体验
问题描述: 快速学习k8s的各个组件的作用及yml的编写,minikube很适合. how to install Minikube, a tool that runs a single-node Ku ...
- Minikube之Win10单机部署
Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作.如果你曾经用过Docker部署容器,那么可以将Docker看成Kubernetes ...
- Kubernetes 笔记 02 demo 初体验
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 从前面的文章我 ...
- 安装指定版本的minikube
Minikube是什么? Kubernetes集群的安装和部署对于很多初学者来说是一道坎.为了方便大家开发和体验Kubernetes,Kubernetes开源社区提供了可以在本地部署的Minikube ...
- Minikube之Win10单机部署Kubernetes(k8s)自动化容器操作的开源平台
Minikube之Win10单机部署 Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作.如果你曾经用过Docker部署容器,那么可以 ...
- Minikube安装成功Kubernetes,一次过!
介绍 Minikube 是 K8S 官方为了开发者能在个人电脑上运行 K8S 而提供的一套工具.实现上是通过 Go 语言编写,通过调用虚拟化管理程序,创建出一个运行在虚拟机内的单节点集群. 注:从这里 ...
- containerd 与安全沙箱的 Kubernetes 初体验
作者 | 易立 阿里云资深技术专家 containerd 是一个开源的行业标准容器运行时,关注于简单.稳定和可移植,同时支持 Linux 和 Windows. 2016 年 12 月 14 日,Do ...
- kubeadm搭建K8s集群及Pod初体验
基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...
- K8S Kubernetes 简单介绍 转自 http://time-track.cn/kubernetes-trial.html Kubernetes初体验
这段时间学习了一下 git jenkins docker 最近也在看 Kubernetes 感觉写得很赞 也是对自己对于K8S 有了进一步得理解 感谢 倪 大神得Blog 也希望看到这篇Bl ...
随机推荐
- FileSystemResource在Srping FrameWork 5中的变化
之前在项目中一直使用FileSystemResource这个类作为PropertyPlaceholderConfigurer的Resource引入部署目录外的配置文件,并设置了setIgnoreRes ...
- 自定义yum源
1.创建rpm包的存放目录 mkdir -p /yum/yum-sum/package 2.准备rpm包,可以通过自带yum只下载不安装工具下载 yum install --downloadon ...
- 【LOJ】#2079. 「JSOI2016」轻重路径
题解 写数据结构的时候我代码就会变得非常非常长 一看别人1.5K 2.3K 我6.3K-- orzzzzz 我们很容易想到离线倒着插入,然而,有个小锅叫如果size相同保持原来的重儿子不变 我们需要写 ...
- linux入门系列
Linux基础入门 常用Linux命令 linux学习笔记-1.man_page linux学习笔记-2.常用命令 linux学习笔记-3.文件相关命令 linux学习笔记-4.系统命令 linux学 ...
- SDC信息统计分析系统ETL工具的研究与实现[专业:计算机应用技术]
SDC信息统计分析系统ETL工具的研究与实现[专业:计算机应用技术] http://www.docin.com/p-265530271.html
- 1,EasyNetQ-链接到RabbitMQ
一.链接到RabbitMQ 1,创建连接 注意不能有空格 var bus = RabbitHutch.CreateBus(“host=myServer;virtualHost=myVirtualHos ...
- python中关于if-else使用性能的一点感悟
今天做leetcode第7题关于数字倒序的问题,分别使用如下程序:(72ms) class Solution: def reverse(self, x): """ :ty ...
- mysql索引原理剖析
一.索引的原理 所谓索引,即是快速定位与查找,那么索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(B+树相比B树,其非叶子节点占用更小的空间,可以有更多非叶子节点存放在再内存中,减少大量的IO ...
- IllegalArgumentException: Unmatched braces in the pattern.
IllegalArgumentException: Unmatched braces in the pattern. 非法参数异常. 不匹配的 吊带 在 样品 中. === 没有管. 项目一直卡在d ...
- SPFA算法 O(kE)
主要思想是: 初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将其入队.直到队列为空时算法结束. 这个算法,简单的说就是队列优化 ...