Kubernetes进阶之StatefulSet有状态部署

  

k8有状态应用部署
目录:分为两类
1。无头服务statefulset 2.

  

?部署有状态应用
?解决Pod独立生命周期,保持Pod启动顺序和唯一性

  
      <李>稳定,唯一的网络标识符,持久存储李   <李>有序,优雅的部署和扩展,删除和终止李   <李>有序,滚动更新
    应用场景:数据库李   
  
 <代码>说在前面的话,像我们的Mysql或者复述了,Zookerper等等这些适不适合部署在美丽中,其实呢不是太适合,但部署在里面也可以,比如部署一个Mysql来讲吧,部署到k8中还是很容易的就一个Mysql实例,就像部署其他应用一样,通过服务,IP去访问它,但是要是作为集群的状态去部署的话,那可能就比较麻烦了。
  第一点:比如做一个Mysql的主,从Mysql主从它是有主从拓扑关系的,一个主一个从,而且各自的数据都不一样,这就意味着,你要想搭建一个Mysql的主从,你要知道它的相互的ip地址,就是从肯定要知道主的ip地址,然后从连接主的ip地址,做数据的同步。
  第二点:它的存储,它两个存储的信息都不太一样,那怎么去保证它两个数据的存储保证持久化呢,一个集群中可能会有多个节点,要是部署到美丽中,必须要保证部署的应用,在任意的节点都能使用原来的状态,也就是说某一个节点挂了,上面的豆荚飘移到另一个节点,能不能用到之前的状态,所以要考虑这些问题。
  而k8设计的精髓在于并不是你部署一个单的实例,而是在于它的一个分布式一个部署,具有故障恢复能力的应用,所以就谈到了有状态和无状态应用。 
  

有状态应用:DB,好比一个Mysql主从,考虑两点(自己的存储,必须是远程的存储,在任意节点挂载都恢复原来的状态),而且还有网络ID的唯一,需要做主从的连接,我们的豆荚是短暂的,重建一个ip就换了,得保证这一个ip直去使用,不管是重建还是迁移仓,都能去使用。
无状态应用:典型的就是web系统,本身就没有什么状态去维护,比如部署了三个副本,不需要考虑其他两个副本是什么样的,跟它没有直接的关系,本地也没有什么持久化的数据,即使其中有一个副本挂了,帮它在其他节点起来,仍然可以继续提供服务,对原基础服务是没有任何影响的,所以这是一个前提,典型的就是网络。

  

在美丽中呢在1.10版本之后有状态部署才支持好一点,但是刚开始在落地美丽的时候,而不会去考虑有状态部署的,主要做无状态的部署,而数据库适不适合部署在美丽中,在看美丽的一些特性,美丽有适合的一些特性,比如具有一些访问比较大的应用,版本迭代快的应用,或者弹性伸缩的一些应用,凡是这些是适合放在美丽,美丽最早就支持无状态,也是一直在推荐,有状态的也是比较复杂,复杂点就在与有状态的都是一些集群化的,比如zookerper,
Mysql主从,这些都是需要自身的一个状态维护的,这些部署进去呢,可能去考虑它这个网络拓扑关系,还有存储状态的持久化,而数据库不具备这些特点,部署一个数据库一般配置比较高一些,可以会抗很多的并发量,而且要扩容的话也是很方便,而且传统的部署文章也很多,也比较成熟,在美丽中部署这些东西,那绝对是一种挑战,所以要根据不同的应用特点去考虑上美丽,不要一味地上美丽,而且得不偿失,达不到预期的效果,领导也会批你,所以在谈有状态部署的话,可以在两者出发,一个是无头服务维护网络的,一个是StatefulSet维护存储状态的。

  

statefulSet是一个控制器,与部署存在的原则一样,都是部署应用的,而statefulSet它主要是部署有状态应用的,而部署是部署无状态应用的

  

无头服务其实和服务差不多,这不过定义的这个叫无头服务,它们之间唯一的区别就是将集群ip设置为了没有,不会帮你配置ip

  
 <代码> # mkdir headless-service root@k8s-master演示
  # cd headless-service/root@k8s-master演示
  [root@k8s-master headless-service] # vim headless-svc.yaml
  apiVersion: v1
  类型:服务
  元数据:
  名称:我的服务
  规范:
  clusterIP:没有
  选择器:
  应用:nginx
  港口:
  ——协议:TCP
  端口:80
  发送:9376
  
  [root@k8s-master headless-service] # kubectl创建- f headless-svc.yaml
  创建服务/我的服务
  [root@k8s-master headless-service] # kubectl svc
  
  kubernetes ClusterIP 10.1.0.1 & lt; none>443/TCP 23 h
  我的服务ClusterIP没有& lt; none>80/TCP 6 s
  服务NodePort 10.1.207.32 & lt; none>80:30963/TCP 87米
  赵ClusterIP 10.1.75.232 & lt; none>80/TCP 9 m1
  zhaocheng ClusterIP 10.1.27.206 & lt; none>80/TCP 10 m 

Kubernetes进阶之StatefulSet有状态部署