文章目录
展开Kubernetes-Controller 控制器
控制器 Controller
控制器的作用
1.pod类型的资源,删除pod后,不会重建
2.替用户监视并保证相应的节点上始终有用户所期望的副本数量的pod在运行
3.如果所运行的pod副本数超过了用户期望的,那么控制器就会删掉,直到和用户期望的一致
4.如果所运行的pod副本数低于用户期望的,那么控制器就会创建,直到和用户期望的一致
控制器类型
RC: 标准控制器
RS(ReplicaSet): 按用户期望的副本创建Pod,并始终保持相应数量的副本
Deployment:
1)控制RS来保证Pod始终保持相应的数量副本
2)滚动更新,回滚,回滚默认保留10个版本
3)声明式配置,支持动态修改
4)管理无状态应用最理想的控制器
5)de节点可能会运行0个或多个pod
DaemonSet: 一个节点只运行一个,必须是始终运行的状态(例:kube-proxy,zabbix-agent)
StatefullSet: 有状态的应用
RS 控制器
# rs控制器创建5个nginx的pod示例
[root@master-1 ~]# vim rs-nginx.yml
apiVersion: apps/v1 ## apiVersion接口除了pod的接口还加上了RS控制器的接口
kind: ReplicaSet ## kind资源类型指定为要使用的控制器
metadata: ## 那这里的metadata就是给这个RS控制器定义内容
labels: ## RS控制器定义标签
app: nginx-rs
name: nginx-controller-rs ## RS控制器的名字 pod的名字就是这个名字+随机数
spec: ## 定义资源
replicas: 5 ## replicas指定启动的服务的个数
selector:
matchLabels: ## 定义一个pod的标签 下面的Pod指定这个标签 连接并让控制器管理
nginx: nginx
template: ## RS控制器通过用template来包含之前pod的配置
metadata:
name: nginx-pod-rs
labels:
nginx: nginx ## 这里指定上面的RS控制器的标签
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 纯净版示例
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: nginx-rs
name: nginx-controller-rs
spec:
replicas: 5
selector:
matchLabels:
nginx: nginx
template:
metadata:
name: nginx-pod-rs
labels:
nginx: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 运行
[root@master-1 ~]# kubectl apply -f rs-nginx.yml
replicaset.apps/nginx-controller-rs created
# 查看nginx
[root@master-1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-controller-rs-hf7gr 1/1 Running 0 20s
nginx-controller-rs-thqq9 1/1 Running 0 20s
nginx-controller-rs-w7dhd 1/1 Running 0 20s
nginx-controller-rs-wk9px 1/1 Running 0 20s
nginx-controller-rs-x54kj 1/1 Running 0 20s
# 查看控制器
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 5 5 5 5m8s
# 扩缩容(法一:资源清单修改)
[root@master-1 ~]# vim rs-nginx.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: nginx-rs
name: nginx-controller-rs
spec:
## 修改为3个
replicas: 3
selector:
matchLabels:
nginx: nginx
template:
metadata:
name: nginx-pod-rs
labels:
nginx: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
[root@master-1 ~]# kubectl apply -f rs-nginx.yml
replicaset.apps/nginx-controller-rs configured
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 3 3 3 7m5s
# 扩缩容(法二:kube命令修改)
[root@master-1 ~]# kubectl edit rs nginx-controller-rs
## 扩容为6个
replicas: 6
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 6 6 6 9m33s
# 简单方法的扩缩容(rs)
[root@master-1 ~]# kubectl scale rs nginx-controller-rs --replicas=10
replicaset.apps/nginx-controller-rs scaled
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 10 10 10 10m
Deployment 控制器(运用的比较多,实践工作中看需求)
1.pod类型的资源,删除pod后,不会重建
2.替用户监视并保证相应的节点上始终有用户所期望的副本数量的pod在运行
3.如果所运行的pod副本数超过了用户期望的,那么控制器就会删掉,直到和用户期望的一致
4.如果所运行的pod副本数低于用户期望的,那么控制器就会创建,直到和用户期望的一致
RC: 标准控制器
RS(ReplicaSet): 按用户期望的副本创建Pod,并始终保持相应数量的副本
Deployment:
1)控制RS来保证Pod始终保持相应的数量副本
2)滚动更新,回滚,回滚默认保留10个版本
3)声明式配置,支持动态修改
4)管理无状态应用最理想的控制器
5)de节点可能会运行0个或多个pod
DaemonSet: 一个节点只运行一个,必须是始终运行的状态(例:kube-proxy,zabbix-agent)
StatefullSet: 有状态的应用
RS 控制器
# rs控制器创建5个nginx的pod示例
[root@master-1 ~]# vim rs-nginx.yml
apiVersion: apps/v1 ## apiVersion接口除了pod的接口还加上了RS控制器的接口
kind: ReplicaSet ## kind资源类型指定为要使用的控制器
metadata: ## 那这里的metadata就是给这个RS控制器定义内容
labels: ## RS控制器定义标签
app: nginx-rs
name: nginx-controller-rs ## RS控制器的名字 pod的名字就是这个名字+随机数
spec: ## 定义资源
replicas: 5 ## replicas指定启动的服务的个数
selector:
matchLabels: ## 定义一个pod的标签 下面的Pod指定这个标签 连接并让控制器管理
nginx: nginx
template: ## RS控制器通过用template来包含之前pod的配置
metadata:
name: nginx-pod-rs
labels:
nginx: nginx ## 这里指定上面的RS控制器的标签
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 纯净版示例
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: nginx-rs
name: nginx-controller-rs
spec:
replicas: 5
selector:
matchLabels:
nginx: nginx
template:
metadata:
name: nginx-pod-rs
labels:
nginx: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 运行
[root@master-1 ~]# kubectl apply -f rs-nginx.yml
replicaset.apps/nginx-controller-rs created
# 查看nginx
[root@master-1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-controller-rs-hf7gr 1/1 Running 0 20s
nginx-controller-rs-thqq9 1/1 Running 0 20s
nginx-controller-rs-w7dhd 1/1 Running 0 20s
nginx-controller-rs-wk9px 1/1 Running 0 20s
nginx-controller-rs-x54kj 1/1 Running 0 20s
# 查看控制器
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 5 5 5 5m8s
# 扩缩容(法一:资源清单修改)
[root@master-1 ~]# vim rs-nginx.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: nginx-rs
name: nginx-controller-rs
spec:
## 修改为3个
replicas: 3
selector:
matchLabels:
nginx: nginx
template:
metadata:
name: nginx-pod-rs
labels:
nginx: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
[root@master-1 ~]# kubectl apply -f rs-nginx.yml
replicaset.apps/nginx-controller-rs configured
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 3 3 3 7m5s
# 扩缩容(法二:kube命令修改)
[root@master-1 ~]# kubectl edit rs nginx-controller-rs
## 扩容为6个
replicas: 6
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 6 6 6 9m33s
# 简单方法的扩缩容(rs)
[root@master-1 ~]# kubectl scale rs nginx-controller-rs --replicas=10
replicaset.apps/nginx-controller-rs scaled
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 10 10 10 10m
Deployment 控制器(运用的比较多,实践工作中看需求)
# rs控制器创建5个nginx的pod示例
[root@master-1 ~]# vim rs-nginx.yml
apiVersion: apps/v1 ## apiVersion接口除了pod的接口还加上了RS控制器的接口
kind: ReplicaSet ## kind资源类型指定为要使用的控制器
metadata: ## 那这里的metadata就是给这个RS控制器定义内容
labels: ## RS控制器定义标签
app: nginx-rs
name: nginx-controller-rs ## RS控制器的名字 pod的名字就是这个名字+随机数
spec: ## 定义资源
replicas: 5 ## replicas指定启动的服务的个数
selector:
matchLabels: ## 定义一个pod的标签 下面的Pod指定这个标签 连接并让控制器管理
nginx: nginx
template: ## RS控制器通过用template来包含之前pod的配置
metadata:
name: nginx-pod-rs
labels:
nginx: nginx ## 这里指定上面的RS控制器的标签
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 纯净版示例
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: nginx-rs
name: nginx-controller-rs
spec:
replicas: 5
selector:
matchLabels:
nginx: nginx
template:
metadata:
name: nginx-pod-rs
labels:
nginx: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 运行
[root@master-1 ~]# kubectl apply -f rs-nginx.yml
replicaset.apps/nginx-controller-rs created
# 查看nginx
[root@master-1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-controller-rs-hf7gr 1/1 Running 0 20s
nginx-controller-rs-thqq9 1/1 Running 0 20s
nginx-controller-rs-w7dhd 1/1 Running 0 20s
nginx-controller-rs-wk9px 1/1 Running 0 20s
nginx-controller-rs-x54kj 1/1 Running 0 20s
# 查看控制器
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 5 5 5 5m8s
# 扩缩容(法一:资源清单修改)
[root@master-1 ~]# vim rs-nginx.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: nginx-rs
name: nginx-controller-rs
spec:
## 修改为3个
replicas: 3
selector:
matchLabels:
nginx: nginx
template:
metadata:
name: nginx-pod-rs
labels:
nginx: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
[root@master-1 ~]# kubectl apply -f rs-nginx.yml
replicaset.apps/nginx-controller-rs configured
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 3 3 3 7m5s
# 扩缩容(法二:kube命令修改)
[root@master-1 ~]# kubectl edit rs nginx-controller-rs
## 扩容为6个
replicas: 6
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 6 6 6 9m33s
# 简单方法的扩缩容(rs)
[root@master-1 ~]# kubectl scale rs nginx-controller-rs --replicas=10
replicaset.apps/nginx-controller-rs scaled
[root@master-1 ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-rs 10 10 10 10m
# Deployment控制器创建5个nginx的pod示例
[root@master-1 ~]# vim dp-nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-dp
name: nginx-controller-dp
spec:
replicas: 5
selector:
matchLabels:
nginx: nginx01
template:
metadata:
labels:
nginx: nginx01
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 运行
[root@master-1 ~]# kubectl apply -f dp-nginx.yml
deployment.apps/nginx-controller-dp created
# 查看rs控制器
[root@master-1 ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-565785f75c 1 1 1 3d23h
nginx-controller-dp-6796cf7b8d 5 5 5 16s
nginx-controller-rs 10 10 10 14m
# 查看deployments控制器
[root@master-1 ~]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 3d23h
nginx-controller-dp 5/5 5 5 43s
# 查看pod
[root@master-1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-565785f75c-8gfgw 1/1 Running 0 12m
nginx-controller-dp-6796cf7b8d-9pc2s 1/1 Running 0 100s
nginx-controller-dp-6796cf7b8d-gz6t7 1/1 Running 0 100s
nginx-controller-dp-6796cf7b8d-hz2hh 1/1 Running 0 100s
nginx-controller-dp-6796cf7b8d-v2l5q 1/1 Running 0 100s
nginx-controller-dp-6796cf7b8d-xqpd6 1/1 Running 0 100s
nginx-controller-rs-42jdt 1/1 Running 0 7m26s
nginx-controller-rs-7zfct 1/1 Running 0 7m26s
nginx-controller-rs-bc4ft 1/1 Running 0 5m53s
nginx-controller-rs-drz8k 1/1 Running 0 5m53s
nginx-controller-rs-hf7gr 1/1 Running 0 16m
nginx-controller-rs-thqq9 1/1 Running 0 16m
nginx-controller-rs-tsdz4 1/1 Running 0 5m53s
nginx-controller-rs-twj5v 1/1 Running 0 5m53s
nginx-controller-rs-wk9px 1/1 Running 0 16m
nginx-controller-rs-xtsn5 1/1 Running 0 7m26s
## 结论
通过控制RS来保证Pod始终保持相应的数量副本
# 滚动更新
[root@master-1 ~]# vim dp-nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-dp
name: nginx-controller-dp
spec:
replicas: 8
selector:
matchLabels:
nginx: nginx01
template:
metadata:
labels:
nginx: nginx01
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 查看之前的deployments控制器
[root@master-1 ~]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 3d23h
nginx-controller-dp 5/5 5 5 7m7s
# 运行
[root@master-1 ~]# kubectl apply -f dp-nginx.yml
deployment.apps/nginx-controller-dp configured
# 动态查看deployments控制器
[root@master-1 ~]# kubectl get deployments.apps -w
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 3d23h
nginx-controller-dp 5/8 4 5 11m
nginx-controller-dp 6/8 4 6 11m
nginx-controller-dp 7/8 4 7 11m
nginx-controller-dp 8/8 4 8 11m
nginx-controller-dp 8/8 4 8 11m
nginx-controller-dp 7/8 4 7 11m
nginx-controller-dp 7/8 5 7 11m
nginx-controller-dp 7/8 5 7 11m
nginx-controller-dp 6/8 5 6 11m
nginx-controller-dp 6/8 6 6 11m
nginx-controller-dp 7/8 6 7 11m
nginx-controller-dp 7/8 6 7 11m
nginx-controller-dp 7/8 6 7 11m
nginx-controller-dp 7/8 7 7 11m
nginx-controller-dp 6/8 7 6 11m
nginx-controller-dp 6/8 8 6 11m
nginx-controller-dp 7/8 8 7 11m
nginx-controller-dp 7/8 8 7 11m
nginx-controller-dp 6/8 8 6 11m
nginx-controller-dp 7/8 8 7 11m
nginx-controller-dp 7/8 8 7 11m
nginx-controller-dp 6/8 8 6 11m
nginx-controller-dp 7/8 8 7 11m
nginx-controller-dp 8/8 8 8 11m
## 总结
滚动更新,替换版本时是启动好一台再把旧之前版本剔除掉
版本更新
# 版本更新
## 语法: kubectl set image -f 资源清单文件 容器名=镜像名
[root@master-1 ~]# kubectl set image -f dp-nginx.yml nginx=nginx:1.24.0
deployment.apps/nginx-controller-dp image updated
# 查看滚动更新状态
[root@master-1 ~]# kubectl rollout status deployment nginx-controller-dp
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 of 8 updated replicas are available...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 of 8 updated replicas are available...
deployment "nginx-controller-dp" successfully rolled out
# 版本回滚到上一个版本
[root@master-1 ~]# kubectl rollout undo deployment nginx-controller-dp
deployment.apps/nginx-controller-dp rolled back
# 回滚指定版本
## 如果想查看指定版本详细信息(版本记录)
需要在创建命令后面加上 --record
例:kubectl set image -f 111.yml nginx-dp=nginx:1.18.0 --record
## 查看历史版本(默认只保留10个版本)
[root@master-1 ~]# kubectl rollout history deployment nginx-controller-dp
deployment.apps/nginx-controller-dp
REVISION CHANGE-CAUSE
3 <none>
5 <none>
6 <none>
## 查看指定历史版本的详细信息
[root@master-1 ~]# kubectl rollout history deployment nginx-controller-dp --revision=3
deployment.apps/nginx-controller-dp with revision #3
Pod Template:
Labels: nginx=nginx01
pod-template-hash=6796cf7b8d
Containers:
nginx:
Image: nginx:1.18
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
## 回滚到指定版本
[root@master-1 ~]# kubectl rollout undo deployment nginx-controller-dp --to-revision=5
deployment.apps/nginx-controller-dp rolled back
### 查看历史版本(版本5消失了,因为已经回滚了)
[root@master-1 ~]# kubectl rollout history deployment nginx-controller-dp
deployment.apps/nginx-controller-dp
REVISION CHANGE-CAUSE
3 <none>
6 <none>
7 <none>
扩缩容
[root@master-1 ~]# kubectl scale deployment nginx-controller-dp --replicas=1
[root@master-1 ~]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 3d23h
nginx-controller-dp 1/1 1 1 33m
DaemonSet 控制器
# 版本更新
## 语法: kubectl set image -f 资源清单文件 容器名=镜像名
[root@master-1 ~]# kubectl set image -f dp-nginx.yml nginx=nginx:1.24.0
deployment.apps/nginx-controller-dp image updated
# 查看滚动更新状态
[root@master-1 ~]# kubectl rollout status deployment nginx-controller-dp
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 4 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 5 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 out of 8 new replicas have been updated...
Waiting for deployment "nginx-controller-dp" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 2 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-controller-dp" rollout to finish: 6 of 8 updated replicas are available...
Waiting for deployment "nginx-controller-dp" rollout to finish: 7 of 8 updated replicas are available...
deployment "nginx-controller-dp" successfully rolled out
# 版本回滚到上一个版本
[root@master-1 ~]# kubectl rollout undo deployment nginx-controller-dp
deployment.apps/nginx-controller-dp rolled back
# 回滚指定版本
## 如果想查看指定版本详细信息(版本记录)
需要在创建命令后面加上 --record
例:kubectl set image -f 111.yml nginx-dp=nginx:1.18.0 --record
## 查看历史版本(默认只保留10个版本)
[root@master-1 ~]# kubectl rollout history deployment nginx-controller-dp
deployment.apps/nginx-controller-dp
REVISION CHANGE-CAUSE
3 <none>
5 <none>
6 <none>
## 查看指定历史版本的详细信息
[root@master-1 ~]# kubectl rollout history deployment nginx-controller-dp --revision=3
deployment.apps/nginx-controller-dp with revision #3
Pod Template:
Labels: nginx=nginx01
pod-template-hash=6796cf7b8d
Containers:
nginx:
Image: nginx:1.18
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
## 回滚到指定版本
[root@master-1 ~]# kubectl rollout undo deployment nginx-controller-dp --to-revision=5
deployment.apps/nginx-controller-dp rolled back
### 查看历史版本(版本5消失了,因为已经回滚了)
[root@master-1 ~]# kubectl rollout history deployment nginx-controller-dp
deployment.apps/nginx-controller-dp
REVISION CHANGE-CAUSE
3 <none>
6 <none>
7 <none>
[root@master-1 ~]# kubectl scale deployment nginx-controller-dp --replicas=1
[root@master-1 ~]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 3d23h
nginx-controller-dp 1/1 1 1 33m
DaemonSet 控制器
# DaemonSet控制器创建nginx的pod示例
[root@master-1 ~]# cat ds-nginx.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-controller-ds
labels:
app: nginx-labels
spec:
selector:
matchLabels:
app: nginx-labels
template:
metadata:
labels:
app: nginx-labels
spec:
containers:
- name: nginx-ds
image: nginx:alpine
imagePullPolicy: IfNotPresent
# 运行
[root@master-1 ~]# kubectl apply -f ds-nginx.yml
daemonset.apps/nginx-controller-ds created
# 可以观察到两个node节点各起了一个nginx
[root@master-1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-controller-ds-8s6fh 1/1 Running 0 26s 10.2.2.77 node-2 <none> <none>
nginx-controller-ds-t9nqs 1/1 Running 0 26s 10.2.1.84 node-1 <none> <none>
# 查看DaemonSet控制器
[root@master-1 ~]# kubectl get ds
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
nginx-controller-ds 2 2 2 2 2 <none> 119s
HPA
官网地址:TP
工作原理
HAP 通过收集来的监控指标分析所有 Pod 的负载情况,并且根据我们设定好的标准来自动扩容收缩 ReplicationController、 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量
## HPA通过以下命令,获取到各个节点上POD负载情况
[root@master-1 ~]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master-1 65m 6% 936Mi 24%
node-1 30m 3% 526Mi 28%
node-2 30m 3% 1108Mi 58%
获取到POD负载情况,指标,可以根据我们自定义数量,进行扩缩容
## HPA -- MetricsServer -- Deployment
kubectl scale deployment nginx-dp --replicas=5
kubectl scale deployment nginx-dp --replicas=2
部署 Metrics-server
# 1.下载资源清单
[root@master-1 opt]# wget http://download.wodeyumengouwo.com:8888/kubernetes/metric_server.tgz
# 2.导入镜像
[root@master-1 opt]# for i in node-1 node-2;do scp metrics-server.tar $i:/root;done
[root@node-1 ~]# docker load < metrics-server.tar
[root@node-2 ~]# docker load < metrics-server.tar
# 3.修改资源清单
[root@master-1 opt]# vim components.yaml
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --kubelet-insecure-tls // 跳过握手
image: metrics-server:v0.4.0 // 使用本地镜像
# 4.应用资源清单
[root@master-1 opt]# kubectl apply -f components.yaml
# 5.查看节点负载
[root@master-1 opt]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master-1 63m 6% 2214Mi 57%
node-1 61m 6% 903Mi 48%
node-2 77m 7% 1001Mi 53%
生成测试镜像
创建测试首页
cat > index.php << 'EOF'
<?php
$x = 0.0001;
for ($i = 0; $i <= 1000000; $i++) {
$x += sqrt($x);
}
echo "OK!";
?>
EOF
创建 dockerfile
cat > dockerfile << 'EOF'
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php
EOF
生成镜像
docker build -t php:v1 .
保存镜像
[root@master-1 php]# docker save php:v1 > /tmp/php.tgz
[root@master-1 tmp]# for i in node-1 node-2;do scp /tmp/php.tgz $i:/root/;done
[root@node-1 ~]# docker load < php.tgz
[root@node-2 ~]# docker load < php.tgz
创建 Deployment 资源
[root@master-1 php]# vim php-dp.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
replicas: 1
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- image: php:v1
imagePullPolicy: IfNotPresent
name: php-apache
resources:
requests:
cpu: 200m
[root@master-1 ~]# kubectl apply -f php-dp.yml
deployment.apps/php-apache created
创建 HPA 资源
[root@master-1 php]# vim php-hpa.yml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 50
压测
# 查看HPA扩容情况
kubectl get hpa -w
kubectl get pod -w
kubectl top node
kubectl top pod
## 简单命令
# 创建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80
# 创建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
# 压测
while true; do wget -q -O- http://10.2.1.47; done
# 动态观察hpa(压测时与压测结束限制过程)
[root@master-1 ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache <unknown>/50% 1 10 0 0s
php-apache Deployment/php-apache 0%/50% 1 10 1 15s
php-apache Deployment/php-apache 232%/50% 1 10 1 61s
php-apache Deployment/php-apache 232%/50% 1 10 4 86s
# 1.下载资源清单
[root@master-1 opt]# wget http://download.wodeyumengouwo.com:8888/kubernetes/metric_server.tgz
# 2.导入镜像
[root@master-1 opt]# for i in node-1 node-2;do scp metrics-server.tar $i:/root;done
[root@node-1 ~]# docker load < metrics-server.tar
[root@node-2 ~]# docker load < metrics-server.tar
# 3.修改资源清单
[root@master-1 opt]# vim components.yaml
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --kubelet-insecure-tls // 跳过握手
image: metrics-server:v0.4.0 // 使用本地镜像
# 4.应用资源清单
[root@master-1 opt]# kubectl apply -f components.yaml
# 5.查看节点负载
[root@master-1 opt]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master-1 63m 6% 2214Mi 57%
node-1 61m 6% 903Mi 48%
node-2 77m 7% 1001Mi 53%
创建测试首页
cat > index.php << 'EOF'
<?php
$x = 0.0001;
for ($i = 0; $i <= 1000000; $i++) {
$x += sqrt($x);
}
echo "OK!";
?>
EOF
创建 dockerfile
cat > dockerfile << 'EOF'
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php
EOF
生成镜像
docker build -t php:v1 .
保存镜像
[root@master-1 php]# docker save php:v1 > /tmp/php.tgz
[root@master-1 tmp]# for i in node-1 node-2;do scp /tmp/php.tgz $i:/root/;done
[root@node-1 ~]# docker load < php.tgz
[root@node-2 ~]# docker load < php.tgz
创建 Deployment 资源
[root@master-1 php]# vim php-dp.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
replicas: 1
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- image: php:v1
imagePullPolicy: IfNotPresent
name: php-apache
resources:
requests:
cpu: 200m
[root@master-1 ~]# kubectl apply -f php-dp.yml
deployment.apps/php-apache created
创建 HPA 资源
[root@master-1 php]# vim php-hpa.yml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 50
压测
# 查看HPA扩容情况
kubectl get hpa -w
kubectl get pod -w
kubectl top node
kubectl top pod
## 简单命令
# 创建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80
# 创建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
# 压测
while true; do wget -q -O- http://10.2.1.47; done
# 动态观察hpa(压测时与压测结束限制过程)
[root@master-1 ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache <unknown>/50% 1 10 0 0s
php-apache Deployment/php-apache 0%/50% 1 10 1 15s
php-apache Deployment/php-apache 232%/50% 1 10 1 61s
php-apache Deployment/php-apache 232%/50% 1 10 4 86s
cat > index.php << 'EOF'
<?php
$x = 0.0001;
for ($i = 0; $i <= 1000000; $i++) {
$x += sqrt($x);
}
echo "OK!";
?>
EOF
cat > dockerfile << 'EOF'
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php
EOF
生成镜像
docker build -t php:v1 .
保存镜像
[root@master-1 php]# docker save php:v1 > /tmp/php.tgz
[root@master-1 tmp]# for i in node-1 node-2;do scp /tmp/php.tgz $i:/root/;done
[root@node-1 ~]# docker load < php.tgz
[root@node-2 ~]# docker load < php.tgz
创建 Deployment 资源
[root@master-1 php]# vim php-dp.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
replicas: 1
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- image: php:v1
imagePullPolicy: IfNotPresent
name: php-apache
resources:
requests:
cpu: 200m
[root@master-1 ~]# kubectl apply -f php-dp.yml
deployment.apps/php-apache created
创建 HPA 资源
[root@master-1 php]# vim php-hpa.yml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 50
压测
# 查看HPA扩容情况
kubectl get hpa -w
kubectl get pod -w
kubectl top node
kubectl top pod
## 简单命令
# 创建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80
# 创建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
# 压测
while true; do wget -q -O- http://10.2.1.47; done
# 动态观察hpa(压测时与压测结束限制过程)
[root@master-1 ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache <unknown>/50% 1 10 0 0s
php-apache Deployment/php-apache 0%/50% 1 10 1 15s
php-apache Deployment/php-apache 232%/50% 1 10 1 61s
php-apache Deployment/php-apache 232%/50% 1 10 4 86s
docker build -t php:v1 .
[root@master-1 php]# docker save php:v1 > /tmp/php.tgz
[root@master-1 tmp]# for i in node-1 node-2;do scp /tmp/php.tgz $i:/root/;done
[root@node-1 ~]# docker load < php.tgz
[root@node-2 ~]# docker load < php.tgz
创建 Deployment 资源
[root@master-1 php]# vim php-dp.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
replicas: 1
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- image: php:v1
imagePullPolicy: IfNotPresent
name: php-apache
resources:
requests:
cpu: 200m
[root@master-1 ~]# kubectl apply -f php-dp.yml
deployment.apps/php-apache created
创建 HPA 资源
[root@master-1 php]# vim php-hpa.yml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 50
压测
# 查看HPA扩容情况
kubectl get hpa -w
kubectl get pod -w
kubectl top node
kubectl top pod
## 简单命令
# 创建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80
# 创建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
# 压测
while true; do wget -q -O- http://10.2.1.47; done
# 动态观察hpa(压测时与压测结束限制过程)
[root@master-1 ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache <unknown>/50% 1 10 0 0s
php-apache Deployment/php-apache 0%/50% 1 10 1 15s
php-apache Deployment/php-apache 232%/50% 1 10 1 61s
php-apache Deployment/php-apache 232%/50% 1 10 4 86s
[root@master-1 php]# vim php-dp.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
replicas: 1
selector:
matchLabels:
run: php-apache
template:
metadata:
labels:
run: php-apache
spec:
containers:
- image: php:v1
imagePullPolicy: IfNotPresent
name: php-apache
resources:
requests:
cpu: 200m
[root@master-1 ~]# kubectl apply -f php-dp.yml
deployment.apps/php-apache created
[root@master-1 php]# vim php-hpa.yml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 50
压测
# 查看HPA扩容情况
kubectl get hpa -w
kubectl get pod -w
kubectl top node
kubectl top pod
## 简单命令
# 创建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80
# 创建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
# 压测
while true; do wget -q -O- http://10.2.1.47; done
# 动态观察hpa(压测时与压测结束限制过程)
[root@master-1 ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache <unknown>/50% 1 10 0 0s
php-apache Deployment/php-apache 0%/50% 1 10 1 15s
php-apache Deployment/php-apache 232%/50% 1 10 1 61s
php-apache Deployment/php-apache 232%/50% 1 10 4 86s
# 查看HPA扩容情况
kubectl get hpa -w
kubectl get pod -w
kubectl top node
kubectl top pod
## 简单命令
# 创建dp
kubectl run php-apache --image=php:v1 --requests=cpu=200m --expose --port=80
# 创建hpa
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
# 压测
while true; do wget -q -O- http://10.2.1.47; done
# 动态观察hpa(压测时与压测结束限制过程)
[root@master-1 ~]# kubectl get hpa -w
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache <unknown>/50% 1 10 0 0s
php-apache Deployment/php-apache 0%/50% 1 10 1 15s
php-apache Deployment/php-apache 232%/50% 1 10 1 61s
php-apache Deployment/php-apache 232%/50% 1 10 4 86s
Comments | NOTHING