pod 分类:
自主式pod: 死亡不会被拉起
控制器式pod :在控制器的生命周期里,始终维持pod的副本数量

什么是控制器

k8s 中内建了很多控制器,这些控制器相当于一个状态机,用来控制pod的具体状态和行为
控制器是存在master节点上,控制node节点上的kubelet然后kubelet在创建对应的pod

控制器类型

  1. ReplicationController & ReplicaSet
  2. Deployment
  3. DaemonSet
  4. StateFulSet
  5. Job/ConJob
  6. Horizontal Pod Autoscaling

Deployment & ReplicaSet & ReplicationController(废弃)

replicaSet

用来维护固定的pod数量

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-rs-demo
spec:
  replicas: 5
  selector: # 这就是rs 比rc多出来的地方,支持selector的选择标签
    matchLabels:
      appName: zhucheng
  template:
    metadata:
      labels:
        app: fg
        appName: zhucheng
    spec:
      containers:
      - name: my-boot
        image: zhucheng1992/myboot:1.0
        ports:
        - containerPort: 80 # 这个端口就是容器内部开放的端口,如果容器里面有一个8080的服务,这里就写8080

这样创建一个 rs.yaml 然后执行 kubectl create -f rs.yaml 就会创建出5个 pod 命名规则是 rs名称-随机字符串
RS 的控制副本数量规则是
在这里插入图片描述

缩容扩容

kubectl edit rs rs的metadata名称

在这里插入图片描述
修改后 wq退出,副本就会自动变成对应数量

Deployment 和 ReplicaSet

Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括:

  1. 定义Deployment来创建Pod和ReplicaSet
  2. 滚动升级和回滚应用
  3. 扩容和缩容
  4. 暂停和继续Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: zc-deploy
        image: zhucheng1992/myboot:1.0
        ports:
        - containerPort: 8080

使用 kubectl apply -f deployment.yaml 创建deployment控制器,会发现这个deployment控制器创建了一个名称为
my-deployment-md5 名称的一个 ReplicaSet。然后这个replicaSet 又创建了3个 pod
在这里插入图片描述

Deployment 扩容缩容

kubectl scale deployment my-deployment --replicas 4

更新镜像

 kubectl set image deployment/deployment名称 容器名称=镜像名称:版本号
 kubectl set image deployment/my-deployment zc-deploy=zhucheng1992/myboot:2.0

回滚

kubectl rollout undo deployment/deployment名称

查看历史记录

kubectl rollout history deployment/my-deployment
deployment.apps/my-deployment 
REVISION  CHANGE-CAUSE
2         kubectl apply --filename=mydeploy.yaml --record=true
3         kubectl apply --filename=mydeploy.yaml --record=true
4         kubectl apply --filename=mydeploy.yaml --record=true

回滚到指定的版本

kubectl rollout undo deployment/my-deployment --to-revision=2

DaesmonSet

DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括:

日志收集,比如fluentd,logstash等
系统监控,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等
系统程序,比如kube-proxy, kube-dns, glusterd, ceph等

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-daemonset
spec:
  selector:
    matchLabels:
      app: daemonSet-app
  template:
    metadata:
      labels:
        app: daemonSet-app
    spec:
      containers:
      - name: zc-deploy
        image: zhucheng1992/myboot:1.0
        ports:
        - containerPort: 8080

通过daemonSet创建出来的pod永远在node上面只会有一份

Job & ConJob

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