kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制pod的具体状态和行为。
部分控制器类型如下:
ReplicationController、ReplicaSet 、Deployment
DaemonSet
StatefulSet
Job/CronJob
HorizontalPodAutoscaler
控制器:ReplicationController、ReplicaSet Deployment
• Replication Controller:副本控制器,对选择器的支持为KV值,键值对为:等于或不等于(selector = !=)
• ReplicaSet:副本控制集,和副本控制器的区别是:对选择器的支持集合式(selector 还支持in notin)。
• Deployment:比rs更高一级的控制器,除了有rs的功能之外,还有很多高级功能,,比如说最重要的:滚动升级、回滚等、扩容和缩容、暂停和继续Deployment
Deployment 提供了一种机制,方便用户通过自动(selector)的方式来管理 Pod 的生命周期,提供一种便捷的方式来解决应用的升级、回滚和扩容操作。
当我们期望对应用进行升级、回滚和扩容的时候,都会涉及到 Pod 的销毁和重建。在 Deployment 中可以描述我们期望 Pod 升级到的版本、回滚到的版本或者是期望扩容到的 Pod 的数量。
然后 Kubernetes 中的 Replication Controller 会执行我们的预期,让生产环境中的 Pod 状态和预期的状态一致
ReplicationController
#Replication Controller:副本控制器,对选择器的支持为KV值,键值对为:等于或不等于(selector = !=)
apiVersion: v1
kind: ReplicationController
metadata:
name: ng-rc
namespace: linux39
spec:
replicas: 2
selector:
app: ng-rc-80 #KV值
#app1: ng-rc-81
template:
metadata:
labels:
app: ng-rc-80
#app1: ng-rc-81
spec:
containers:
- name: ng-rc-80
image: nginx
ports:
- containerPort: 80
ReplicaSet
ReplicaSet:副本控制集,和副本控制器的区别是:对选择器的支持集合式(selector 还支持in notin)。
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: ng-rs
namespace: linux39
spec:
replicas: 3
selector:
#matchLabels:
# app: ng-rs-80
matchExpressions:
- {key: app, operator: In, values: [ng-rs-80,ng-rs-81]}
template:
metadata:
labels:
app: ng-rs-80
spec:
containers:
- name: ng-rs-80
image: nginx
ports:
- containerPort: 80
Deployment
Deployment:比rs更高一级的控制器,除了有rs的功能之外,还有很多高级功能,,比如说最重要的:滚动升级、回滚等、扩容和缩容、暂停和继续Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: linux39
spec:
replicas: 2
selector:
#app: ng-deploy-80 #rc支持
#matchLabels: #rs or deployment
# app: ng-deploy-80
matchExpressions:
#app指的是template: metadata:labels:下的app,即ng-deploy-80的键。
#operator 关键字
#In 相当于变量,后面有值。
- {key: app, operator: In, values: [ng-deploy-80,ng-rs-81]}
template:
metadata:
labels:
app: ng-deploy-80
spec:
containers:
- name: ng-deploy-80
image: nginx
ports:
- containerPort: 80
# 这就是说明selector为什么要跟模板中的lables一样,起到描述要创建的pod的作用
# Deployment 可以把之前通过手动管理 Pod 的操作管理起来,然后通过 Replication Controller 来自动执行这些过程