k8s学习之路 | Day17 k8s 工作负载
官方参考链接:https://kubernetes.io/docs/concepts/workloads/podsPodcontainers工作负载是在 k8s上运行的应用程序相对来说,一个应用程序又很复杂,可能由一个或者多个组件共同协同完成,这种情况我们都可以用一组Pod来表示一个应用,也就是一个工作负载之前我们学到的内容来看,Pod遵循预定义的生命周期,如果Pod所在节点出现致命错误,该节点上
工作负载的定义
官方参考链接:https://kubernetes.io/docs/concepts/workloads/
A workload is an application running on Kubernetes. Whether your workload is a single component or several that work together, on Kubernetes you run it inside a set of pods. In Kubernetes, a
Pod
represents a set of running containers on your cluster.
- 工作负载是在 k8s上运行的应用程序
- 相对来说,一个应用程序又很复杂,可能由一个或者多个组件共同协同完成,这种情况我们都可以用一组
Pod
来表示一个应用,也就是一个工作负载 - 之前我们学到的内容来看,
Pod
遵循预定义的生命周期,如果Pod
所在节点出现致命错误,该节点上所有的Pod
状态都会失败,即使这个节点恢复正常了,也是需要创建新的Pod
来恢复应用
打个比方
我这里有二个Pod
#####1
apiVersion: v1
kind: Pod
metadata:
name: pod-demo1
labels:
app: MYAPP
spec:
containers:
- name: pod-demo1
image: nginx
#####2
apiVersion: v1
kind: Pod
metadata:
name: pod-demo2
labels:
app: MYAPP
spec:
containers:
- name: pod-demo2
image: nginx
我现在重启 k8s-02 节点:
重启后发现Pod
能够在这种情况下自愈,但是IP地址发生了改变,相应的,如果我们直接使用Pod
来跑我们的业务,就会存在很多问题了
- 所以为了减轻使用的负担,通常我们不会去直接管理每一个
Pod
,而是使用【工作负载】资源来管理一组Pod
,这些工作负载资源通过配置控制器来确保正确类型、处于运行状态的Pod
个数是正确的,与用户的期望状态保持高度一致
工作负载资源分类
-
Deployment
和ReplicaSet
(替换原来的资源 ReplicationController)。Deployment
很适合用来管理你的集群上的无状态应用,``Deployment中的所有
Pod` 都是相互等价的,并且在需要的时候被替换 -
StatefulSet
让你能够运行一个或者多个以某种方式跟踪应用状态的Pod
。 例如,如果你的负载会将数据作持久存储,你可以运行一个StatefulSet
,将每个Pod
与某个PersistentVolume
对应起来。你在StatefulSet
中各个Pod
内运行的代码可以将数据复制到同一StatefulSet
中的其它Pod
中以提高整体的服务可靠性 -
DaemonSet
定义提供节点本地支撑设施的Pod
。这些Pod
可能对于你的集群的运维是非常重要的,例如作为网络链接的辅助工具或者作为网络插件的一部分等等。每次你向集群中添加一个新节点时,如果该节点与某DaemonSet
的规约匹配,则控制平面会为该DaemonSet
调度一个Pod
到该新节点上运行 -
Job
和CronJob
。 定义一些一直运行到结束并停止的任务。``Job用来执行一次性任务,而
CronJob` 用来执行的根据时间规划反复运行的任务。 -
在庞大的 k8s 生态系统中,还可以找到一些提供额外操作的第三方工作负载相关的资源。 通过使用定制资源定义(CRD), 可以添加第三方工作负载资源,以完成原本不是 k8s 核心功能的工作。 例如,如果希望运行一组
Pod
,但要求所有Pod
都可用时才执行操作 (比如针对某种高吞吐量的分布式任务),可以基于定制资源实现一个能够满足这一需求的扩展, 并将其安装到集群中运行。
更多推荐
所有评论(0)