kubernetes集群编排——控制器

本文介绍了Kubernetes中的控制器(如ReplicaSet、Deployment、DaemonSet、Job和CronJob)的概念,如何创建和管理这些对象,以及它们在版本控制、回滚、更新策略、暂停恢复和资源回收等方面的应用。
摘要由CSDN通过智能技术生成

控制器

文档:https://v1-25.docs.kubernetes.io/zh-cn/docs/concepts/workloads/controllers/

replicaset

vim rs-example.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
kubectl apply -f rs-example.yml
kubectl get pod --show-labels

replicaset是通过标签匹配pod

kubectl label pod replicaset-example-w9z28 app=myapp --overwrite

kubectl get pod --show-labels

kubectl label pod replicaset-example-w9z28 app=nginx --overwrite

kubectl get pod --show-labels

replicaset自动控制副本数量,pod可以自愈

kubectl delete pod replicaset-example-q2sq9

kubectl get pod --show-labels

回收资源

kubectl delete -f rs-example.yml

deployment

vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
kubectl apply -f deployment-example.yaml
kubectl get all

版本迭代

vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2
kubectl apply -f deployment-example.yaml
kubectl get all

replicaset就是deployment的一个版本

回滚

vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
kubectl apply -f deployment-example.yaml
kubectl get all

滚动更新策略

vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  minReadySeconds: 5				
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
kubectl apply -f deployment-example.yaml

kubectl describe deployments.apps deployment-example

暂停与恢复

暂停,避免触发不必要的线上更新

kubectl rollout pause deployment deployment-example
vim deployment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  minReadySeconds: 5
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  replicas: 6				
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: nginx
        resources:
          limits:
            cpu: 0.5
            memory: 200Mi
          requests:
            cpu: 0.5
            memory: 200Mi
kubectl apply -f deployment-example.yaml
kubectl get all

调整副本数,不受影响

但是更新镜像和修改资源并没有触发更新

kubectl rollout history deployment deployment-example

恢复后开始触发更新

kubectl rollout resume deployment deployment-example

kubectl rollout history  deployment deployment-example

kubectl get pod

回收

kubectl delete -f deployment-example.yaml

daemonset

vim daemonset-example.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      tolerations:
      - effect: NoSchedule
        operator: Exists
      containers:
      - name: nginx
        image: nginx
kubectl apply -f daemonset-example.yml

kubectl get pod -o wide

kubectl delete -f daemonset-example.yml

job

vim job.yml
apiVersion: batch/v1

kind: Job

metadata:

  name: pi

spec:

  completions: 6

  parallelism: 2

  template:

    spec:

      containers:

      - name: pi

        image: perl:5.34.0

        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]

      restartPolicy: Never

  backoffLimit: 4
kubectl apply -f job.yml

kubectl get pod

kubectl delete -f job.yml

cronjob

vim cronjob.yml
apiVersion: batch/v1

kind: CronJob

metadata:

  name: hello

spec:

  schedule: "* * * * *"

  jobTemplate:

    spec:

      template:

        spec:

          containers:

          - name: hello

            image: busybox

            imagePullPolicy: IfNotPresent

            command:

            - /bin/sh

            - -c

            - date; echo Hello from the Kubernetes cluster

          restartPolicy: OnFailure
kubectl apply -f cronjob.yml

kubectl get all

kubectl delete -f cronjob.yml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值