Hello-Minikube

概述

基础环境mac。在mac下的docker中是自带k8s的,但是由于网络原因,安装特别慢,本文介绍社区中另一版本Minikube的安装, 仅做笔记用。

Minikube是由Kubernetes社区维护的单机版的Kubernetes集群,支持macOS, Linux, and Windows等多种操作系统平台。

安装

安装kubectl

1
brew install kubectl

测试安装的版本是最新的

1
kubectl version --client

安装Minikube

1
brew install minikube

启动

1
minikube start --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

查看状态

1
minikube status

启动dashboard

1
minikube dashboard

使用Minikube

准备开始

本教程提供了从以下文件构建的容器镜像:

server.js

1
2
3
4
5
6
7
8
9
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);

Dockerfile

1
2
3
4
FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js

打包docker镜像

  1. 打包指令,注意.
1
docker build -t cuishiying/hello-node:v1 .
  1. 本地测试镜像是否ok
1
docker run -d -p 8080:8080 cuishiying/hello-node:v1

访问 http://localhost:8080/ 返回 Hello World!

  1. login后把镜像推送到仓库
1
docker push cuishiying/hello-node:v1

创建Deployment

Kubernetes Pod 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。本教程中的 Pod 只有一个容器。Kubernetes Deployment 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。Deployment 是管理 Pod 创建和扩展的推荐方法。

  1. 使用 kubectl create 命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker 镜像运行 Container。
1
kubectl create deployment hello-node --image=cuishiying/hello-node:v1
  1. 查看 Deployment:
1
kubectl get deployments
  1. 查看 Pod:
1
kubectl get pods
  1. 查看集群事件:
1
kubectl get events
  1. 查看 kubectl 配置:
1
kubectl config view

创建Service

默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。要使得 hello-node 容器可以从 Kubernetes 虚拟网络的外部访问,您必须将 Pod 暴露为 Kubernetes Service。

  1. 使用 kubectl expose 命令将 Pod 暴露给公网:
1
kubectl expose deployment hello-node --type=LoadBalancer --port=8080

The --type=LoadBalancer flag indicates that you want to expose your Service outside of the cluster.

  1. 查看您刚刚创建的服务:
1
kubectl get services

输出

1
2
3
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-node LoadBalancer 10.102.110.103 <pending> 8080:31863/TCP 47s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d1h

在支持负载均衡器的云服务提供商上,将提供一个外部 IP 来访问该服务。在 Minikube 上,LoadBalancer 使得服务可以通过命令 minikube service 访问。

  1. 运行下面的命令:
1
minikube service hello-node

输出

1
2
3
4
5
6
|-----------|------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|------------|-------------|---------------------------|
| default | hello-node | | http://192.168.64.2:31863 |
|-----------|------------|-------------|---------------------------|
🎉 正通过默认浏览器打开服务 default/hello-node...
  1. 显示有关 Service 的信息
1
kubectl get services hello-node
  1. 显示有关 Service 的详细信息
1
kubectl describe services my-service
  1. 如果您在 Minikube 上运行服务,您可以通过以下命令找到分配的 IP 地址和端口
1
minikube service hello-node --url

更新版本

1
2
3
docker build -t cuishiying/hello-node:v2 .
docker push cuishiying/hello-node:v2
kubectl set image deployment/hello-node hello-node=cuishiying/hello-node:v2

版本回滚

回滚到上一个版本

1
kubectl rollout undo deployment/hello-node

revision

1
2
kubectl rollout history deployment/hello-node
kubectl rollout undo deployment/hello-node --to-revision=3

启用插件

Minikube 有一组内置的插件,可以在本地 Kubernetes 环境中启用、禁用和打开。

  1. 列出当前支持的插件:
1
minikube addons list
  1. 启用插件,例如 heapster
1
minikube addons enable heapster
  1. 查看刚才创建的 Pod 和 Service:
1
kubectl get pod,svc -n kube-system
  1. 禁用 heapster:
1
minikube addons disable heapster

清理

现在可以清理您在集群中创建的资源:

1
2
kubectl delete service hello-node
kubectl delete deployment hello-node

可以停止 Minikube VM:

1
minikube stop

或者,删除 Minikube VM:

1
minikube delete

Rancher

  1. 安装
1
2
3
docker pull rancher/rancher:latest
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:latest
docker logs -f rancher

rancher自签名证书可以在hosts文件配置域名。

1
2
create_self-signed-cert.sh --ssl-domain=rancher.local.com --ssl-trusted-domain=rancher.local.com \
--ssl-trusted-ip=192.168.124.5 --ssl-size=2048 --ssl-date=3650

具体可参考官方文档 安装部分介绍。

  1. rancher导入minikube

导入后的样子是这样的,导入过程比较慢,会显示一直处于 pending 状态, 切莫着急。

  1. 用户空间

我们关心的是用户空间,因为我们部署的应用默认在这里

  1. rancher部署应用

之前我们通过k8s部署的 hello-node 先卸载了,重新通过 rancher 部署下应用。 点击右上角 部署服务

部署完成后如图。访问 http://192.168.64.2:30001/ 返回 Hello World!

  1. 升级应用版本

在刚才的页面点击右边隐藏按钮 升级,进入升级配置页面。

升级后测试ok。