控制器:实现pod的自动部署,维护,扩容等
Deployment
DaemonSet
Job/CronJob
高级控制器:有状态的应用,连接到指定的服务,
StatefulSet:解决pod的创建顺序,解决pod的访问问题
HPA
一.Deployment:(ReplicaSet和pod)
功能:pod自动部署,维护,更新,版本回滚
1.1 Deployment资源清单文件
---
kind: Deployment # 资源对象类型
apiVersion: apps/v1 # 版本
metadata: # 元数据
name: mydeploy # 名称
spec: # 详细定义
replicas: 3 # 副本数量
selector: # 定义标签选择器
matchLabels: # 支持 matchExpressions 表达式语法
app: deploy-httpd # 通过标签来确定那个 Pod 由它来管理
template: # 定义用来创建 Pod 的模板,以下为 Pod 定义
metadata:
labels:
app: deploy-httpd
spec:
containers:
- name: web
image: myos:httpd
1.2 容器内的高可用搭建(service+deployment)
service --- pod ---- deployment
srvice:
---
kind: Service
apiVersion: v1
metadata:
name: mysvc
spec:
type: NodePort
selector:
app: deploy-httpd #标签匹配pod
ports:
- protocol: TCP
port: 80
nodePort: 30080
targetPort: 80
deployment:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mydeploy
spec:
replicas: 3
selector:
matchLabels:
app: deploy-httpd #标签匹配pod
template: #pod的模板
metadata:
labels:
app: deploy-httpd #标签匹配pod
spec:
containers:
- image: myos:httpd
name: web
1.3 集群的扩缩容(scale)
kubectl scale 资源类型 资源名称 --replicas 副本数量
kubectl scale deployment mydeploy --replicas 10
1.4 更新pod的镜像
#template下添加参数:
imagePullPolicy: Always(镜像仓库下载) | 本地缓存 | 优先仓库下载
#更新镜像,滚动更新集群,使用新的镜像替换pod里面指定的镜像
[root@master ~]# kubectl set image deployment mydeploy web=myos:nginx
#查看历史版本信息
kubectl rollout history 资源类型 资源名称
kubectl rollout history deployment(资源类型) mydeploy(名称)
#给版本添加注释信息添加注释信息:
kubectl annotate 资源类型 资源名称 kubernetes.io/change-cause="版本信息"
kubectl annotate deployments mydeploy kubernetes.io/change-cause="httpd.v1"
#镜像更新原理:
重建式更新:创建一个replicaset,然后通过replicaset区重建pod,干掉一个更新一个,不占用系统资源,但更新时间慢
滚动式更新:通过设置的超量和最少数量,使用replicaset进行pod的删除和更新,占用资源大,速度快.
1.5 历史版本与回滚
kubectl rollout undo 资源类型 资源名称 --to-version 版本号
kubectl rollout undo deployment mydeploy --to-revision 1(版本号)
二.DaenonSet:所创建的pod与node节点绑定,每个node上都会运行一个pod,无法自定义副本数量(例如创建kubeproxy等资源).
资源清单文件的编写,通过对deployment进行修改(删除副本数量)
---
kind: DaemonSet # 资源对象类型
apiVersion: apps/v1
metadata:
name: myds # 控制器名称
spec:
selector:
matchLabels:
app: ds-httpd # 修改标签防止冲突
template:
metadata:
labels:
app: ds-httpd # 修改标签防止冲突
spec:
containers:
- name: web
image: myos:httpd
imagePullPolicy: Always
三.Job/CronJob:单任务控制器,负责执行一次任务,保证任务在一个或多个pod上执行成功
3.1 Job
保证pod成功执行:
---
kind: Job
apiVersion: batch/v1
metadata:
name: myjob
spec:
template: # 以下定义 Pod 模板
metadata: {}
spec:
restartPolicy: OnFailure
containers:
- name: myjob
image: myos:8.5
command: ["/bin/sh"]
args:
- -c
- |
sleep 3
exit $((RANDOM%2)) 0为正常
3.2 CronJob:计划任务控制器(带有计划任务的job),根据计划任务创建job和pod
---
kind: CronJob
apiVersion: batch/v1
metadata:
name: mycj
spec:
schedule: "* * * * *" #时间计划
jobTemplate: #定义Job模板
metadata: {}
spec:
template: #定义pod模板
metadata: {}
spec:
restartPolicy: OnFailure
containers:
- name: myjob
image: myos:8.5
command: ["/bin/sh"]
args:
- -c
- |
sleep 3
exit $((RANDOM%2))
四.StatefulSet:解决pod的创建顺序,解决pod的访问问题
通过Headless存储pod的ip,实现访问指定的pod
4.1 工作原理:StatefulSet -- pod -- Headless:存储pod的ip(Service) <--client
4.2 创建Headless,利用service资源清单文件
---
kind: Service
apiVersion: v1
metadata:
name: stssvc # 服务名称
spec:
type: ClusterIP
clusterIP: None # 设置 IP 为 None
selector:
app: sts-httpd # 设置 Pod 标签
ports:
- protocol: TCP
port: 80
targetPort: 80
利用deployment创建StatefulSet
---
kind: StatefulSet # 资源对象类型
apiVersion: apps/v1
metadata:
name: mysts # 控制器名称
spec:
serviceName: stssvc # 新增 headless 服务名称
replicas: 3
selector:
matchLabels:
app: sts-httpd # 修改标签防止冲突
template:
metadata:
labels:
app: sts-httpd # 修改标签防止冲突
spec:
containers:
- name: web
image: myos:httpd
4.3 通过(pod名称.service资源名称)访问指定的容器服务
进入某个容器: curl http://mysts-0.stssvc
通过service资源名称访问,实现负载均衡:curl http://stssvc
五.HPA弹性控制器:监控控制器,实现集群的自动扩缩容
设置控制器:
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: mydeploy
spec:
replicas: 1
selector:
matchLabels:
app: deploy-httpd
template:
metadata:
labels:
app: deploy-httpd
spec:
containers:
- name: web
image: myos:httpd
resources: # 为该资源设置配额
requests: # HPA 控制器会根据配额使用情况伸缩集群
cpu: 300m # CPU 配额
---
kind: Service #负载均衡
apiVersion: v1
metadata:
name: websvc
spec:
type: ClusterIP
clusterIP: 10.245.1.80
selector:
app: deploy-httpd
ports:
- protocol: TCP
port: 80
targetPort: 80
HPA 控制器:
---
kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2
metadata:
name: myhpa
spec:
behavior: # 窗口稳定期,这个期间的资源变化
scaleDown:
stabilizationWindowSeconds: 60
scaleTargetRef: # 指定控制器
kind: Deployment
apiVersion: apps/v1
name: mydeploy
minReplicas: 1 # 副本数量
maxReplicas: 3
metrics: # 扩缩容设置
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 #百分比,节点超过设置的cpu资源的百分之50,则扩容节点,平均资源小于值,缩容
控制器:实现pod的自动部署,维护,扩容等
Deployment
DaemonSet
Job/CronJob
高级控制器:有状态的应用,连接到指定的服务,
StatefulSet:解决pod的创建顺序,解决pod的访问问题
HPA
一.Deployment:(ReplicaSet和pod)
功能:pod自动部署,维护,更新,版本回滚
1.1 Deployment资源清单文件
---
kind: Deployment # 资源对象类型
apiVersion: apps/v1 # 版本
metadata: # 元数据
name: mydeploy # 名称
spec: # 详细定义
replicas: 3 # 副本数量
selector: # 定义标签选择器
matchLabels: # 支持 matchExpressions 表达式语法
app: deploy-httpd # 通过标签来确定那个 Pod 由它来管理
template: # 定义用来创建 Pod 的模板,以下为 Pod 定义
metadata:
labels:
app: deploy-httpd
spec:
containers:
- name: web
image: myos:httpd
1.2 容器内的高可用搭建(service+deployment)
service --- pod ---- deployment
srvice:
---
kind: Service
apiVersion: v1
metadata:
name: mysvc
spec:
type: NodePort
selector:
app: deploy-httpd #标签匹配pod
ports:
- protocol: TCP
port: 80
nodePort: 30080
targetPort: 80
deployment:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mydeploy
spec:
replicas: 3
selector:
matchLabels:
app: deploy-httpd #标签匹配pod
template: #pod的模板
metadata:
labels:
app: deploy-httpd #标签匹配pod
spec:
containers:
- image: myos:httpd
name: web
1.3 集群的扩缩容(scale)
kubectl scale 资源类型 资源名称 --replicas 副本数量
kubectl scale deployment mydeploy --replicas 10
1.4 更新pod的镜像
#template下添加参数:
imagePullPolicy: Always(镜像仓库下载) | 本地缓存 | 优先仓库下载
#更新镜像,滚动更新集群,使用新的镜像替换pod里面指定的镜像
[root@master ~]# kubectl set image deployment mydeploy web=myos:nginx
#查看历史版本信息
kubectl rollout history 资源类型 资源名称
kubectl rollout history deployment(资源类型) mydeploy(名称)
#给版本添加注释信息添加注释信息:
kubectl annotate 资源类型 资源名称 kubernetes.io/change-cause="版本信息"
kubectl annotate deployments mydeploy kubernetes.io/change-cause="httpd.v1"
#镜像更新原理:
重建式更新:创建一个replicaset,然后通过replicaset区重建pod,干掉一个更新一个,不占用系统资源,但更新时间慢
滚动式更新:通过设置的超量和最少数量,使用replicaset进行pod的删除和更新,占用资源大,速度快.
1.5 历史版本与回滚
kubectl rollout undo 资源类型 资源名称 --to-version 版本号
kubectl rollout undo deployment mydeploy --to-revision 1(版本号)
二.DaenonSet:所创建的pod与node节点绑定,每个node上都会运行一个pod,无法自定义副本数量(例如创建kubeproxy等资源).
资源清单文件的编写,通过对deployment进行修改(删除副本数量)
---
kind: DaemonSet # 资源对象类型
apiVersion: apps/v1
metadata:
name: myds # 控制器名称
spec:
selector:
matchLabels:
app: ds-httpd # 修改标签防止冲突
template:
metadata:
labels:
app: ds-httpd # 修改标签防止冲突
spec:
containers:
- name: web
image: myos:httpd
imagePullPolicy: Always
三.Job/CronJob:单任务控制器,负责执行一次任务,保证任务在一个或多个pod上执行成功
3.1 Job
保证pod成功执行:
---
kind: Job
apiVersion: batch/v1
metadata:
name: myjob
spec:
template: # 以下定义 Pod 模板
metadata: {}
spec:
restartPolicy: OnFailure
containers:
- name: myjob
image: myos:8.5
command: ["/bin/sh"]
args:
- -c
- |
sleep 3
exit $((RANDOM%2)) 0为正常
3.2 CronJob:计划任务控制器(带有计划任务的job),根据计划任务创建job和pod
---
kind: CronJob
apiVersion: batch/v1
metadata:
name: mycj
spec:
schedule: "* * * * *" #时间计划
jobTemplate: #定义Job模板
metadata: {}
spec:
template: #定义pod模板
metadata: {}
spec:
restartPolicy: OnFailure
containers:
- name: myjob
image: myos:8.5
command: ["/bin/sh"]
args:
- -c
- |
sleep 3
exit $((RANDOM%2))
四.StatefulSet:解决pod的创建顺序,解决pod的访问问题
通过Headless存储pod的ip,实现访问指定的pod
4.1 工作原理:StatefulSet -- pod -- Headless:存储pod的ip(Service) <--client
4.2 创建Headless,利用service资源清单文件
---
kind: Service
apiVersion: v1
metadata:
name: stssvc # 服务名称
spec:
type: ClusterIP
clusterIP: None # 设置 IP 为 None
selector:
app: sts-httpd # 设置 Pod 标签
ports:
- protocol: TCP
port: 80
targetPort: 80
利用deployment创建StatefulSet
---
kind: StatefulSet # 资源对象类型
apiVersion: apps/v1
metadata:
name: mysts # 控制器名称
spec:
serviceName: stssvc # 新增 headless 服务名称
replicas: 3
selector:
matchLabels:
app: sts-httpd # 修改标签防止冲突
template:
metadata:
labels:
app: sts-httpd # 修改标签防止冲突
spec:
containers:
- name: web
image: myos:httpd
4.3 通过(pod名称.service资源名称)访问指定的容器服务
进入某个容器: curl http://mysts-0.stssvc
通过service资源名称访问,实现负载均衡:curl http://stssvc
五.HPA弹性控制器:监控控制器,实现集群的自动扩缩容
设置控制器:
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: mydeploy
spec:
replicas: 1
selector:
matchLabels:
app: deploy-httpd
template:
metadata:
labels:
app: deploy-httpd
spec:
containers:
- name: web
image: myos:httpd
resources: # 为该资源设置配额
requests: # HPA 控制器会根据配额使用情况伸缩集群
cpu: 300m # CPU 配额
---
kind: Service #负载均衡
apiVersion: v1
metadata:
name: websvc
spec:
type: ClusterIP
clusterIP: 10.245.1.80
selector:
app: deploy-httpd
ports:
- protocol: TCP
port: 80
targetPort: 80
HPA 控制器:
---
kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2
metadata:
name: myhpa
spec:
behavior: # 窗口稳定期,这个期间的资源变化
scaleDown:
stabilizationWindowSeconds: 60
scaleTargetRef: # 指定控制器
kind: Deployment
apiVersion: apps/v1
name: mydeploy
minReplicas: 1 # 副本数量
maxReplicas: 3
metrics: # 扩缩容设置
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 #百分比,节点超过设置的cpu资源的百分之50,则扩容节点,平均资源小于值,缩容