
一.Replicaset控制器1.建立控制器--image myapp:v1指定 Deployment 中 Pod 使用的容器镜像--dry-runclient这是关键参数表示客户端试运行client模式意味着仅在本机生成 YAML/JSON 输出不经过服务器验证-o yaml指定输出格式为 YAML#创建一个名为webcluster的 Deployment 资源高级控制器 [rootmaster controler]# kubectl create deployment webcluster --image myapp:v1 --dry-runclient -o yaml repset.yml [rootmaster controler]# 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 [rootmaster controler]# kubectl apply -f repset.yml #打开一个新的shell #列出当前命名空间下的所有 Pod并在输出中额外显示每个 Pod 的标签 [rootmaster ~]# watch -n 1 kubectl get pods --show-labels Every 1.0s: kubectl get pods --show-labels master: Sat Apr 11 10:08:32 2026 NAME READY STATUS RESTARTS AGE LABELS webcluster-tbxq4 1/1 Running 0 6m49s appwebcluster webcluster-jna23 1/1 Running 0 6m49s appwebcluster #拉伸这条命令的作用是将名为 webcluster 的 ReplicaSet 资源副本数调整为 4 kubectl scale replicaset webcluster --replicas 4 kubectl scale replicaset webcluster --replicas 2 kubectl scale replicaset webcluster --replicas 02.测试功能[rootmaster controler]# vim repset.yml 。。。。 spec: replicas: 4 。。。。 [rootmaster controler]# kubectl apply -f repset.yml [rootmaster ~]# watch -n 1 kubectl get pods --show-labels Every 1.0s: kubectl get pods --show-labels master: Sat Apr 11 10:11:06 2026 NAME READY STATUS RESTARTS AGE LABELS webcluster-4sxz4 1/1 Running 0 13s appwebcluster webcluster-lvtsn 1/1 Running 0 13s appwebcluster webcluster-tbxq4 1/1 Running 0 9m23s appwebcluster webcluster-tr5qk 1/1 Running 0 13s appwebcluster二.deployment1.监控[rootmaster ~]# watch -n 1 kubectl get pods --show-labels;echo ;kubectl get replicasets.apps2.建立deployment控制器[rootmaster controler]# kubectl create deployment webcluster --image myapp:v1 --dry-runclient -o yaml dep.yml [rootmaster controler]# vim dep.yml apiVersion: apps/v1 kind: Deployment metadata: labels: app: webcluster name: webcluster spec: minReadySeconds: 5 #指定一个 Pod 在就绪Ready后至少需要保持就绪状态 5 秒才会被视为“可用”Available replicas: 2 selector: matchLabels: app: webcluster # strategy: {} #定义更新策略空对象表示默认滚动更新 template: metadata: labels: app: webcluster spec: containers: - image: myapp:v1 name: myapp # resources: {} 定义容器资源请求和限制空对象表示无限制 [rootmaster controler]# kubectl apply -f dep.yml #监控部分显示效果 Every 1.0s: kubectl get pods --show-labels;echo ;kubectl get replicase... master: Sat Apr 11 10:43:24 2026 NAME READY STATUS RESTARTS AGE LABELS webcluster-77c87d9946-49kh5 1/1 Running 0 45s appwebcluster,pod-template-hash77c87d9946 webcluster-77c87d9946-m2x2d 1/1 Running 0 45s appwebcluster,pod-template-hash77c87d9946 NAME DESIRED CURRENT READY AGE webcluster-77c87d9946 2 2 2 45s #发布服务 #deployment webcluster 指定要暴露的资源类型和名称这里是名为 webcluster 的 Deployment --port 80 Service 对外暴露的端口 --target-port 80 后端 Pod 容器实际监听的端口 [rootmaster controler]# kubectl expose deployment webcluster --port 80 --target-port 80 #查看 Service webcluster 的详细配置和当前状态 [rootmaster controler]# kubectl describe services webcluster Name: webcluster Namespace: default Labels: appwebcluster Annotations: none Selector: appwebcluster Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: 10.107.142.60 IPs: 10.107.142.60 Port: unset 80/TCP TargetPort: 80/TCP Endpoints: 10.244.2.6:80,10.244.1.9:80 Session Affinity: None Internal Traffic Policy: Cluster Events: none #访问 [rootmaster controler]# curl 10.107.142.60 Hello MyApp | Version: v1 | a hrefhostname.htmlPod Name/a3.升级和回滚#升级 [rootmaster controler]# 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 。。。。 [rootmaster controler]# kubectl apply -f dep.yml deployment.apps/webcluster configured [rootmaster controler]# curl 10.107.142.60 Hello MyApp | Version: v2 | a hrefhostname.htmlPod Name/a #回滚 [rootmaster controler]# 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 。。。。 [rootmaster controler]# kubectl apply -f dep.yml [rootmaster controler]# curl 10.107.142.60 Hello MyApp | Version: v1 | a hrefhostname.htmlPod Name/a三.版本更新管理及优化[rootmaster controler]# vim dep.yml spec: minReadySeconds: 5 replicas: 6 #把pod数量设定为6方便观察 selector: [rootmaster controler]# kubectl apply -f dep.yml deployment.apps/webcluster configured1.查看更新策略信息maxUnavailable允许不可用的 Pod 的最大数量或百分比)向下取整floor)maxSurge允许超出期望副本数spec.replicas额外创建的新 Pod 的最大数量或百分比向上取整ceil[rootmaster controler]# kubectl describe deployments.apps webcluster RollingUpdateStrategy: 25% max unavailable, 25% max surge2.设定更新策略[rootmaster controler]# 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 [rootmaster controler]# kubectl apply -f dep.yml3.更新暂停和恢复#是一个用于查看 Deployment 更新历史的命令它列出了该 Deployment 的所有修订版本 [rootmaster controler]# kubectl rollout history deployment webcluster deployment.apps/webcluster REVISION CHANGE-CAUSE 7 none 8 none [rootmaster controler]# kubectl rollout pause deployment webcluster #暂停更新 deployment.apps/webcluster paused [rootmaster controler]# vim dep.yml 。。。 containers: - image: myapp:v2 name: myapp 。。。 [rootmaster controler]# kubectl apply -f dep.yml #执行成功。但更新过程在监控中没出现 deployment.apps/webcluster configured [rootmaster controler]# kubectl rollout history deployment webcluster deployment.apps/webcluster REVISION CHANGE-CAUSE 7 none 8 none [rootmaster controler]# kubectl rollout resume deployment webcluster #开启更新 deployment.apps/webcluster resumed [rootmaster controler]# kubectl rollout history deployment webcluster deployment.apps/webcluster REVISION CHANGE-CAUSE 8 none 9 none四.DaemonSet[rootmaster controler]# kubectl create deployment daemonset --image myapp:v1 --dry-runclient -o yaml daemonset.yml [rootmaster 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 [rootmaster controler]# kubeadm token create --print-join-command kubeadm join 172.25.254.100:6443 --token lqcz14.6f4krq91w75h58bt --discovery-token-ca-cert-hash sha256:6b5950ef2cdba85d6dfdb564ee90d4187fa3d341767dc9852cbdd5c9dee4f927 [rootnode3 ~]# kubeadm join 172.25.254.100:6443 --token lqcz14.6f4krq91w75h58bt --discovery-token-ca-cert-hash sha256:6b5950ef2cdba85d6dfdb564ee90d4187fa3d341767dc9852cbdd5c9dee4f927 --cri-socket unix:///var/run/cri-dockerd.sock #当node3加入集群后会在node3中立即群星指定的pod其原因是因为运行了daemonset #可以在master中观察pod的状态五.Job控制器[rootmaster ~]# docker load -i perl-5.34.tar.gz [rootmaster ~]# docker tag perl:5.34.0 reg.timinglee.org/library/perl:5.34.0 [rootmaster ~]# docker login reg.timinglee.org -u admin Password: Login Succeeded [rootmaster ~]# docker push reg.timinglee.org/library/perl:5.34.0 [rootmaster controler]# kubectl create job job --image perl:5.34.0 --dry-runclient -o yaml job.yml [rootmaster controler]# vim job.yml apiVersion: batch/v1 kind: Job metadata: name: job spec: completions: 6 parallelism: 2 template: spec: containers: - image: perl:5.34.0 name: job command: [perl, -Mbignumbpi, -wle, print bpi(2000)] restartPolicy: Never backoffLimit: 4 [rootmaster controler]# kubectl apply -f job.yml job.batch/job created [rootmaster controler]# kubectl logs job-4b45g六.Cronjob控制器[rootmaster controler]# kubectl create cronjob cronjob --image busybox --schedule * * * * * --dry-runclient -o yaml cronjob.yml [rootmaster controler]# vim cronjob.yml apiVersion: batch/v1 kind: CronJob metadata: name: cronjob spec: jobTemplate: metadata: name: cronjob spec: template: spec: containers: - image: busybox name: cronjob command: - /bin/sh - -c - echo hello timinglee restartPolicy: OnFailure schedule: * * * * * [rootmaster controler]# kubectl apply -f cronjob.yml #整分运行 [rootmaster controler]# kubectl get cronjobs.batch NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE cronjob * * * * * none False 0 17s 70s [rootmaster controler]# kubectl logs cronjob-29598241-pxggh hello timinglee