《三》控制器、配置管理

Pod与controllers的关系

控制器管理pod

  • ? controllers:在集群上管理和运行容器的对象
  • ? 使用label-selector 标签 让控制器关联pod
  • ? Pod通过控制器实现应用的运维,如伸缩,升级等

Deployment

  • ? 部署无状态应用--用于web服务,无需多的更改
  • ? 管理Pod和ReplicaSet(若是一个pod挂了,就起一个pod在别的节点)
  • ? 具有上线部署、副本设定、滚动升级、回滚等功能
  • ? 提供声明式更新,例如只更新一个新的Image

记录的版本,用于回滚:

总结
1、deployment 认为pod都保持一致
2、不用考虑启动顺序
3、不用考虑在哪个node上运行,在哪个node上运行都一样
4、随意的扩容、缩容

SatefulSet

部署有状态应用

  • ? 解决Pod独立生命周期,保持Pod启动顺序和唯一性
    1. 稳定,唯一的网络标识符,持久存储
    1. 有序,优雅的部署和扩展、删除和终止
    1. 有序,滚动更新
  • 应用场景:数据库

总结
1、比如etcd就需要部署在这个控制器下,因为集群之间的配置会变化
2、不对等的关系,需要用外部存储,类似于3台web,存储附件,不要用一个nfs共享存储,让每个web都可以正常访问

service:外部可以访问,通过CLUSTER-IP 转发到容器的节点上来提供服务

现需要将CLUSTER-IP 设置为None,这样就能保证转发到一台节点上,需要用到的是dns的通信
设置:clusterIP: None 若是不设置,默认都是有clusterIP

配置dns服务:
kubectl apply -f coredns.yaml

验证:(若是running,就没问题)

验证开始
[[email protected] demo]# cat sys.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:

  • port: 80
    name: web
    clusterIP: None
    selector:
    app: nginx

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: nginx-statefulset
namespace: default
spec:
serviceName: nginx
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:

  • name: nginx
    image: nginx:latest
    ports:

    • containerPort: 80

说明:1、serviceName: nginx 与service 中的name: nginx 绑定
2、kind: StatefulSet 指定这个控制器

创建
kubectl apply -f sys.yaml

创建一个pod,在这里用dns解析
[[email protected] demo]# kubectl apply -f pod1.yaml
[[email protected] demo]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: dns-test
spec:
containers:

  • name: busybox
    image: busybox:1.28.4
    args:

    • /bin/sh
    • -c
    • sleep 39999999

说明:1、必须要加上参数,不然启动就退出了,保证不被退出

进入到容器里解析:

说明:1、nginx-statefulset-0.nginx 中nginx-statefulset-0 是pod的主机名,nginx是service名称,这样来保证稳定

主机名获取:

StatefulSet与Deployment区别:有身份的!
身份三要素:
? 固定域名
? 固定主机名
? 存储(PVC)

ClusterIP A记录格式:<service-name>.<namespace-name>.svc.cluster.local
ClusterIP=None A记录格式:<statefulsetName-index>.<service-name>.svc.cluster.local
示例:web-0.nginx.default.svc.cluster.local

DaemonSet

官网:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
? 在每一个Node上运行一个Pod
? 新加入的Node也同样会自动运行一个Pod
应用场景:Agent

验证:

说明:1、DaemonSet 不需要指定副本数( replicas: 3),因为是根据node的数量才定的,比如node数为3个,就创建3个pod

Job

官网: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

Job分为普通任务(Job)和定时任务(CronJob)
? 一次性执行
应用场景:离线数据处理,视频解码等业务,适用临时跑个任务


说明:1、 backoffLimit: 4 异常重启的限制次数
2、[[email protected] demo]# kubectl get jobs

CronJob
官网:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/

定时任务,像Linux的Crontab一样。
? 定时任务
应用场景:通知,备份

说明:1、查看kubectl get cronjob

配置管理

Secret
官网:https://kubernetes.io/docs/concepts/configuration/secret/

加密数据并存放Etcd中,让Pod的容器以挂载Volume方式访问。
应用场景:凭据

ConfigMap
官网:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息。
应用场景:应用配置

1、新建一个redis.properties
[[email protected] demo]# vi redis.properties

redis.gost=127.0.0.1
redis.port=6379
redis.password=123456

2、创建 [[email protected] demo]# kubectl create configmap redis-config --from-file=redis.properties

3、查看kubectl get configmaps

4、这个是不需要加密的数据,所以都是明文的

5、编辑cm.yaml

说明:1、将config-volume(name: redis-config) 挂载到/etc/config下
2、cat /etc/config/redis.properties

结果:

说明:将上线的代码和configmaps 联系在一起,指定configmaps,就可以访问了

原文地址:http://blog.51cto.com/jacksoner/2329503

时间: 2024-12-20 21:39:33

《三》控制器、配置管理的相关文章

(三)slatstack配置管理

