kubernetes pod控制器

https://k8syaml.com/

pod控制器类型

  • ReplicaSet (副本数 标签选择器 pod资源模板)
  • Deployment (通过控制ReplicaSet来控制pod)
  • DaemonSet (确保集群中的每个节点都仅运行一个特定pod)
  • Job (任务完成即退出)
  • Cronjob
  • StatefulSet (有状态)
  • CDR (自定义)

ReplicaSet

rs-daemo.yaml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
    name: myapp
    namespace: default
spec:
    replicas: 2
    selector:
        matchLabels:
            app: myapp
            release: canary
    template:
        metadata:
            name: myapp-pod
            labels:
                app: myapp
                release: canary
                environment: qa
        spec:
            containers:
            - name: myapp-container
              image: ikubernetes/myapp:v1
              ports:
              - name: http
                containerPort: 80
kubectl describe pods myapp-hm7kk

Deployment

建立再ReplicaSet之上

deploy-demo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
kubectl apply -f deploy-demo.yaml
kubectl get pods -l app=myapp -w
kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY   AGE    CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-65df64765c   0         0         0       12m    myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65df64765c,release=canary
myapp-deploy-6b56d98b6b   3         3         3       2m5s   myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=6b56d98b6b,release=canary

查看滚动历史

kubectl rollout history deployment myapp-deploy

补丁方式操作

kubectl patch deployments myapp-deploy -p '{"spec":{"replicas":5}}'
kubectl patch deployments myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'

yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-deployment
spec:
  replicas: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 4
      maxSurge: 1

更新一个暂停

kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl rollout pause deployment myapp-deploy

继续更新

kubectl rollout resume deployment myapp-deploy

查看滚动状态

kubectl rollout status deployment myapp-deploy
kubectl get rs -o wide
NAME                      DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                 SELECTOR
myapp-deploy-548f47d899   5         5         5       10m   myapp        ikubernetes/myapp:v3   app=myapp,pod-template-hash=548f47d899,release=canary
myapp-deploy-65df64765c   0         0         0       41m   myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=65df64765c,release=canary
myapp-deploy-6b56d98b6b   0         0         0       31m   myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=6b56d98b6b,release=canary

重启

kubectl rollout restart deployment myapp-deploy

回滚

kubectl rollout undo deployment myapp-deploy --to-revision=1

扩缩容

kubectl -n infra scale --replicas=0 deployment grafana
kubectl -n infra scale --replicas=0 deployment prometheus
kubectl -n test scale --replicas=1 deployment vcloud-xxl-job-api

#批量设置副本数为0
kubectl -n test scale --replicas=0 deployment `kubectl -n test get deployments.apps |awk '{print $1}' |grep -v "NAME"`

DaemonSet

指定的节点每个节点只运行一个,默认是所有节点每个节点只运行一个

ds-demo.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-ds
  namespace: default
spec:
  selector:
    matchLabels:
      app: filebeat
      release: stable
  template:
    metadata:
      labels:
        app: filebeat
        release: stable
    spec:
      containers:
      - name: filebeat
        image: ikubernetes/filebeat:5.6.5-alpine
        env:
        - name: REDIS_HOST
          value: redis.default.svc.cluster.local
        - name: REDIS_LOG_LEVEL
          value: info

ds-demo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
      role: logstor
  template:
    metadata:
      labels:
        app: redis
        role: logstor
    spec:
      containers:
      - name: redis
        image: redis:4.0-alpine
        ports:
        - name: redis
          containerPort: 6379
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat-ds
  namespace: default
spec:
  selector:
    matchLabels:
      app: filebeat
      release: stable
  template:
    metadata:
      labels:
        app: filebeat
        release: stable
    spec:
      containers:
      - name: filebeat
        image: ikubernetes/filebeat:5.6.5-alpine
        env:
        - name: REDIS_HOST
          value: redis.default.svc.cluster.local
        - name: REDIS_LOG_LEVEL
          value: info
kubectl expose deployment redis --port=6379

kubectl 登录多容器的pod

kubectl -n 名称空间 describe pod pod名称
kubectl -n 名称空间 exec -it pod名称 -c 容器名称 -- /bin/bash
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxingge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值