文章目录

  • 1. 什么是controller
  • 2. Pod和Controller的关系
  • 3. 五种控制器类型
    • 3.1 deployment
      • 3.1.1 特点
      • 3.1.2 示例
      • 3.1.3 应用升级回滚和弹性伸缩
    • 3.2 StatefulSet
      • 3.2.1 特点
      • 3.2.2 无状态和有状态区别
      • 3.2.3 部署有状态应用
    • 3.3 DaemonSet
      • 3.3.1 特点
      • 3.3.2 示例
    • 3.4 Job普通任务
      • 3.4.1 特点
      • 3.4.2 示例
    • 3.5 CronJob定时任务
      • 3.5.1 特点
      • 3.5.2 示例
  • 4. StatefulSet与Deployment区别

1. 什么是controller

  1. 在集群上管理和运行容器的对象,它是实际存在的,不像pod是抽象的
  2. 可以进行有状态应用部署和无状态应用部署

2. Pod和Controller的关系

  1. Pod是通过Controller实现应用的运维,比如伸缩,滚动升级等等
  2. Pod和Controller通过label建立关系

3. 五种控制器类型

3.1 deployment

3.1.1 特点

  1. 部署无状态的应用。如nginx,web服务,微服务等
  2. 管理Pod和ReplicaSet
  3. 具有上线部署、副本设定、滚动升级、回滚等功能

3.1.2 示例

  1. 生成yml文件
kubectl create deployment web --image=nginx #不能做复用,只能做测试kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml  #生成yaml文件样板

web.yml

apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: webname: web
spec:replicas: 1selector: # 与下面的labels完成匹配matchLabels:app: webstrategy: {}template:metadata:creationTimestamp: nulllabels: # 完成匹配app: webspec:containers:- image: nginxname: nginxresources: {}
status: {}
  1. 使用yaml部署应用
[root@k8sMaster ~]# kubectl apply -f web.yaml
deployment.apps/web created
[root@k8sMaster ~]# kubectl get pods
NAME                   READY   STATUS              RESTARTS   AGE
web-5dcb957ccc-2fvt9   0/1     ContainerCreating   0          6s
  1. 对外发布(暴露对外端口号)
 kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yamlkubectl apply -f web1.yaml
  1. 查看暴露端口号并访问
[root@k8sMaster ~]#  kubectl get pods,svc
NAME                       READY   STATUS    RESTARTS   AGE
pod/web-5dcb957ccc-2fvt9   1/1     Running   0          12mNAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        20d
service/web1         NodePort    10.97.135.244   <none>        80:30800/TCP   5m47s

30800为对外暴露端口

3.1.3 应用升级回滚和弹性伸缩

  1. 应用升级
    应用升级时,先下载镜像,当pod启动后,会替换掉旧版本
 kubectl set image deployment web nginx=nginx:1.15
  1. 查看升级版本
[root@k8sMaster ~]# kubectl rollout history deployment web
deployment.apps/web
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
  1. 查看升级状态
[root@k8sMaster ~]# kubectl rollout status deployment web
deployment "web" successfully rolled out

这是升级成功的显示

  1. 回滚到上一个版本
[root@k8sMaster ~]# kubectl rollout undo deployment web
deployment.apps/web rolled back
  1. 回滚到指定版本
[root@k8sMaster ~]# kubectl rollout undo deployment web --to-revison=2
deployment.apps/web rolled back
  1. 弹性伸缩
[root@k8sMaster ~]# kubectl scale deployment web --replicas=10
deployment.apps/web scaled

3.2 StatefulSet

3.2.1 特点

部署有状态应用
解决Pod独立生命周期,保持Pod启动顺序和唯一性
稳定,唯一的网络标识符,持久存储(例如: etcd 配置文件,节点地址发生变化,将无法使用)
有序,优雅的部署和扩展、删除和终止(例如: mysql 主从关系,先启动主,再启动从)
有序,滚动更新
应用场景: 数据库

3.2.2 无状态和有状态区别

  1. 无状态:
    (1) deployment认为所有的pod都是一样的
    (2) 不用考虑顺序的要求
    (3) 不用考虑在哪个node节点上运行
    (4) 可以随意扩容和缩容

  2. 有状态:
    (1) 实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd, zookeeper
    (2) 实例之间不对等的关系,以及依靠外部存储的应用。

3.2.3 部署有状态应用

常规service和无头服务区别:
(1) service: 一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
(2) Headless service无头服务, 不需要cluster-IP,直接绑定具体的Pod的IP(当Pod的IP地址是动态变化时,所以常用于绑定DNS访问)

注意无头service(即:clusterIP:None)


创建开始

查看pod,有三个pod,每个都是唯一名称

查看创建无头的service,这里为None表示无头service

3.3 DaemonSet

3.3.1 特点

  1. 部署守护进程
  2. 确保所有的node运行同一个pod

应用场景:Agent、监控

3.3.2 示例

用DaemonSet 控制器类型创建nginx pod资源,没有指定副本replicats,它会根据node节点的个数创建,如果再新加一个node节点,也会给新node节点创建pod

3.4 Job普通任务

3.4.1 特点

应用场景:离线数据处理,视频解码等业务

3.4.2 示例

用job控制器类型创建资源,执行算圆周率的命令,保持后2000位,创建过程等同于在计算
,重试次数默认是6次,修改为4次,当遇到异常时Never状态会重启,所以要设定次数。

# vim job.yaml
apiVersion: batch/v1
kind: Job
metadata:name: pi
spec:template:spec:containers:- name: piimage: perlcommand: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: NeverbackoffLimit: 4在node节点提前下载perl镜像,因为镜像比较大所以提前下载好
node1 node2节点:
# docker pull perl创建过程等同于在计算
# kubectl apply -f job.yaml
job.batch/pi created查看状态
# kubectl get pods
# kubectl describe pod pi-tkdlc 查看日志,看计算结果,结果输出到控制台
# kubectl logs pi-tkdlc
3.141592653589793.............................................共2000位