相关配置修改 在执行salt命令之前,我们需要对master的配置文件进行修改. vim /etc/salt/master 第一步搜索fire_roots,并去掉之前的注释部分 # file_roots: #   base: #     - /srv/salt/ #   dev: #     - /srv/salt/dev/services #     - /srv/salt/dev/states #   prod: #     - /srv/salt/prod/services #     -

AngularJS自学之路(三)——控制器和表达式

控制器 控制器在AngularJS中的作用是增强视图. AngularJS中的控制器是一个函数,用来向视图的作用域中添加额外的功能.我们用它来给作用域对象设置初始状态,并添加自定义行为. 当我们在页面上创建一个新的控制器时,AngularJS会生成并传递一个新的$scope给这个控制器.可以在这个控制器里初始化scope.由于AngularJS会负责处理控制器的实例化过程,我们只需编写构造函数即可.下面的例子展示了控制器初始化: function FirstController($scope)

Spring MVC(三)--控制器接受普通请求参数

Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数名称和pojo属性一致即可: 注解方式:当前端参数名和控制器名称不一致时可以使用注解方式,比如前端是param_id,而控制器中是paramId的情况: URL方式:当前端以restful格式传递参数时,后台使用这种方式接受: JSON方式:前后端如果用json方式交互时,可以使用这种方式,这是常用

007.ASP.NET MVC控制器依赖注入

原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前言:在这篇文章中,我将通过一个demo,直截了当地说明依赖注入在MVC框架中的使用. 内容列表: 1.介绍 2.为什么使用控制器依赖注入 3.控制器静态结构 4.自定义控制器 5.Framework中控制器的创建 6.为什么使用控制器工厂模式 7.控制器工厂模式 7.1.目标1 7.2.目标2 8.

IOS Xib使用——为控制器添加Xib文件

Xib文件是一个轻量级的用来描述局部界面的文件,它与StoryBoard类似,都是使用Interface Bulider工具进行编辑.但是StoryBoard是重量级的,它是用来描述整个软件的多个界面,并且能够展示多个页面之间的跳转关系.在StoryBoard出现之前,一直是使用Xib文件表示界面.当然除了使用Xib文件,也可以直接使用代码来生成界面,无论哪种方式,都各自有自己的优缺点. Xib既可以用来表示一个控制器的界面,又可以用来表示不同控制器中的局部的小界面.在本节,主要讲解一下用Xib

控制器pop时没有被销毁(没有走dealloc方法)错误原因

ARC环境下,不需要我们进行过多的内存的管理我们需要做的就是在dealloc方法中进行内存管理,但是错误的代码也会造成内存管理方法dealloc不执行,错误的原因无非以下三种,其中第二种和第三种最容易发生(总在不经意间就发生了这两中错误) 一.block块使用不当.因为block会对方法中的变量自动retain一次.请检查控制器中block代码.(我的就是因为这没有走dealloc) 二.NSTimer没有销毁.在viewWillDisappear之前需要把控制器用到的NSTimer销毁. 三.

视图控制器的生命周期

  补充: NSLog(@"%s",__func__);//这句话可以打印什么类中的什么方法 一     什么是视图控制器 (1)视图控制器就是用来“控制”或者“管理”界面(视图)的 控制器就是创建控件和给控件传递数据的 “换句话说界面长得丑与美由视图控制器说的算” (2)每个视图控制器(UIViewController)都有一个View属性来描述界面长什么 二 视图控制器的创建方式 (1)UIStoryboard的方式 UIStoryboard * storyboard = [UIS

【转】007.ASP.NET MVC控制器依赖注入

原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前言:在这篇文章中,我将通过一个demo,直截了当地说明依赖注入在MVC框架中的使用. 内容列表: 1.介绍 2.为什么使用控制器依赖注入 3.控制器静态结构 4.自定义控制器 5.Framework中控制器的创建 6.为什么使用控制器工厂模式 7.控制器工厂模式 7.1.目标1 7.2.目标2 8.

云时代IDC自动化运维的几大神器

云时代IDC自动化运维的几大神器 2016年09月18日 10:27:41 天府云创 阅读数:1715 版权声明:本文为EnweiTech原创文章,未经博主允许不得转载. https://blog.csdn.net/English0523/article/details/52572114 自动化运维是数据中心.互联网企业高度重视的方向,数据中心的从纯手工.重复地进行软件部署运维,经历编写脚本运维,再到借助第三方工具高效.方便地部署和运维,在转变的过程中已大大提升了运维的效率和性能.下面给大家推荐

如何打造7*24h持续交付通道?阿里高级技术专家的5点思考

云效鼓励师导读:打造7*24小时的持续交付通道是很多技术团队梦寐以求的事情,那么如何才能实现呢?阿里高级技术专家施翔带来了他的思考. 此外,文末我们还为大家首次推出了阿里敏捷教练团队倾心打造的提升研发效能36计课程之"看板+站会"相关内容课程,欢迎报名. 我们对于研发效能的讨论,本质上是提高整个技术生态中的协同效率.如果仅从研发角度出发,技术团队要实现的终极目标是7*24小时的灵活发布窗口,以及更快的业务迭代能力. 7*24小时发布窗口的实现其实并不简单,受限于很多因素.我简单的进行了