• Kubernetes的初启(一)


    如果没有docker的基础,看这Kubernetes可能会有一点难度,如果想了解docker知识可以看我博客文章中docker的内容

    按以前习惯先把K8S的官网拿出来:https://kubernetes.io/docs/concepts/;在写下面内容之前先说下自己心得,百度是我们程序员的习惯,这没什么毛病,其实我在学习K8S时也百度了很多大牛的文章,但随着学习的深入,慢慢觉得其实官网权威性更高,并且在跟着官网学习的过程中,推翻了很多之前看过的大牛文章,由于K8s的技术文档在国内还不是很全,所以建议学习K8S技术的朋友还是在学到一定程度后习惯去官网求证及深度学习。

     一、简介

    Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

    Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。

    现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的将来会支持各种生产云平台中的各种服务,例如,分批,工作流,以及传统数据库。

    在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器,在后边的案例中,同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。一个Pod也可以包含O个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享,对于用户创建的每个Pod,系统会自动选择那个健康并且有足够容量的机器,然后创建类似容器的容器,当容器创建失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet,但是,如果是Pod失败或者机器,它不会自动的转移并且启动,除非用户定义了 replication controller。

    用户可以自己创建并管理Pod,Kubernetes将这些操作简化为两个操作:基于相同的Pod配置文件部署多个Pod复制品;创建可替代的Pod当一个Pod挂了或者机器挂了的时候。而Kubernetes API中负责来重新启动,迁移等行为的部分叫做“replication controller”,它根据一个模板生成了一个Pod,然后系统就根据用户的需求创建了许多冗余,这些冗余的Pod组成了一个整个应用,或者服务,或者服务中的一层。一旦一个Pod被创建,系统就会不停的监控Pod的健康情况以及Pod所在主机的健康情况,如果这个Pod因为软件原因挂掉了或者所在的机器挂掉了,replication controller 会自动在一个健康的机器上创建一个一摸一样的Pod,来维持原来的Pod冗余状态不变,一个应用的多个Pod可以共享一个机器。

    我们经常需要选中一组Pod,例如,我们要限制一组Pod的某些操作,或者查询某组Pod的状态,作为Kubernetes的基本机制,用户可以给Kubernetes Api中的任何对象贴上一组 key:value的标签,然后,我们就可以通过标签来选择一组相关的Kubernetes Api 对象,然后去执行一些特定的操作,每个资源额外拥有一组(很多) keys 和 values,然后外部的工具可以使用这些keys和vlues值进行对象的检索,这些Map叫做annotations(注释)。

    Kubernetes支持一种特殊的网络模型,Kubernetes创建了一个地址空间,并且不动态的分配端口,它可以允许用户选择任何想使用的端口,为了实现这个功能,它为每个Pod分配IP地址。

    现代互联网应用一般都会包含多层服务构成,比如web前台空间与用来存储键值对的内存服务器以及对应的存储服务,为了更好的服务于这样的架构,Kubernetes提供了服务的抽象,并提供了固定的IP地址和DNS名称,而这些与一系列Pod进行动态关联,这些都通过之前提到的标签进行关联,所以我们可以关联任何我们想关联的Pod,当一个Pod中的容器访问这个地址的时候,这个请求会被转发到本地代理(kube proxy),每台机器上均有一个本地代理,然后被转发到相应的后端容器。Kubernetes通过一种轮训机制选择相应的后端容器,这些动态的Pod被替换的时候,Kube proxy时刻追踪着,所以,服务的 IP地址(dns名称),从来不变。

    所有Kubernetes中的资源,比如Pod,都通过一个叫URI的东西来区分,这个URI有一个UID,URI的重要组成部分是:对象的类型(比如pod),对象的名字,对象的命名空间,对于特殊的对象类型,在同一个命名空间内,所有的名字都是不同的,在对象只提供名称,不提供命名空间的情况下,这种情况是假定是默认的命名空间。UID是时间和空间上的唯一。

    二、Kubernetes 能为您做什么

    借助现代 Web 服务,用户希望应用程序能够 24/7 全天候可用,而开发人员希望每天多次部署这些应用程序的新版本。容器化有助于打包软件以实现这些目标,使应用程序能够在不停机的情况下发布和更新。Kubernetes 可帮助您确保这些容器化应用程序在您希望的时间和地点运行,并帮助他们找到工作所需的资源和工具。Kubernetes 是一个可用于生产的开源平台,其设计结合了 Google 在容器编排方面积累的经验,并结合了来自社区的最佳创意。

     三、K8S核心组件和架构图

    (1)先以container为起点,k8s既然是容器编排工具,那么一定会有container
    (2)那k8s如何操作这些container呢?k8s不想直接操作container,因为操作container的事情是docker来做的,k8s中要有自己的最小操作单位,称之为Pod说白了,Pod就是一个或多个Container的组合
    (3)那Pod的维护谁来做呢?那就是ReplicaSet,通过selector来进行管理
    (4)Pod和ReplicaSet的状态如何维护和监测呢?Deployment
    (5)不妨把相同或者有关联的Pod分门别类一下,那怎么分门别类呢?Label
    (6)具有相同label的service要是能够有个名称就好了,Service
    (7)上述说了这么多,Pod运行在哪里呢?当然是机器咯,比如一台centos机器,我们把这个机器称作为Node 
    (8)Node肯定不会只有一个,肯定是多台Node共同组成集群才行
    (9)此时,我们把目光转移到由3个Node节点组成的Master-Node集群
    (10)这个集群要配合完成一些工作,总要有一些组件的支持吧;接下来我们来想想有哪些组件,然后画一个相对完整的架构图
    • 总得要有一个操作集群的客户端,也就是和集群打交道kubectl
    • 请求肯定是到达Master Node,然后再分配给Worker Node创建Pod之类的关键是命令通过kubectl过来之后,是不是要认证授权一下?
    • 请求过来之后,Master Node中要指定谁来接收,这个接收者就是APIServer
    • API收到请求之后,接下来调用哪个Worker Node创建Pod,Container之类的,得要有调度策略Scheduler https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/
    • Scheduler通过不同的策略,真正要分发请求到不同的Worker Node上创建内容,具体负责者是Controller Manager
    • Worker Node接收到创建请求之后,具体负责是Kubelet服务,最终Kubelet会调用Docker Engine,创建对应的容器(这边是不是也反应出一点,在Node上需要有Docker Engine,不然怎么创建维护容器)
    • 这是面会涉及到域名解析的问题,是DNS
    • Dashboard 监控面板监测整个集群的状态
    • ETCD 分布式存储 集群数据
    • 至于像容器的持久化存储,网络等可以联系一下Docker中的内容

    (11)不妨把这个图翻转一下方便查看 
     
     
     
     
  • 相关阅读:
    Java之美[从菜鸟到高手演变]之设计模式
    常见JAVA框架
    每周一荐:学习ACE一定要看的书
    YUV格式&像素
    关于makefile
    socket通信
    [理论篇]一.JavaScript中的死连接`javascript:void(0)`和空连接`javascript:;`
    [应用篇]第三篇 JSP 标准标签库(JSTL)总结
    [应用篇]第一篇 EL表达式入门
    KVM基本实现原理
  • 原文地址:https://www.cnblogs.com/xing1/p/15799632.html
Copyright © 2020-2023  润新知