Kubernetes in Action 笔记 —— 部署第一个应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes in Action 笔记 —— 部署第一个应用相关的知识,希望对你有一定的参考价值。

参考技术A

Minikube 是一个能够在本地环境搭建 Kubernetes 集群的工具,支持 Windows、Linux 和 MacOS 等平台,由 Kubernetes 社区进行维护。
它通常在 Linux 虚拟机中运行 Kubernetes。如果宿主机是基于 Linux 的系统,也可以通过 Docker 实现。
即为了运行 Minikube,需要先安装 Hypervisor 比如 Virtualbox;对于 Linux 系统,也可以直接使用 Docker。

具体的安装配置步骤可以参考官方文档 Getting Started Guide 。

kubectl 是一个命令行工具,能够向 Kubernetes 集群发送命令并执行,支持的功能包括部署应用、查询和管理资源、查看日志等。
安装步骤可参考官方文档 Install Tools 。

通常情况下,部署应用时要准备一个 JSON 或者 YAML 文件,里面包含对该应用的所有组件的描述信息,再把该描述文件应用到 Kubernetes 集群。
从演示的角度来看,也可以通过单行命令的方式部署简单的应用。

可以使用 kubectl create deployment 命令部署应用。

其中 kubia 表示创建的 deployment 对象的名称, luksa/kubia:1.0 指代需要使用的容器镜像。

kubia 对象的存在告诉 Kubernetes luksa/kubia:1.0 容器必须运行在集群中。它定义了一种用户期待的状态,而 Kubernetes 负责确保实际的状态一定会满足该期望。

kubectl get deployment 命令可以列出当前集群中存在的所有 deployment 对象及其状态。

容器并不是 Kubernetes 中部署的最小单位。不同于直接部署独立的容器,Kubernetes 实际上会部署一组相互关联的容器,称为 pod
pod 包含一组一个或一个以上关系密切的容器实例,同时运行在同一个工作节点上,并共享特定的 Linux 命名空间。
同一个 pod 中的容器共享相同的网络和 UTS 命名空间,因而共享同样的网络接口、IP 地址、端口空间和主机名等。也可以在描述文件中定义其他需要共享的命名空间。

每个 pod 都有自己的 IP、机器名、进程、网络接口以及其他资源。同一个 pod 中的容器都会将自己看作是 pod 中唯一运行的容器,它们并不能看到其他容器中的进程。

创建 Deployment 对象后就表示已经部署了 pod,Kubernetes 会基于 Deployment 对象创建一个或多个 pod。
可以使用 kubectl get pods 来列出系统中的 pod:

如果某些 issue 导致 pod 运行失败,或者单纯想查看更多 pod 相关的信息,可以使用 kubectl describe pod 命令:

输出的最后就包含 pod 创建和启动时触发的一系列事件(Events)。

应用已经成功运行了,接下来就是控制它如何被外部访问。每个 pod 都会获得一个专属的 IP 地址,但该地址是只有集群内部可见的。为了使 pod 能够从外部访问,还需要创建一个 Service 对象。

Service 对象有好几种类型,其中一种 LoadBalancer 会生成一个外部的负载均衡器,令服务能够从集群外部访问。
可以使用 kubectl expose 命令创建 Service:

使用 kubectl get svc 命令查看当前系统中存在的 Service:

创建 LoadBalancer 服务时,正常情况下 Kubernetes 会访问云服务提供商,令其创建负载均衡器并获取公共 IP。
Minikube 是本地模拟的集群环境,因而无法完成上述操作。kubia Service 的 EXTERNAL-IP 会一直处于 <pending> 状态。

在没有获取到外部 IP 的情况下,minikube 可以使用下面的方法获取服务的 url:

打开一个新的命令行窗口,可以成功访问上面的 url:

在容器中部署应用的一个主要好处就是,横向扩展应用变得非常简单和直观。
可以使用下列命令扩展 kubia 应用,令其同时运行 3 个实例副本。

此时共有 3 个 pod 实例运行:

可以加上 -o wide 选项获取更详细的 pods 信息,比如 IP、运行的节点等:

再次访问 Service 的 URL,可以看到多次访问返回的信息并不一样,可以证实后台提供服务的 pod 并不是同一个,而是 3 个 pod 轮流接收请求并提供服务:

负载均衡架构示意图:

Kubernetes in Action, Second Edition

以上是关于Kubernetes in Action 笔记 —— 部署第一个应用的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes in Action 笔记 —— 部署第一个应用

Kubernetes In Action :2开始使用Kubernetes和Docker

Kubernetes In Action :2开始使用Kubernetes和Docker

Kubernetes In Action :2开始使用Kubernetes和Docker

Kubernetes In Action :1Kubernetes介绍

Kubernetes In Action :1Kubernetes介绍