首页 > kubernetes(k8s) > kubernetes|pod概念与网络通讯方式
2019
03-10

kubernetes|pod概念与网络通讯方式

POD概念

1.什么是pod

1.自主式(不被控制器管理的pod)

2.控制器管理的pod(如下图所示)

这里还要了解POD相关几个概念

Replication Controller(RC)

注意:新版本的建议使用RS来取代RC,因为RC支持集合式的selector(选择器)

ReplicaSets(RS)

Deployment(滚动更新)

  • 定义Deployment来创建Pod和ReplicaSet,因为RC不支持滚动更新,Deployment不支持pod创建,所以他两要放一起,各取所长,搭配干活
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续Deployment
如果是回滚,也就是退回原有应用或者镜像版本,道理是一样的,步骤如下
1.RS-2停止一个v2pod –> RS-1启动一个旧的v1pod
RS-2停止一个v2pod –> RS-1启动一个旧的v1pod

因为滚动升级,只是停止了pod,并不是删除,所以回滚启动就好了

Horizontal Pod Autoscaling(HPA)

Horizontal Pod Autoscaling可以根据CPU使用率或应用自定义metrics自动扩展Pod数量(支持replication controller、deployment和replica set)。

  • 控制管理器每隔30s(可以通过–horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况
  • 支持三种metrics类型
    • 预定义metrics(比如Pod的CPU)以利用率的方式计算
    • 自定义的Pod metrics,以原始值(raw value)的方式计算
    • 自定义的object metrics
  • 支持两种metrics查询方式:Heapster和自定义的REST API
  • 支持多metrics

StatefulSet( 解决有状态服务的问题 如mysql)

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

DaemonSet

DaemonSet可以保证集群中所有的或者部分的节点都能够运行同一份 Pod 副本 ,当有新的(节点)Node加入集群时,DaemonSet也会为他们新增一个Pod,当有节点被从集群中移除时,节点上的Pod也会被垃圾清除器回收。删除DaemonSet将会删除它创建的所有的Pod,daemonSet作用就像是计算机的守护进程,他能够运行集群存储,日志收集,和监控等[守护进程],这些服务一般都是集群必备的基础服务。

典型的应用包括:

  • 日志收集,比如fluentd,logstash等
  • 系统监控,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等
  • 系统程序,比如kube-proxy, kube-dns, glusterd, ceph等

Google Cloud 的 Kubernetes 集群就会在所有的节点上启动 fluentd 和 Prometheus 来收集节点上的日志和监控数据,想要创建用于日志收集的守护进程其实非常简单,我们可以使用如下所示的代码:

Job(批处理任务,仅执行一次,和linux的 定时任务 at 一样)

CronJob (定时任务,和linux的crontab一样)

服务发现:

网络通讯方式

1.同一个pod的,多个容器之间互相访问:

2.各个pod之间的通讯:Overl Network

这个是不在同一台机器的访问流程,如果是同一台机器的pod之间通信,那么直接通过docker0 网桥转发请求至pod2就可以就可以

那么上图中 ETCD 和 Flannel 之间有什么关系呢?

k8s主要组件一览

最后编辑:
作者:shooter
这个作者貌似有点懒,什么都没有留下。