1. 简述
本篇文章主要讲解内容如下:
- 在
Kubernetes
运行应用流程。 - 学习涉及到的相关概念和术语。
2. 运行应用流程
在Docker
的世界中,调度的原子单位是容器;而在Kubernetes
的世界中,调度的原子单位是Pod
,应用都是运行在Pod
中,管理应用,就是在管理Pod
;用户无法直接在Kubernetes
集群中运行一个容器,容器必须并且总是需要在Pod
中才能运行。
2.1 创建Deployment
Kubernetes
通过各种Controller
来管理Pod
的生命周期。为了满足不同业务场景,Kubernetes
开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job
等多种Controller
。最常用的是Deployment
。
a. 编写配置
|
b. 创建资源
|
c. 访问资源
|
2.2 创建Service
在Kubernetes
中,Pod
是极不稳定的,随时可能会因为故障或者其他原因死掉,虽然每个Pod
都有IP
,但是当Controller
用新Pod
替代死掉的Pod
时,新Pod
会分配到新的IP
地址。这样就会产生了一个问题: 如果一组Pod对外提供服务(比如HTTP),它们的IP很有可能发生变化,那么客户端如何找到并访问这个服务呢?
Kubernetes给出的解决方案是Service。
a. 编写配置
|
b. 创建资源
|
c. 访问验证
|
d. 暴露外网访问
除了Cluster
内部可以访问Service
,很多情况下我们也希望应用的Service
能够暴露给Cluster
外部。Kubernetes
提供了多种类型的Service
,默认是ClusterIP
。我们可以修改类型为NodePort
,来实现外部访问。
修改配置文件:
|
覆盖发布:
|
master
节点ip是192.168.148.130
, 访问 http://192.168.148.130:30000
3. 概念
3.1 Pod
Kubernetes
并不直接运行容器,而是使用一个抽象的资源对象来封装一个或者多个容器,这个抽象即为Pod
,它也是Kubernete
s的最小调度单元。
同一Pod
中的容器共享网络名称空间和存储资源(Volume
),但彼此之间又在Mount、User及PID等名称空间上保持了隔离。
尽管Pod中可以包含多个容器,但是作为最小调度单元,它应该尽可能地保持“小”,**即通常只应该包含一个主容器**,以及必要的辅助型容器(sidecar)
3.2 Deployment
Deployment
是Kubernetes
控制器的一种实现,它构建于ReplicaSet
控制器之上,可为Pod
和ReplicaSet
资源提供声明式更新。相比较而言,Pod
和ReplicaSet
是较低级别的资源,它们很少被直接使用。
Deployment、ReplicaSet
和Pod
的关系如下图所示
Deployment
控制器资源的主要职责同样是为了保证Pod
资源的健康运行,其大部分功能均可通过调用ReplicaSet
控制器来实现,同时还增添了部分特性:
- 事件和状态查看:可以查看升级的详细进度和状态。
- 回滚:当升级
Pod
镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到指定的版本。 - 版本记录:每一次对
Deployment
的操作都能保存下来,给予后续可能的回滚使用。 - 暂停和启动:对于每一次升级,都能够随时暂停和启动。
- 多种自动更新方案:
Recreate
(重建更新):删除所有已存在的Pod
,重新创建新的。RollingUpdate
(滚动更新):逐步替换旧有的Pod
至新的版本。
3.3 Service
Service
是Kubernetes
的核心资源类型之一,通常可看作微服务的一种实现。事实上它是一种抽象:通过规则定义出由多个Pod
对象组合而成的逻辑集合,以及访问这组Pod
的策略。
Service
资源基于标签选择器将一组Pod
定义成一个逻辑组合,并通过自己的IP
地址和端口调度代理请求至组内的Pod
对象之上,如下图所示: