kubernetes 控制器
·
一.Replicaset控制器
1.建立控制器
[root@master ~]# kubectl create deployment webcluster --image myapp:v1 --dry-run=client -o yaml > repset.yml
[root@master ~]# vim repset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: webcluster
name: webcluster
spec:
replicas: 2
selector:
matchLabels:
app: webcluster
# strategy: {}
template:
metadata:
labels:
app: webcluster
spec:
containers:
- image: myapp:v1
name: myapp
[root@master ~]# kubectl apply -f repset.yml
replicaset.apps/webcluster created
#打开一个新的shell
[root@master ~]# watch -n 1 kubectl get pods --show-labels
[root@master ~]# kubectl scale replicaset webcluster --replicas 4
replicaset.apps/webcluster scaled
[root@master ~]# kubectl scale replicaset webcluster --replicas 2
replicaset.apps/webcluster scaled
[root@master ~]# kubectl scale replicaset webcluster --replicas 0
replicaset.apps/webcluster scaled
[root@master ~]#

2.测试功能
[root@master controler]# vim repset.yml
。。。。
spec:
replicas: 4
。。。。
[root@master controler]# kubectl apply -f repset.yml
[root@master ~]# watch -n 1 kubectl get pods --show-labels
Every 1.0s: kubectl get pods --show-labels master: Tue Aug 25 22:01:08 2026
NAME READY STATUS RESTARTS AGE LABELS
webcluster-6m6mg 1/1 Running 0 2m21s app=webcluster
webcluster-dvk76 1/1 Running 0 107s app=webcluster
webcluster-srchq 1/1 Running 0 2m21s app=webcluster
webcluster-x4x6l 1/1 Running 0 107s app=webcluster

二.deployment
1.监控
[root@master ~]# watch -n 1 " kubectl get pods --show-labels;echo ====;kubectl get replicasets.apps"
Every 1.0s: kubectl get pods --show-labels;echo ====;kubectl get replicasets.apps master: Tue Aug 25 22:02:18 2026
NAME READY STATUS RESTARTS AGE LABELS
webcluster-6m6mg 1/1 Running 0 3m31s app=webcluster
webcluster-dvk76 1/1 Running 0 2m57s app=webcluster
webcluster-srchq 1/1 Running 0 3m31s app=webcluster
webcluster-x4x6l 1/1 Running 0 2m57s app=webcluster
====
NAME DESIRED CURRENT READY AGE
webcluster 4 4 4 3m31s

2.建立deployment控制器
[root@master ~]# kubectl create deployment webcluster --image myapp:v1 --dry-run=client -o yaml > dep.yml
[root@master ~]# vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: webcluster
name: webcluster
spec:
minReadySeconds: 5
replicas: 2
selector:
matchLabels:
app: webcluster
# strategy: {}
template:
metadata:
labels:
app: webcluster
spec:
containers:
- image: myapp:v1
name: myapp
# resources: {}
[root@master ~]# kubectl apply -f dep.yml
deployment.apps/webcluster created
#监控部分显示效果
Every 1.0s: kubectl get pods --show-labels;echo ====;kubectl get replicasets.apps master: Tue Aug 25 22:04:46 2026
NAME READY STATUS RESTARTS AGE LABELS
webcluster-6m6mg 1/1 Running 0 5m59s app=webcluster
webcluster-srchq 1/1 Running 0 5m59s app=webcluster
====
NAME DESIRED CURRENT READY AGE
webcluster 2 2 2 5m59s
[root@master ~]# kubectl expose deployment webcluster --port 80 --target-port 80
Error from server (AlreadyExists): services "webcluster" already exists
[root@master ~]# kubectl describe services webcluster
Name: webcluster
Namespace: default
Labels: app=webcluster
Annotations: <none>
Selector: app=webcluster
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.105.1.164
IPs: 10.105.1.164
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32416/TCP
Endpoints: 10.244.1.20:80,10.244.2.18:80
Session Affinity: None
External Traffic Policy: Cluster
Internal Traffic Policy: Cluster
Events: <none>
[root@master ~]# curl 10.105.1.164
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>


3.升级和回滚
[root@master ~]# vim dep.yml
。。。。
spec:
minReadySeconds: 5
replicas: 2
selector:
matchLabels:
app: webcluster
# strategy: {}
template:
metadata:
labels:
app: webcluster
spec:
containers:
- image: myapp:v2 #升级为版本2
name: myapp
。。。。
[root@master ~]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
[root@master ~]# curl 10.105.1.164
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
[root@master ~]# vim dep.yml
。。。。
spec:
minReadySeconds: 5
replicas: 2
selector:
matchLabels:
app: webcluster
# strategy: {}
template:
metadata:
labels:
app: webcluster
spec:
containers:
- image: myapp:v1 #回滚为版本1
name: myapp
。。。。
[root@master ~]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
[root@master ~]# curl 10.105.1.164
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
[root@master ~]# curl 10.105.1.164
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

三.版本更新管理及优化
[root@master ~]# vim dep.yml
spec:
minReadySeconds: 5
replicas: 6 #把pod数量设定为6方便观察
selector:
[root@master ~]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
1.查看更新策略信息
[root@master ~]# kubectl describe deployments.apps webcluster
Name: webcluster
Namespace: default
CreationTimestamp: Tue, 25 Aug 2026 22:03:30 +0800
Labels: app=webcluster
Annotations: deployment.kubernetes.io/revision: 3
Selector: app=webcluster
Replicas: 6 desired | 6 updated | 6 total | 6 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 5
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=webcluster
Containers:
myapp:
Image: myapp:v1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Node-Selectors: <none>
Tolerations: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: webcluster-6c8b4bb9d7 (0/0 replicas created)
NewReplicaSet: webcluster (6/6 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 8m5s deployment-controller Scaled down replica set webcluster from 4 to 2
Normal ScalingReplicaSet 4m1s deployment-controller Scaled up replica set webcluster-6c8b4bb9d7 from 0 to 1
Normal ScalingReplicaSet 3m56s deployment-controller Scaled down replica set webcluster from 2 to 1
Normal ScalingReplicaSet 3m56s deployment-controller Scaled up replica set webcluster-6c8b4bb9d7 from 1 to 2
Normal ScalingReplicaSet 3m50s deployment-controller Scaled down replica set webcluster from 1 to 0
Normal ScalingReplicaSet 3m27s deployment-controller Scaled up replica set webcluster from 0 to 1
Normal ScalingReplicaSet 3m21s deployment-controller Scaled down replica set webcluster-6c8b4bb9d7 from 2 to 1
Normal ScalingReplicaSet 3m21s deployment-controller Scaled up replica set webcluster from 1 to 2
Normal ScalingReplicaSet 3m15s deployment-controller Scaled down replica set webcluster-6c8b4bb9d7 from 1 to 0
Normal ScalingReplicaSet 64s deployment-controller (combined from similar events): Scaled up replica set webcluster from 2 to 6
2.设定更新策略
[root@master ~]# vim dep.yml
,,,,,,,
spec:
minReadySeconds: 5
replicas: 6
selector:
matchLabels:
app: webcluster
strategy:
rollingUpdate:
maxSurge: 1 #更新时pod数量最多比期望值多一个
maxUnavailable: 0 #不能使用pod数量比期望值数量多0
template:
metadata:
labels:
app: webcluster
spec:
containers:
- image: myapp:v1
name: myapp
[root@master ~]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
3.更新暂停和恢复
[root@master ~]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION CHANGE-CAUSE
2 <none>
3 <none>
[root@master ~]# kubectl rollout pause deployment webcluster
deployment.apps/webcluster paused
[root@master ~]# vim dep.yml
。。。
containers:
- image: myapp:v2
name: myapp
。。。
[root@master ~]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
[root@master ~]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION CHANGE-CAUSE
3 <none>
4 <none>
[root@master ~]# kubectl rollout resume deployment webcluster
deployment.apps/webcluster resumed
[root@master ~]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION CHANGE-CAUSE
3 <none>
4 <none>
四.DaemonSet
[root@master controler]# kubectl create deployment daemonset --image myapp:v1 --dry-run=client -o yaml > daemonset.yml
[root@master controler]# vim daemonset.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: daemonset
name: daemonset
spec:
selector:
matchLabels:
app: daemonset
template:
metadata:
labels:
app: daemonset
spec:
containers:
- image: myapp:v1
name: myapp
#另外开启一个主机node3,并设定在初始化集群时的所有设定确保所有服务的开启
#在master中重新生成集群主机注册时需要的token
[root@master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.106.181:6443 --token ozlv7n.5bm7z0b1msapxc3t --discovery-token-ca-cert-hash sha256:9cb037f40d64a5c3c7f6f6019f4a56cf8096f9e28a19fb9d08990d7d11ff9008
[root@master ~]#
[root@node3 ~]# kubeadm join 192.168.106.181:6443 --token ozlv7n.5bm7z0b1msapxc3t --discovery-token-ca-cert-hash sha256:9cb037f40d64a5c3c7f6f6019f4a56cf8096f9e28a19fb9d08990d7d11ff9008 --cri-socket unix:///var/run/cri-dockerd.sock
#当node3加入集群后会在node3中立即群星指定的pod,其原因是因为运行了daemonset
#可以在master中观察pod的状态

五.Job控制器
[root@master ~]# kubectl create job testjob --image busybox
job.batch/testjob created
[root@master ~]# kubectl create job testjob --image busybox --dry-run=client -o yaml
apiVersion: batch/v1
kind: Job
metadata:
name: testjob
spec:
template:
metadata: {}
spec:
containers:
- image: busybox
name: testjob
resources: {}
restartPolicy: Never
status: {}
[root@master ~]# kubectl create job testjob --image busybox --dry-run=client -o yaml > testjob.yaml
[root@master ~]# vim testjob.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: testjob
spec:
completions: 6
parallelism: 2
backoffLimit: 4
template:
spec:
containers:
- image: busybox
name: testjob
command: ["/bin/sh", "-c"]
args:
- |
echo this is testjob message
sleep 10
restartPolicy: Never
[root@master ~]# kubectl apply -f testjob.yaml
job.batch/testjob created
[root@master ~]# kubectl logs testjob-v5j94
this is testjob message

六.Cronjob控制器
[root@master ~]# kubectl delete -f testjob.yaml
job.batch "testjob" deleted from default namespace
[root@master ~]# cp testjob.yaml crontabjob.yml
[root@master ~]# vim crontabjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob
spec:
schedule: '* * * * *'
jobTemplate:
spec:
template:
spec:
restartPolicy: Never # 注意 P 是大写
containers:
- image: busybox
name: cronjob
command: ["/bin/sh", "-c"]
args:
- |
echo this is testjob message
sleep 10
[root@master ~]# kubectl apply -f crontabjob.yml
cronjob.batch/cronjob created

更多推荐

所有评论(0)