zoukankan      html  css  js  c++  java
  • Kubernetes中各组件简介(一)

    一、K8S的架构图

    k8s的单主机集群部署方案

    k8s集群的私有仓库harbor

    1,Master(管理节点)

      kubectl:是客户端的管理工具。

      API Server: 供Kubernetes API接口,主要处理Rest操作以及更新Etcd中的对象。所有资源增删改查的唯一入口。

      Scheduler: 绑定Pod到Node上,资源调度。

      Etcd:所有持久化的状态信息存储在Etcd中。

      controller-manager:负责维护集群状态如故障检测,自动更新处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

    2,Node(计算节点)

      Kubelet:是Master在Node节点上的Agent,管理Pods以及容器、镜像、Volume等。

      Kube-proxy:提供网络代理以及负载均衡,实现Service通讯。

    二、Pod(资源池)

      每个Pod都会存在一个Pause根容器,是每一个Pod都会去运行的,container即为应用程序,所以Pod就是根容器Pause和应用程序container所组成,在Pod当中可以运行多个小的容器的。

    1,Pod组成的意义

    •   使用Pause根容器可以防止由于将多个容器组成一个单元,当其中某个容器挂掉就会导致整个单元无法使用的情况发生。
    •   Pod可以运行过个container,这些container是共享Pause根容器的IP地址,也共享Pause的volume挂债卷,这样既简化了关联业务容器之间的通信问题,也很好的解决了容器之间共享的问题
    •   在Kubernetes中的Pod之间是可以进行相互通信的,因为他们之间是一个二层交换的网络,所以不同主机之间Pod是可以进行相互访问的

    2,Pod类型划分

      静态Pod:不会将状态存放到Etcd存储数据库中,而是放到了某个Node上的具体文件当中,并且只有在这个Node上才能启动运行

      普通Pod:普通Pod一旦被创建成功,那么Pod状态信息就会放到Etcd存储数据库当中,状态就会实时进行更新,就会被Master节点绑定到某个Node节点上进行调度和资源分配,随后Pod就放到了指定的Node上面,相当于把一个应用实例化成了一组相关Docker容器并启动去运行

    3,Pod、容器与Node之间的关系

    •   在Node当中运行着Pod,而在Pod当中是包含着容器。
    •   在K8s当中都是以Docker镜像发布的,每个Pod可以理解为上面运行着多个镜像,在默认情况下,比如在Pod当中某个容器停止了,K8s会自动检查这个问题并重启这个Pod(即将Pod当中的所有容器全部重启)
    •   如果Pod所在的Node宕机了,K8s会把Pod调度到其他的Node节点上
    •   Pod当中是可以运行多个应用的,即支持多容器运行,每一个Pod相当于一个资源池,Pod当中的容器可以共享IP和文件系统

    三、其它资源对象

    1,Replication Controller

      通过定义RC来实现Pod的创建过程与自动控制,在RC当中包含着一个完整的Pod模板,通过Label标签机制对Pod实现自动控制:通过改变RC里面的Pod数量可以实现Pod的扩容和缩容;通过改变RC里面模板的镜像版本可以实现Pod的滚动升级功能。

    2,Service

      Kubernetes中一个应用服务会有一个或多个实例(Pod,Pod可以通过rs进行多复本的建立),每个实例(Pod)的IP地址由网络插件动态随机分配(Pod重启后IP地址会改变)。为屏蔽这些后端实例的动态变化和对多实例的负载均衡,引入了Service这个资源对象,如下所示:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
      labels:
        app: nginx
    spec:
      type: ClusterIP #clusterIP: None这种就是Headless Service
      ports: 
      - port: 80 #svc端口
        targetPort: 80 #目标后端端口
        #nodePort: 30080 自定义nodePort端口 其中type要为NodePort类型
      selector:  #service通过selector和pod建立关联
        app: nginx

      根据创建Service的type类型不同,可分为4中模式:

    • ClusterIp:默认类型,自动分配一个仅 Cluster 内部可以访问的虚拟 IP。普通Service:通过为Kubernetes的Service分配一个集群内部可访问的固定虚拟IP(Cluster IP);Headless Service:DNS会将headless service的后端直接解析为podIP列表。
    • NodePort:在 ClusterIP 基础上为 Service 在每台机器上绑定一个端口,这样就可以通过 : NodePort 来访问该服务。
    • LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部负载均衡器,并将请求转发到: NodePort 。
    • ExternalName:把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有 kubernetes 1.7 或更高版本的 kube-dns 才支持

    3,Deployment

      Deployment是为了解决Pod编排的问题,在内部使用RS。部署表示用户对K8s集群的一次更新操作。可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。滚动升级一个服务,实际是创建一个新的RS,然后逐渐将新RS中副本数增加到理想状态,将旧RS中的副本数减小到0的复合操作;这样一个复合操作用一个RS是不太好描述的,所以用一个更通用的Deployment来描述。Deployment是RC最大的升级。

    4,Replica Set

      RS是新一代RC,提供同样的高可用能力,区别主要在于RS后来居上,能支持更多种类的匹配模式,副本集对象一般不单独使用,而是作为Deployment的理想状态参数使用。

    5,DaemonSet

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

      使用 DaemonSet 的一些典型用法运行集群存储 daemon,例如在每个 Node 上运行 glusterdceph;日志收集,比如fluentd,logstash等;系统监控,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等;系统程序,比如kube-proxy, kube-dns, glusterd, ceph等。

      使用Fluentd收集日志的例子: 

    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: fluentd
    spec:
      template:
        metadata:
          labels:
            app: logging
            id: fluentd
          name: fluentd
        spec:
          containers:
          - name: fluentd-es
            image: gcr.io/google_containers/fluentd-elasticsearch:1.3
            env:
             - name: FLUENTD_ARGS
               value: -qq
            volumeMounts:
             - name: containers
               mountPath: /var/lib/docker/containers
             - name: varlog
               mountPath: /varlog
          volumes:
             - hostPath:
                 path: /var/lib/docker/containers
               name: containers
             - hostPath:
                 path: /var/log
               name: varlog
  • 相关阅读:
    android中正确保存view的状态
    使用AudioTrack播放PCM音频数据(android)
    【录音】Android录音--AudioRecord、MediaRecorder
    (原创)初识cordova(一)
    忽略git中不需要进行版本管理的文件
    GitHub 小试
    通过View.post()获取View的宽高
    org.json.JSONObject的getString和optString使用注意事项
    android---EditText的多行输入框
    【转】我赌5毛你没见过这样的SpannableString
  • 原文地址:https://www.cnblogs.com/bbgs-xc/p/13606178.html
Copyright © 2011-2022 走看看