Skip to content

pod控制器

RC

yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-demo
spec:
  replicas: 3
  selector:
    app: rc-demo
  template:
    metadata:
      labels:
        app: rc-demo
    spec:
      containers:
        - name: rc-demo-nginx
          image: nginx
          env:
            - name: GET_HOSTS_FROM
              value: dns
            - name: POD_NAME
              value: aaa
          ports:
            - containerPort: 80

RS

相比RC支持集合匹配器

yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: rs-demo
      domain: test
  template:
    metadata:
      labels:
        app: rs-demo
        domain: test
        version: v1
    spec:
      containers:
        - name: rs-demo-nginx
          image: nginx
          env:
            - name: GET_HOSTS_FROM
              value: dns
            - name: POD_NAME
              value: aaa
          ports:
            - containerPort: 80

支持标签运算

yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs-demo-match-expression
spec:
  replicas: 3
  selector:
    matchExpressions:
      - key: app
        operator: Exists
      - key: test
        operator: DoesNotExist
      - key: domain
        operator: In
        values:
          - test
      - key: version
        operator: NotIn
        values:
          - v2
    matchLabels:
      app: rs-demo-match-expression
      domain: test
  template:
    metadata:
      labels:
        app: rs-demo-match-expression
        domain: test
        version: v1
    spec:
      containers:
        - name: rs-demo-nginx
          image: nginx
          env:
            - name: GET_HOSTS_FROM
              value: dns
            - name: POD_NAME
              value: aaa
          ports:
            - containerPort: 80

Deployment

支持回滚升级版本控制

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deployment-demo
  name: deployment-demo
spec:
  selector:
    matchLabels:
      app: deployment-demo
  template:
    metadata:
      labels:
        app: deployment-demo
    spec:
      containers:
        - image: nginx
          name: nginx
          ports:
            - containerPort: 80

查看历史版本

bash
kubectl rollout history deploy deployment-demo
bash
#回滚上一个版本
kubectl rollout undo deployment mytomcat
#回滚到指定版本
kubectl rollout undo deployment mytomcat --to-revision=2

DaemonSet

运行在每个节点上 保障每个节点上运行一个pod ds.demo.yaml

yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ds-demo
  labels:
    app: ds-demo
spec:
  selector:
    matchLabels:
      name: ds-demo
  template:
    metadata:
      labels:
        name: ds-demo
    spec:
      containers:
        - name: ds-demo-nginx
          image: nginx

Job

运行一个任务 保证任务一个或多个pod成功运行完成 RestartPolicy: Never|OnFailure|Always

yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: job-demo
spec:
  template:
    spec:
      containers:
        - name: job-demo-nginx
          image: nginx
      restartPolicy: Never

CronJob

运行一个任务 保证任务一个或多个pod成功运行完成

yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob-demo
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      completions: 3
      template:
        spec:
          containers:
            - name: cronjob-demo-nginx
              image: alpine
              args:
                - /bin/sh
                - -c
                - date; sleep 10; echo Hello from the Kubernetes cluster
          restartPolicy: Never