• K8s


    Kubernetes1-K8s的简单介绍

     
    分类: Kubernetes

    一、简介

      1、什么是Kubernetes

        简称K8s,用8代替8个字符“ubernerte”而成的速写,K8s是一个开源的容器编排平台,它是一个跨主机集群的开源容器调度平台,用于管理云平台中多个主机上的容器化的应用,它可以自动化应用容器的部署、扩展、的操作,k8s的目标是让部署容器化的应用简单并且高效,构建一个软件和工具的生态系统,以减轻企业在公有云或私有云运行应用程序的负担,;K8s提供了应用部署、规划,更新,维护的一种机制。

        K8s项目由Google公司在2014年启动,Kubernetes建立在google公司超过十余年阿运维经验基础之上,Google所有的应用都运行在容器上,再与社区中最好的想法和实践相结合,也许它是现在最受欢迎的容器平台。

      2、使用K8s可以快速高效响应客户的需求:

        快速、可预测地部署您的应用程序

        拥有即使扩展应用程序的能力

        不影响现有业务的情况下,无缝地发布新功能

        优化了硬件资源,降低成本

      3、K8s具有如下特点:

        便捷性:无论公有云、私有云、混合云还是多云架构都全面支持

        可扩展性:它是模块化、可插拔、可挂载、可组合,支持各种形式的扩展

        自修复:它可以自保持应用状态、可自重启、自复制、自缩放的,通过声明式语法提供了强大的自修复能力

      4、三个时代说明,K8s为什么如此有用

        

        传统部署时代:早期,组织都是再物理服务器上运行应用程序,无法位物理服务器中的应用定义资源边界,着会导致资源分配问题。比如,如果再物理服务器上运行多个应用程序,可能会出现一个应用占用大部分资源,其他应用程序的性能就将下降,解决方案往往是在不同服务器上运行每个应用程序,但这并没有随着资源利用不足而扩展资源,并且维护诸多物理服务器成本也很高。

        虚拟化部署时代:为了解决上面提到的资源分配问题,引入了虚拟化,它允许在单个物理服务器的CPU上允许多个虚拟机(VM)。虚拟化允许应用程序在VM之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一个应用程序自由访问。

                虚拟化可以更好的利用物理服务器中资源,并可以实现更好的可伸缩性,因为可以轻松地添加或更新应用程序,降低硬件成本等等。借助虚拟化,您可以将一组物理资源呈现位一组一次性虚拟机。

                每个VM是一台完整的计算机,在虚拟化硬件上运行所有组件,包括其自己的操作系统

        容器部署时代:容器类似VM,但是他们具有轻松的隔离属性,可以在应用程序之间共享操作系统。因此,容器被认为是轻量的,与VM相似,容器具有自己的文件系统,CPU,内存,进程空间等。由于他们与基础架构分离,因此可以跨云和OS分发进行移植

      5、补充使用容器的好处

        敏捷的应用程序创建和部署:与使用VM镜像相比,容器镜像创建的简便性和效率更高。

        持续的开发,集成和部署:通过快速简单的回滚(镜像不可更改),提供可靠且频繁的容器镜像构建和部署。 

        开发和运营的关注点分离:在构建/发布时,而不时在部署时创建应用程序容器镜像,从而将应用程序与基础架构分离。

        可观察性不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他信号。

        跨开发,测试和生成环境一致性:在便捷式计算机上与在云中相同的运行。

        云和操作系统分发的可移植性:可在Ubuntu,RHEL,coreOS,本地,google kubernetes engine和其他任何地方运行。

        松散耦合,分布式,弹性,解放的微服务:应用程序被分解成较小的独立部分,并且可以动态部署和管理,而不时在一台大型单机上运行的整体堆栈。

        资源隔离:可预测的应用程序性能。

        资源利用:高效率和高密度。

      6、K8s提供了哪些功能

        服务发现和负载均衡

          K8s可以使用DNS名称或使用其自己的IP地址公开容器。如果到容器的流量很高,K8s可以负载均衡分配流量,使部署稳定

        存储编排

          允许自动挂载选择的存储系统,例如本地存储,公有云提供商等。

        自动部署和回滚

          可以使用Kunbernetes描述已经部署容器的所需状态,并可以以控制速率将实际状态更改所需状态。比如可以自动化Kubernetes来位您的部署创建新容器,删除现有容器并将他们的所有资源用于新容器

        自动包装

          一个Kubernetes集群,可以用于容器化任务,可以指定每个容器需要多少CPU和内存,使其充分利用资源。   

        自检

          Kubernetes可以重新启动失败的容器,替换容器,杀死对用户定义的运行状态检查没有响应的容器,并且在准备好服务之前不会将其通告给客户端

        加密管理

          Kubernetes允许存储和管理敏感信息,如密码,auth令牌和ssh密钥,可以部署和更新机密的应用程序配置,而无需重新构建容器镜像,也无需在堆栈配置中公开。

      7、kubernetes不是什么

        不是一个传统意义上包罗万象的Paas系统,它保留用户的自由选择,比如:

          不限制支持的应用程序类型,不限制应用程序框架,不限制支持的语言(java/python/ruby)支持多种多样的工作负载,包括无状态,有状态和数据处理工作负载。

          不提供内置服务的中间件(例如:消息中间件)、数据处理框架(例如:spark)、数据库(例如:mysql)和分布式存储(例如Ceph),这些应用可以允许在K8s上。

          没有提供点击即部署的服务市场。

          源代码到镜像都是开源的,它不部署源代码且不构建您的应用程序。持续集成,交付和部署(CI/CD)工作流取决各公司组织的文化和偏好。

          允许用户选择其他的日志记录,监控和告警系统,(它也提供一些集成作为概念证明)。

          不提供也不要求应用程序配置语言/系统,提供一个声明性API,可以通过任意形式的声明性规范。

          不提供也不采用任何全面的机器配置,维护,管理或自动修复系统。

         另外许多Paas系统运行在K8s上面,比如openshift,deis,eldarion,可以自定义自己的paas与自己选择的CI系统集成,或与K8s一起使用,将容器镜像部署到K8s上。

        由于K8s在应用级别而不是仅仅在硬件级别运行,因此它提供Paas产品通用的一些功能,如:部署、扩展、负载均衡、日志记录、监控等。但是K8s不是单一的,默认是可选和可插拔的。

        K8s也不仅仅是一个编排系统,它消除了编排的需要,编排代表工作流的执行为从A到B,然后到C,相反,K8s是包括一套独立、可组合的控制过程,通过声明式语法使其连续地朝向期望状态驱动当前状态,不需要告诉它具体的从A到C的过程,只需要告诉到C的状态即可,也不需要集中控制,这使得系统更易于使用,并且强大,更具有弹性和扩展性。

      

    二、K8s架构

      1、整体架构

    三、常见组件

        请见图示1:分别包含1、2、3、4

            

      1、master:

        Kubernetes管理节点

      2、apiserver:

        提供接口服务,用户通过apiserver来管理整个容器集群平台。API Server负责和Etcd交互(其他组件不会直接操作etcd,只有API Server这么做),整个Kubernetes集群的所有交互都是以API server为核心的。如:1、所有对集群进行的查询和管理都要通过API来进行;2、所有模块之间并不会互相调用,而是通过和API Server打交道来完成自己那部分的工作、API Server提供的验证和授权保证了整个集群的安全

      3、scheduler Kubernetes 调度服务:

      4、Replication Controllers 复制:

         保证pod的高可用

         Replication Controller是Kubernetes系统中最有用的功能,实现复制多个Pod副本,往往一个应用需要多个Pod来支撑,并且可以保证其复制的副本数,即使副本所调度分配的宿主机出现异常,通过Replication Controller 可以保证在其它宿主机启用同等数量的Pod。Replication Controller 可以通过repcon模板来创建多个Pod副本,同样也可以直接复制已存在Pod,需要通过Label selector来关联

        请见图示2:包含5、6、7、8

      5、minion:

        真正运行容器container的物理机。Kubernets中需要很多minion集群,来提供运算

      6、container:

        容器,可以运行服务和程序

      7、Pod:

        Kubernetes系统中,调度的最小颗粒不是单纯的容器,而是抽象成一个Pod,Pod是一个可以被创建、销毁、调度、管理的最小部署单元。pod中可以包括一个或一组容器。

          pod:豆荚的意思,如下图示理解pod及容器实例:

      8、Kube_prox 代理:

        做端口转发,相当于LVS-NAT模式中的复制调度器

        Proxy解决了同一宿主机,相同服务端口冲突的问题,还提供了对外服务的能力,Proxy后端使用了随机、轮询负载均衡算法。

          

      9、etcd:

        存储Kubernetes的配置信息,可以理解为K8s数据库,存储这K8s容器平台所有节点、pods、网络等信息

      10、services:

        services是Kunbernetes最外围的单元,通过虚拟一个访问IP及服务端口,可以访问我们定义好的Pod资源。目前的版本是通过iptables的nat转发来实现,钻发的目标端口为Kube_proxy生成的随机端口。

      11、Lables标签:

        Lables是用于区分Pod、Service、Replication Controller的key/value键值对,仅使用在Pod、Service、Replication Controller之间的关系识别,但对这些单元本身进行操作时得使用name标签。

      12、Deployment部署

          Kubernetes Deployment用于更新Pod和Replica Set(下一代的Replication Controller)的方法,可以在Deployment对象中只描述你所期望的理想专题(预期运行状态),Deployment控制器会将现在的实际状态转换成期望的状态。例如,将所有的webapp:v1.0.9升级成webapp:v1.1.0,只需要创建Deployment,Kubernetes会按照Deployment自动进行升级,通过Deployment可以用来创建新的资源

          Deployment可以帮我们实现无人值守的上学,大大降低我们上线的复杂和风险

      13、Kubelet命令

          Kubelet和Kube-proxy都运行在minion节点上

          Kube-proxy实现Kubernetes网络相关内容

          Kubelet命令管理pod、pod中容器机让其的镜像和卷等信息

      14、总结:各组件之间的关系

        1)、kubernetes由一个master和多个minion组成,master通过api提供服务接收kubectl的请求来调度管理集群,kubectl是k8s平台的一个管理命令

        2)、Replication controller定义了多个pod或者容器需要运行,如果当前集群中运行的pod或容器达不到配置的数量,replication controller会调度容器在多个minion上运行,保证集群中的pod数量

        3)、service则定义真实对外提供的服务,一个service会对应后端运行的多个container。

        4)、Kubernetes是一个管理平台,minion上的kube-proxy拥有提供真实服务公网IP,客户端访问K8S中提供的服务,是直接访问到kube-proxy上的。

        5)、在kubernetes中pod是一个基本单元,一个pod可以是提供相同功能的多个container,这些容器会被部署在同一个minion上,minion是运行Kubelet中容器的物理机,minion介绍master的指令创建pod或者容器。

    随笔分类 - Kubernetes

     
    摘要:一、简介 1、环境依旧是kubernetes之前文章的架构 2、需要docker的镜像 1)php-forntend web 前端镜像 docker.io-kubeguide-guestbook-php-frontend.tar 2)redis master docker.io-kubeguide- 阅读全文
    posted @ 2019-11-13 16:13 乐章 阅读 (72) | 评论 (0) 编辑
     
    摘要:一、简介 1、环境 环境还是前面的环境 2、Kubernetes Dashboard web界面 kubernetes dashboard (仪表盘)是一个将通用的基于web的监控和操作界面加入kubernetes的项目 二、开始部署yaml配置文件 1、创建/编辑deployment [root@ 阅读全文
    posted @ 2019-11-12 17:46 乐章 阅读 (39) | 评论 (0) 编辑
     
    摘要:一、kubectl管理集群中deployment资源与service服务 1、相关参数 kubectl edit 编辑服务器侧资源 kubectl replace 替换,使用 yaml 配置文件来替换正在运行中的配置参数 kubectl patch 部分更新资源相关信息 kubectl apply 阅读全文
    posted @ 2019-11-07 18:52 乐章 阅读 (32) | 评论 (0) 编辑
     
    摘要:一、简介 1、什么是kubectl kubectl前面其实已经用到了一些,它其实就是用于操作kubernetes集群的命令行接口,通过kubectl的各种命令实现各种功能 2、环境还是用上一偏文章 Kubernetes2-K8s的集群部署 3、架构图 二、kubectl-创建/删除一个pod得相关操 阅读全文
    posted @ 2019-11-06 18:17 乐章 阅读 (40) | 评论 (0) 编辑
     
    摘要:一、简介 1、架构参考 Kubernetes1-K8s的简单介绍 2、实例架构 192.168.216.51 master etcd 192.168.216.53 node1 192.168.216.54 node1 3、拓扑 4、软件版本 [root@master ~]# cat /etc/red 阅读全文
    posted @ 2019-10-30 12:37 乐章 阅读 (117) | 评论 (0) 编辑
     
    摘要:一、简介 1、什么是Kubernetes 简称K8s,用8代替8个字符“ubernerte”而成的速写,K8s是一个开源的容器编排平台,它是一个跨主机集群的开源容器调度平台,用于管理云平台中多个主机上的容器化的应用,它可以自动化应用容器的部署、扩展、的操作,k8s的目标是让部署容器化的应用简单并且高 阅读全文

    转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/11670786.html

    部署:请见Kubernetes2-K8s的集群部署

    kubectl:请见Kubernetes3-kubectl管理Kubernetes容器平台-1 

    kubectl:请见Kubernetes3-kubectl管理Kubernetes容器平台-2  

    Kubernetes Dashboard web界面:请见Kubernetes4-web管理界面

    kubenetes 基于redis和docker的留言薄:请见Kubernetes5-集群上搭建基于redis和docker的留言薄

  • 相关阅读:
    [Leetcode]847. Shortest Path Visiting All Nodes(BFS|DP)
    [Lintcode]Word Squares(DFS|字符串)
    [Lintcode]Inorder Successor in Binary Search Tree(DFS)
    xampp搭建discuz论坛
    Codeforces Round #459 (Div. 2):D. MADMAX(记忆化搜索+博弈论)
    网址备份
    java并发系列
    java创建多线程
    (转)深入理解Java内存模型之系列篇
    (转)Java并发编程:线程池的使用
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/12082164.html
Copyright © 2020-2023  润新知