前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从无到有基于腾讯云TKE部署Kubernetes全流程(二)

从无到有基于腾讯云TKE部署Kubernetes全流程(二)

原创
作者头像
蒋经纬
修改2020-06-23 17:53:16
8860
修改2020-06-23 17:53:16
举报
文章被收录于专栏:TKE学习分享TKE学习分享

TKE中Kuberntes集群已经部署完成后,现在我们需要了解哪些东西,为后续选型使用呢?

常用控制器类型

  • Deployment
  • DaemonSet
  • StateFulSet
  • Job/CronJob

Deployment

Deployment为Pod和ReplicaSet提供一个声明式定义(declarative)[1],用来替代以前的ReplicationController来方便的管理应用。

典型的应用场景包括;

  • 定义Deployment来创建Pod和ReplicaSet Deployment=>RS=>Pod
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续Deployment

DaemonSet

DaemonSet确保全部(或者一些)Node上运行一个Pod的副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod

使用DamonSet的一些典型用法:

  • 运行集群存储daemon,例如在每个Node上运行glusterd、ceph
  • 在每个Node上运行日志收集daemon,例如fluentd、logstash
  • 在每个Node上运行监控daemon,例如Prometheus Node Exporter、collectd、Datadog代理、New Relic代理,或Ganglia gmond

StatefulSet

StatefulSet作为Controller为Pod提供唯一的标识。它可以保证部署和scale的顺序;

StatefulSet是为了解决有状态服务的问题(对应Deployment和ReplicaSet是为无状态服务而设计),其应用场景包括:

  • 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现;
  • 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现;
  • 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前的Pod必须都是Running和Ready状态),基于init containers来实现;
  • 有序收缩,有序删除(即从N-1到0)。

Job

Job负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

CronJob

CronJob管理基于时间的Job,即:

  • 在给定时间点只运行一次;
  • 周期性地在给定时间点运行。

使用前提条件:当前使用的Kubernetes集群,版本>=1.8(对CronJob),对于先前版本的集群,版本<1,8,启动PI Server时,通过传递选项 --runtime-config=batch/v2alpha1=true 可以开启batch/v2alpha1API

典型的用法如下所示:

  • 在给定的时间点调度Job运行;
  • 创建周期性运行的Job,例如:数据库备份、发送邮件。

Service 的概念

Kubernetes Service 定义了这样一种抽象:一个pod的逻辑分组,一种可以访问它们的策略——通常称为微服务。这一组Pod能够被Service访问到,通常是通过 Label Selector

Service 的类型

Service在 Kubernetes 中有以下四种类型:

  • ClusterIP:默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP;
  • NodePort:在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过<NodeIP>:<NodePort> 来访问服务;
  • LoadBalancer:在NodePort的基础上,借助cloud provider 创建一个外部负载均衡器,并将请求转发到<NodeIP>:<NodePort>;
  • ExternalName:把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有Kubernetes1.7或更高版本的kube-dns才支持。

ClusterIP

ClusterIP主要在每个 node节点使用 iptables/ipvs,将发向 clusterIP对应端口的数据,转发到 kube-proxy中。然后 kube-proxy 自己内部实现有负载均衡的方法,并可以查询到这个 service 下对应 pod 的地址和端口,进而把数据转发给对应的 pod的地址和端口。

  • apiserver 用户通过kubectl 命令向apiserver 发送创建service的命令,apiserver 接收到请求后将数据存储到etcd中;
  • kube-proxy kubernetes 的每个节点中都有一个叫做 kube-proxy 的进程,这个进程负责感知service,pod的变化,并将变化的信息写入本地的iptables/ipvs规则中;
  • iptables/ipvs 使用NAT等技术将 virtualIP 的流量转至 endpoint中。

Headless Service

有时不需要或不想要负载均衡,以及单独的Service IP。遇到这种情况,可以通过指定 Cluster IP(spec.clusterIP)的值为“None”来创建Headless Service。这类Service 并不会分配Cluster IP,kube-proxy 不会处理它们,而且平台也不会为它们进行负载均衡和路由。<无头服务>

NodePort

nodePort 的原理在于在 node 上开了一个端口,将向该端口的流量导入到 kube-proxy,然后由 kube-proxy 进一步到给对应的 pod。

LoadBalancer

loadBalancer 和 nodePort 其实是同一种方式。区别在于loadBalancer 比 nodePort 多了一步,就是可以调用 cloud provider 去创建 LB 来向节点导流。

Service 能够提供负载均衡的能力,但是在使用上有以下限制:

  • 只提供4层工作负载均衡能力,而没有7层能力,但有时我们可能需要更多的匹配规则来转发请求,这点上4层负载均衡是不支持的,所以Kuberntes有另外一个东西 Ingress 来解决7层的代理策略。

总结:

对于控制器的选择:

  • 无状态服务一般常用 Deployment;
  • 有状态服务类型各种 DB采用 StatefulSet的方式,并且搭配不同的PV/PVC从而实现持久化

对于Service的选择:

  • 无状态服务常用 ClusterIP,配合Ingress进行根据域名路径的匹配调度;
  • 有状态服务则可以采用Headless Service的方式,直接解析出对于的Pod地址进行访问,免去调度环节;
  • NodePort则是解决部分服务服务需要集群外部访问,而又不想通过Ingress,且不想使用LoadBalancer;
  • LoadBalancer则是云服务商提供的一种方案,由云服务商直接处理代理,内网外网环境均可选择;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常用控制器类型
    • Deployment
      • DaemonSet
        • StatefulSet
          • Job
            • CronJob
            • Service 的概念
            • Service 的类型
              • ClusterIP
                • Headless Service
                  • NodePort
                    • LoadBalancer
                    • 总结:
                    相关产品与服务
                    负载均衡
                    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档