码迷,mamicode.com
首页 > 其他好文 > 详细

《三》控制器、配置管理

时间:2018-12-12 17:42:36      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:lin   text   def   .com   linu   技术   节点   根据   ref   

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,就没问题)
技术分享图片

验证开始
[root@docker 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解析
[root@docker demo]# kubectl apply -f pod1.yaml
[root@docker 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、[root@docker 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
[root@docker demo]# vi redis.properties

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

2、创建 [root@docker 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,就可以访问了

《三》控制器、配置管理

标签:lin   text   def   .com   linu   技术   节点   根据   ref   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!