云原生 kubenetes 控制器管理

一.Replicaset控制器

1.建立控制器

bash 复制代码
[root@k8s-master controler]# kubectl create deployment webcluster --image myapp:v1  --dry-run=client -o yaml  > repset.yml
[root@k8s-master 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
[root@k8s-master controler]# kubectl apply -f repset.yml
replicaset.apps/webcluster created
bash 复制代码
打开一个新的shell
[root@master ~]# watch -n 1 kubectl get pods   --show-labels
Every 1.0s: kubectl get pods --show-labels                                    k8s-master: Tue Aug 25 16:22:01 2026

NAME               READY   STATUS    RESTARTS   AGE    LABELS
webcluster-5h8vv   1/1     Running   0          103s   app=webcluster
webcluster-6qgnd   1/1     Running   0          103s   app=webcluster

拉伸
kubectl  scale replicaset webcluster --replicas 4
kubectl  scale replicaset webcluster --replicas 2
kubectl  scale replicaset webcluster --replicas 0

2.测试功能

bash 复制代码
[root@master controler]# vim repset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  replicas: 4
  selector:
    matchLabels:
      app: webcluster
#  strategy: {}
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v1
        name: myapp

[root@k8s-master controler]# kubectl apply -f repset.yml
replicaset.apps/webcluster created

NAME               READY   STATUS    RESTARTS   AGE   LABELS
webcluster-b4qt7   1/1     Running   0          12s   app=webcluster
webcluster-dch25   1/1     Running   0          12s   app=webcluster
webcluster-rkmcm   1/1     Running   0          12s   app=webcluster
webcluster-zlrzp   1/1     Running   0          12s   app=webcluster
bash 复制代码
[root@k8s-master controler]# kubectl label pods webcluster-b4qt7 app-
pod/webcluster-b4qt7 unlabeled
bash 复制代码
[root@k8s-master controler]# kubectl label pods webcluster-b4qt7 app=webcluster
pod/webcluster-b4qt7 labeled

二.deployment

1.监控

bash 复制代码
[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 repli...  k8s-master: Tue Aug 25 16:29:04 2026

No resources found in default namespace.
====
No resources found in default namespace.

2.建立deployment控制器

bash 复制代码
[root@k8s-master controler]# kubectl create deployment webcluster --image myapp:v1  --dry-run=client -o yaml  > dep.yml
[root@k8s-master controler]# 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@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster created

NAME                          READY   STATUS    RESTARTS   AGE   LABELS
webcluster-77c87d9946-4dbnr   1/1     Running   0          40s   app=webcluster,pod-template-hash=77c87d9946
webcluster-77c87d9946-mbgdw   1/1     Running   0          40s   app=webcluster,pod-template-hash=77c87d9946
====
NAME                    DESIRED   CURRENT   READY   AGE
webcluster-77c87d9946   2         2         2       40s

[root@k8s-master controler]# kubectl expose deployment webcluster --port 80 --target-port 80
service/webcluster exposed
[root@k8s-master controler]# kubectl describe  services webcluster
Name:                     webcluster
Namespace:                default
Labels:                   app=webcluster
Annotations:              <none>
Selector:                 app=webcluster
Type:                     ClusterIP
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.103.237.129
IPs:                      10.103.237.129
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
Endpoints:                10.244.2.35:80,10.244.1.20:80
Session Affinity:         None
Internal Traffic Policy:  Cluster
Events:                   <none>

3.升级和回滚

bash 复制代码
升级
[root@master controler]# 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:v2
        name: myapp
#        resources: {}
[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
[root@k8s-master controler]# kubectl describe  services webcluster
Name:                     webcluster
Namespace:                default
Labels:                   app=webcluster
Annotations:              <none>
Selector:                 app=webcluster
Type:                     ClusterIP
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.103.237.129
IPs:                      10.103.237.129
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
Endpoints:                10.244.2.36:80,10.244.1.21:80
Session Affinity:         None
Internal Traffic Policy:  Cluster
Events:                   <none>

三.版本更新管理及优化

bash 复制代码
[root@k8s-master controler]# vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  minReadySeconds: 5
  replicas: 6
  selector:
    matchLabels:
      app: webcluster
#  strategy: {}
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v2
        name: myapp
#        resources: {}
[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster configured

1.查看更新策略信息

bash 复制代码
[root@k8s-master controler]# kubectl describe deployments.apps webcluster
Name:                   webcluster
Namespace:              default
CreationTimestamp:      Tue, 25 Aug 2026 16:29:50 +0800
Labels:                 app=webcluster
Annotations:            deployment.kubernetes.io/revision: 2
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

2.设定更新策略

bash 复制代码
[root@master controler]# vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
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
#        resources: {}
[root@master controler]# kubectl apply -f dep.yml

3.更新暂停和恢复

bash 复制代码
[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster created
[root@k8s-master controler]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION  CHANGE-CAUSE
1         <none>

[root@k8s-master controler]# kubectl rollout pause deployment webcluster  #暂停更新
deployment.apps/webcluster paused
[root@k8s-master controler]# vim dep.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  minReadySeconds: 5
  replicas: 6
  selector:
    matchLabels:
      app: webcluster
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v2
        name: myapp
#        resources: {}

[root@k8s-master controler]# kubectl apply -f dep.yml
deployment.apps/webcluster configured
[root@k8s-master controler]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION  CHANGE-CAUSE
1         <none>

[root@k8s-master controler]# kubectl rollout resume deployment webcluster   #开启更新
deployment.apps/webcluster resumed
[root@k8s-master controler]# kubectl rollout history deployment webcluster
deployment.apps/webcluster
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

四.DaemonSet

bash 复制代码
[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 controler]# kubeadm token create  --print-join-command
kubeadm join 172.25.254.100:6443 --token lqcz14.6f4krq91w75h58bt --discovery-token-ca-cert-hash sha256:6b5950ef2cdba85d6dfdb564ee90d4187fa3d341767dc9852cbdd5c9dee4f927


[root@node3 ~]#  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控制器

bash 复制代码
[root@master ~]# docker load -i perl-5.34.tar.gz
[root@master ~]# docker tag perl:5.34.0 reg.timinglee.org/library/perl:5.34.0
[root@master ~]# docker login  reg.timinglee.org -u admin
Password:
Login Succeeded
[root@master ~]# docker push reg.timinglee.org/library/perl:5.34.0

[root@master controler]# kubectl create job job --image perl:5.34.0 --dry-run=client -o yaml > job.yml
[root@master controler]# vim job.yml
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 controler]# kubectl apply -f job.yml
job.batch/job created

[root@k8s-master controller]# kubectl logs pods/testjob-4cdlr
this is testjob message

六.Cronjob控制器

bash 复制代码
[root@master controler]# kubectl create cronjob cronjob --image busybox  --schedule "* * * * *" --dry-run=client -o yaml > cronjob.yml
[root@master 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: '* * * * *'

[root@master controler]# kubectl apply -f cronjob.yml		#整分运行

[root@master controler]# kubectl get cronjobs.batch
NAME      SCHEDULE    TIMEZONE   SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjob   * * * * *   <none>     False     0        17s             70s

[root@master controler]# kubectl logs cronjob-29598241-pxggh
hello timinglee
相关推荐
浪兎兎11 小时前
【Kubernetes 实战】(二)部署 Ruoyi-Cloud —— 部署服务
云原生·容器·kubernetes
大大大大晴天14 小时前
K8S 在大数据里的真正价值:适用场景、收益边界与不适合的地方
大数据·云原生
众人皆醒我独醉15 小时前
流量路由:Istio 与 Knative 的集成
面试·kubernetes·llm
众人皆醒我独醉15 小时前
模型加载:storage-initializer 与节点级缓存
面试·kubernetes·gpu
Henry-SAP15 小时前
AI与机器人信息新闻
人工智能·云原生·sap·erp
阿里云云原生15 小时前
深入解析阿里云 SysOM AI Profiling:如何实现零侵入的AI作业全生命周期观测?
云原生
SakitamaX16 小时前
pod管理及其相关实验
运维·kubernetes
天蓝不会忘记0216 小时前
pod的控制器
容器·kubernetes
DevOps老兵16 小时前
Kubernetes生产运维02:只会get pods还不够,kubectl排障工具箱怎么组合使用
运维·容器·kubernetes·kubectl·devops·故障排查·sre