首页 > 其他 > 详细

四、常用控制器

时间:2020-10-22 22:27:20      阅读:38      评论:0      收藏:0      [点我收藏+]
POD与controllers的关系
  controllers:在集群上管理和运行容器的对象
  通过label和seletor相关联
  pod通过控制器实现应用的运维,如弹性伸缩,滚动更新等
 
Controllers的分类
  Deployment : 无状态应用部署
  StatefulSet : 有状态应用部署
  DaemonSet : 确保所有Node运行同一个Pod
  Job : 一次性任务
  Cronjob : 定时任务
 
Deployment
部署无状态应用
  ? 管理Pod和ReplicaSet
  ? 具有上线部署、副本设定、滚动升级、回滚等功能
  ? 提供声明式更新,例如只更新一个新的Image
  应用场景:Web服务,微服务,API
无状态部署也就是说启动的pod都是基于一个模板的,比如有个node挂了,那么pod会在别的node上拉起,不会考虑存储,网络,只要能在任意节点上能起来,并且多个实例对于同一个请求响应的结果是完全一致的
 
1、部署应用
  kubectl create deployment web --image=nginx:1.14
  kubectl get deploy,pods
2、暴露应用
  kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web kubectl get service
3、应用升级
  kubectl set image deployment/web nginx=nginx:1.15
  kubectl rollout status deployment/web
  或者直接修改ymal文件,执行kubectl apply -f deployment.yaml
  k8s会先去启动pod,启动成功后再关闭原来的pods
4、应用回滚
  在启动pod的时候最后加上 --record,可以在查看历史版本的时候看到pod信息
  如:kubectl apply -f deployment.yaml --record
    查看历史版本
      kubectl rollout history deployment {控制器名称}
    回滚
      kubectl rollout undo deployment {控制器名称}
    回滚到指定版本
      kubectl rollout undo deployment {控制器名称} --to-revision=2
5、扩容/缩容
  kubectl scale deployment web --replicas=10
 
StatefulSet
部署有状态应用
解决Pod独立生命周期,保持Pod启动顺序和唯一性
  1. 稳定,唯一的网络标识符(实例之间通信地址要固定),持久存储
  2. 有序,按先后顺序进行部署和扩展、删除和终止
应用场景:分布式应用(mysql,zk,etcd)
有状态部署就是每个pod都有独立的数据和网络,在创建一个新的有状态应用时,可以通过备份恢复这些数据
 
Headless Service.yaml文件
就是把clusterIP设置为None,不需要clusterIP,而是为每个pod提供一个固定的dns名称,部署成功可以通过kubectl get svc可以看到clusterIP为None
clusterIP为None表示谁用了这个service,service就要负责这个pod的网络
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web
spec:
  clusterIP: None
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: web
StatefulSet.yaml容器启动文件
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: web
  name: web
spec:
  # 需要设定service的name,告诉StatefulSet控制器要使用hanless service来保证pod身份
  serviceName: web
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx
我们可以手动启动一个busybox容器去解析,解析有状态应用返回的是三个pod的ip和对应的dns记录,为了保证通信地址的固定
技术分享图片

 

StatefulSet的存储卷yaml文件
使用VolumeClaimTemplate创建, 称为卷申请模板(StatefulSet独有),当StatefulSet使用VolumeClaimTemplate 创建一个PersistentVolume时,同样也会为每个Pod分配 并创建一个编号的PVC,给每个pod也都会生成一个pv作为独立存储
和deployment的区别是:deployment的pod是共用一个pv,而StatefulSet是一个pod对应一个pv
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: web
  name: web
spec:
  serviceName: web
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  # 使用卷申请模板
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      # 访问模式
      accessModes: [ "ReadWriteOnce" ]
      # 指定存储的pv名称
      storageClassName: "managed-nfs-storage"
      resources:
        requests:
          storage: 1Gi
 
DaemonSet
  ? 在每一个Node上运行一个Pod
  ? 新加入的Node也同样会自动运行一个Pod
  应用场景:Agent
DaemonSetymal部署的ymal格式,和Deployment 相似
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: dsl
spec:
  selector:
    matchLabels:
      projecte: blog
      app: java-demo
  template:
    metadata:
      labels:
        projecte: blog
        app: java-demo
    spec:
      containers:
      - name: web
        image: nginx
        ports:
        - containerPort: 80

 

Job
  分为普通任务(Job)和定时任务(CronJob)
  一次性执行
  应用场景:离线数据处理,视频解码等业务
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
       - name: pi
         # 跑的镜像
         image: perl
         # 传递的参数,跑任务
         command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
       restartPolicy: Never
CronJob

     定时任务,像Linux的Crontab一样

  定时任务

  应用场景:通知,备份
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  # 分时日月周,这里代表每分钟执行一次
  schedule: "*/1 * * * *"
  template:
    spec:
      containers:
       - name: pi
         image: busybox
         args: 
         - /bin/sh 
         - -c 
         - date; echo Hello from the Kubernetes cluster
       restartPolicy: OnFailure
    # 定义重启次数
    backoffLimit: 4

 

四、常用控制器

原文:https://www.cnblogs.com/solememory/p/13861159.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!