3.5 CronJob定时任务

3.5.1 特点

周期性任务,像Linux的Crontab一样。
周期性任务
应用场景:通知,备份

3.5.2 示例

每隔一分钟输出一条信息,打印hello

# vim cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busyboxargs:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailurebusybox 是linux内核镜像# kubectl create -f cronjob.yaml
# kubectl get cronjob
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE    AGE
hello      */1 * * * *         False         0         <none>          25s
# kubectl get pods
查看日志,内容输出到控制台
# kubectl logs hello-1581917340-dzxbj
Mon Feb 17 05:29:09 UTC 2020
Hello from the Kubernetes cluster等待一分钟后又会再执行一次
# kubectl get pods
# kubectl logs hello-1581917400-nkb72最后删除资源,不然第二天服务器宕机
# kubectl delete -f cronjob.yaml

4. StatefulSet与Deployment区别

StatefulSet创建的pod是有身份的,有唯一标识的。

  1. 每个pod都有唯一的主机名
  2. 唯一域名生成规则:格式:主机名.service名称.名称空间.svc.cluster.local【例如:

参考博客:https://blog.csdn.net/weixin_45691464/article/details/106326605

k8s(四):核心技术-Controller相关推荐

  1. k8s核心技术-Controller(statefulSet)_部署有状态应用---K8S_Google工作笔记0033

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们说k8s的controller可以部署无状态的应用,也可以部署有状态的应用 首先我们要明确 ...

  2. k8s核心技术-Controller控制器_Controller(Job和Cronjob)_一次任务和定时任务---K8S_Google工作笔记0035

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来说一下这个k8s支持的这样一个功能,就是k8s支持,job,也就是任务,也就是说 我们有 ...

  3. k8s核心技术-Controller(Deployment)_发布应用---K8S_Google工作笔记0029

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们来说一下,怎么利用deployment这个控制器controller来部署应用 这里咱们使 ...

  4. k8s核心技术-Controller(Deployment)_概述和应用场景---K8S_Google工作笔记0028

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 接下来咱们开始说controller master节点上的controller manager 咱 ...

  5. k8s核心技术-Controller(DaemonSet)_部署守护进程---K8S_Google工作笔记0034

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个守护进程是什么意思,其实就是说,我们要保证,每个node上都要运行在同一个pod中, 也就是说 ...

  6. k8s核心技术-Controller(Deployment)控制器对pod的管理实现_升级回滚和弹性伸缩---K8S_Google工作笔记0030

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个应用的升级和回滚很好理解,之前咱们创建nginx的pod的时候,没有 指定版本,就默认部署的是 ...

  7. 7、kubernetes 核心技术-Controller 控制器

    文章目录 一.什么是Controller? 二.Pod和Controller的关系 三.Deployment控制器应用场景 四.Deployment控制器部署应用 4.1 导出yaml文件 4.2 使 ...

  8. 第四章 Controller接口控制器详解(5)——跟着开涛学SpringMVC

    2019独角兽企业重金招聘Python工程师标准>>> 原创内容,转载请注明iteye http://jinnianshilongnian.iteye.com/ 4.15.Multi ...

  9. k8s四种port解析:nodePort、port、targetPort、containerPort

    1. nodePort nodePort提供了集群外部客户端访问service的一种方式,:nodePort提供了集群外部客户端访问service的端口,即nodeIP:nodePort提供了外部流量 ...

最新文章

  1. Python爬虫(九)_案例:使用正则表达式的爬虫
  2. 201602021344_《Javascript柯里化uncurrying()(将内置方法独立成为一个通用方法)》
  3. 从零开始-android 4.2之旅
  4. Spring Boot----Dubbo
  5. 太阳直射点纬度计算公式_高中地理,常用计算公式大盘点,高中满分特辑!
  6. php isnumber 小数点,JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】...
  7. 第一个被赋予公明身份的机器人_机器人索菲亚扬言要消灭人类!曾经狂妄无比,现在过得如何...
  8. Unity3D笔记 切水果 一
  9. python如何设置双索引_python-在新的多索引下串联熊猫列
  10. c语言约瑟夫环分析报告,约瑟夫环C语言实现验证报告.doc
  11. [VT虚拟化驱动]利用EPT实现无痕HOOK
  12. 怎样学好高一数学,首先掌握这4种方法
  13. Java程序应用实例:“你好 Java”
  14. LabVIEW基础课程(2) ----虚拟抽奖机
  15. PAT(甲级) 1003. Emergency
  16. moore 数据集_【数据集】一文道尽医学图像数据集与竞赛
  17. 实验名称: 类的构造函数、析构函数和友员成员应用
  18. 牛客小白月赛19A:「水」滔天巨浪
  19. 新手如何安装ai换脸软件deepfacelab中文版
  20. html输入框中加入按钮,INPUT输入框和按钮

热门文章

  1. linux系统命令make.clean的用法讲解
  2. python 小说人物分析_Python文章相关性分析---金庸武侠小说分析
  3. Legacy引导转UEFI引导(BIOS、Legacy引导、UEFI引导、GPT/MBR分区)
  4. 全球与中国冷冻莴苣市场深度研究分析报告
  5. 计算机网络基础昆明理工大学,昆明理工大学 计算机网络基础 实验三
  6. android五子棋源代码,Android五子棋游戏源码详解
  7. pandas +re获取pubmed中文献的标题和摘要
  8. html一键使网页字体变大,网页字体变大了怎么办
  9. html tab focus,tabindex解决div获得焦点focus()和失去焦点blur()的问题
  10. rails dbconsole