Kubernetes入门精简版 2.Minikube搭建 && Pod部署

3,764 阅读4分钟

创建、运行容器镜像

在控制台执行如下命令:

docker run busybox echo ”Hello world”

输出: image.png

其背后的原理: image.png

运行一个简单的 Node.js 应用

创建 app.js 和 Dockerfile 两个文件

app.js

const http = require('http');
const os = require('os');

console.log("Kubia server starting...");

var handler = function(request, response) {
  console.log("Received request from " + request.connection.remoteAddress);
  response.writeHead(200);
  response.end("You've hit " + os.hostname() + "\n");
};

var www = http.createServer(handler);
www.listen(8080);

这里在 8080 端口启动了一个 HTTP 服务器。服务器会以状态码 200 OK和文字 You've hit <hostname>来响应每个请求。

Dockerfile

FROM node:7 # from定义了基础镜像
ADD app.js /app.js #把app.js文件添加到镜像根目录
ENTRYPOINT ["node", "app.js"] #运行的命令

构建容器镜像并运行

docker build -t kubia .

image.png 构建过程不是由Docker客户端进行的, 而是将整个目录的文件上传到Docker 守护进程并在那里进行的。如果你在一台非Linux操作系统中使用Docker, 客户端就运行在你的宿主操作系统上,但是守护进程运行在一个虚拟机内。

提示:不要在构建目录中包含任何不需要的文件,这样会减慢构建的速度——尤其当Docker守护进程运行在一个远端机器的时候。

构建镜像时, Dockerfile 中每一条单独的指令都会创建一个新层,每一层可以被不同的镜像复用: image.png

使用命令: docker image 列出本地存储的镜像,你会看到刚创建的镜像信息

以下的命令可以用来运行镜像:

docker run --name kubia-container -p 8080:8080 -d kubia
命令说明
--name运行的容器名称
--d后台运行
-p本机端口 映射 容器内端口

现在试着通过 http://localhost:8080 访问你的应用

curl localhost:8080

配置 Minikube 运行单节点 Kubernetes 集群

使用Minikube是运行Kubernetes集群最简单、最快捷的途径。Minikube是一个构建单节点集群的工具,对于测试Kubernetes和本地开发应用都非常有用。

安装

可以参考官方提供的文档在你自己的平台上进行安装

启动

minikube start

这里很多人在启动的时候可能会遇到安装各种组件失败的情况,建议你可以使用如下命令进行

minikube start --memory=5700 --cpus=4 --registry-mirror=https://qe1j0wqo.mirror.aliyuncs.com --kubernetes-version=v1.19.0

指定代理和kubernets版本,后续重启也是用此命令启动即可。

image.png

查看集群信息:

kubectl cluster-info

image.png

可以运行 minikube ssh登录到 Minikube VM 并从内部探索它

在Kubernetes上运行第一个应用

部署 Node.js 应用

kubectl run kubia --image=luksa/kubia --port=8080

可以使用命令kubectl get po 或者 minikuebe dashboard 查看已经运行 pod。 image.png

介绍 Pod

它使用多个共存容器的理念。这组容器就叫作 pod。一个 pod 是一组紧密相关的容器,它们总是一起运行在同一个工作节点上,以及同一个 Linux 命名空间中。每个 pod 就像一个独立的逻辑机器,拥有自己的 IP、主机名、进程等,运行 一个独立的应用程序。

容器、 pod及物理工作节点之间的关系:

image.png

在 Kubernetes 中运行 luksa/kubia 容器镜像: image.png

访问Web应用

创建一个服务应用,作为访问 kubia 的网络连接入口:

kubectl expose po kubia --type=LoadBalancer --name kubia-http

但是 Minikube 不支持 LoadBalancer 类型的服务,因此服务不会有外部IP,所以无法直接访问应用。但是可以通过外部端口访问服务,在控制台执行以下命令:

minikube service kubia-http

image.png 此时会打开浏览器并访问 http://127.0.0.1:61478 获取响应内容

pod 的存在是短暂的,一个 pod 可能会在任何时候消失,或许因为它所在节点发生故障, 或许因为有人删除了 pod, 或者因为 pod 被从一个健康的节点剔除了。 当其中任何一种情况发生时,新的pod与替换它的pod具有不同的IP地址。这就是需要服务的地方。解决不断变化的 pod IP 地址的问题,以及在一个固定的 IP和端口 上对外暴露多个 pod。