为了账号安全,请及时绑定邮箱和手机立即绑定

Kubernetes基础:开启云原生之门

难度中级
时长 1小时43分
学习人数
综合评分8.87
26人评价 查看评价
9.3 内容实用
8.6 简洁易懂
8.7 逻辑清晰
  • 5-2 Master组件

    Master组件是K8s Pod集群逻辑上的控制中心(一个Pod有若干个master节点和若干个普通nodes节点)

    master内基本组件:API Server;Scheduler;Controller Manager;Etcd;


    Master组件是K8S的Pod集群的控制平面:

        每个pod集群的控制命令都会传递到master组件并执行;

        每个k8s的集群都至少有一套master组件,如果master组件失效,怎么失去对k8s pod集群的控制,所以一般会定义多个master组件实现k8s集群的高可用控制能力。

        每个master组件都包括api server, scheduler,controller manager三个组件和一个etcd配置中心数据库

    ---

    API Server是master组件的中枢(之所以说控制命令都要经过master,最主要是因为master内的API Server),master中其他组件都通过API Server的API接口实现各自的功能,

        是提供k8s集群控制RESTFUL API的唯一组件,即集群控制的唯一入口;

        是集群内,各个组件通信的中枢;(不仅内外通讯,而且内内通讯也要经过API Server)

        只有API Server(master节点)才能与Etcd通讯(增删改),其他组件只能通过API Server访问执行状态???(非master访问Etcd只能得到状态信息???:查)

        API Server提供集群控制的安全机制

    ---

    Scheduler

        先通过API Server的Watch接口监听到新建Pod副本信息后,通过调度算法为该Pod选择一个最合适的Node

        支持自定义调度算法

        默认调度算法先预选再优选

    ---

    ControllerManager

        集群内部的管理控制中心,管理k8s对象模型之一Controller

        针对每一种具体资源都有相应的controller,而controllerManager管理每个controller,使旗下的资源始终处于“期望状态”;每个controller通过API Server提供的接口,实时监控每个资源对象的当前状态。

      (每个controller的运行逻辑:获取资源期望状态,获取资源当前状态,将当前状态转变成期望状态)

    ---

    Etcd 是k8s集群主数据库,保存资源对象和状态信息

        默认与master组件部署在一个node上;如果希望在生产环境部署高可用的k8s集群,就要先部署高可用的Etcd集群,作为k8s的后端数据库

        Etcd的数据变更,安全管理通过API Server进行,k8s各个组件实时通过API Server的Watch接口跟踪比对Etcd资源期望状态和实际状态的差异,自动恢复资源到期望状态,实现资源控制的目的,手工修改Etcd的数据是不被推荐的


    00:07
    看视频
  • 5-1 k8s架构全图解释

    k8s集群是由一组节点nodes组成,节点可以是物理服务器,可以是虚拟机,k8s平台就运行在这些节点上面;

    每个节点上都安装了node组件(kubelet,kube-proxy),

    其中安装了master组件的叫作master node,老版本也成为miniNodes,他们是真正运行负载的节点。

    miniNodes的node组件的kubelet跟master node交互,维护miniNodes的pod的生命周期。

    数据存储中心 etcd,是一个数据库,存储了所有对象和状态

    集群维护的命令行工具kubectl,用户以命令行方式与集群交互,操作集群

    02:56
    看视频
  • 4-1 演示service,pod的部署,pod伸缩等功能

    官方推荐先部署service再部署Pod,因为部署容器pod的时候,会把service信息以环境变量的形式注入到pod,

    官方推荐用内部DNS域名访问service,而不推荐用环境变量访问,兼容了以前必须依赖环境变量访问的应用。

    k8s常用yaml定义对象

    (注意:k8s总是安装在linux,所以熟悉Linux命令是基础)

    yaml常见键值对意义:

    apiVersion:当前yaml使用的api版本

    kind:声明对象类型

    metadata:

        name:定义元数据的name

    spec:规格说明

        type:声明kind的类型,NodePort将服务暴露到k8s集群之外

        selector:跟label xxx匹配后选项

            app:......

    ports:一组poort,跟spec.type对象,用NodePort表示这里的port是每台node监听的端口,

        port:虚拟的端口,不真实存在

        targetPort:容器监听的端口,到达service的流量会被负载均衡到targetPort上

        nodePort:向外暴露的访问端口,外网访问的就是它

    通过create命令创建service服务

    kubectl create -f 配置文件.yaml --record

    通过get命令查看命令是否创建成功了

    kubectl get svc|grep 服务名

    通过describe查看详细信息

    kubectl describe svc/服务名

    (如果没有部署pod,那么Endpoints对象为none)

    如果此时访问:curl ip地址:nodePort/服务,就会被refused拒绝

    ---

    k8s服务有自动注册,发现机制,通过内部DNS供多服务发现,交互

    使用run命令启动busybox容器查看服务内部发现地址,即内部域名

    kubectl run -i --tty busybox --image=busybox --restart=Never

    在busybox使用nslookup命令查看DNS地址

    nslookup 服务名

    ---

    部署pod

    官方推荐不直接部署pod,而是通过deployment controller部署pod,(怕我们配置得不完全吧?)

    linux查看定义好的deployment controller的yaml配置文件

    vi 文件名

    spec:

        replicas:   部署后pod的个数

        template:pod的模板类型,子对象都是模板的具体配置信息

            metadata:模板元信息

                labels:  通过这个label匹配pod

                    app:

            spec:是pod的规格信息,包括容器的名字,镜像信息,镜像拉取...

    通过kubectl的create命令创建deployment

    kubectl create -f hello-deployment.yaml --record=true

    通过get命令查看deployment创建结果

    kubectl get deployments

    出现一个列表,desired:期望的pod的副本数,current:当前存在pod的副本数,up-to-date:升级到最新的副本数,available:可以给客户提供服务的pod副本数,age:部署了多久

    再敲一次查看服务详情,可以发现EndPoint有两个pod的地址了

    再访问一次service,接收请求并通过自动选择容器处理服务逻辑,并响应请求

    ---

    测试pod的负载均衡

    先查看pod信息

    kubuctl get pods|grep 服务名

    复制pod名,新开命令行,实时监测运行日志的查看pod在接收到请求后的处理信息

    kubuctl logs -f pod名

    再通过curl发起多次请求,

    ---

    服务伸缩

    根据服务流量大小改变pod的副本数,可以自动?

    手动修改pod的副本数,直接修改depoloyment配置文件:

    使配置文件生效命令:

    kubectl apply -f 配置文件

    查看pod副本命令:

    发起多次请求

    ---

    服务的版本升级和回退

    spec.template.spec.containers.image是容器版本,可以手动修改,

    保存,再apply生效

    然后用rollout status命令升级容器

    kubectl rollout status deployment/xxx-deployment

    发出请求,查看pod的版本信息

    undo命令是回退到上一版本:

    kubectl rollout undo deployment/xxx-deployment

    发出请求,查看pod的版本信息


  • 4-1 k8s集群初体验

    居然说这个DEMO相当于编程语言的Hello world?

    这是一个单service的应用,service后面是若干个实际支撑的Pod,Pod由Deployment控制器进行部署 外部发送到Hello Service的某个请求被自动负载均衡到某个Pod业务容器,容器返回Hello Kubernetes字样的应答。

    演示环境:一个master,两个node

    kubernetes集群v1.7.3;镜像仓库hub.docker.com;

    kubernetes 提供的kubectl命令kubectl get nodes获取集群的节点列表

    01:18
    看视频
  • 3-3

    云原生应用的k8s相当于传统云平台应用的linux,或者说,k8s就是云平台的linux

  • 3-2

    k8s是容器编排管理平台

    相对于传统的虚拟化技术,容器技术在镜像大小,执行效率,资源利用率方面都有较大优势,但是单一容器并不能给开发者带来太大帮助,从虚拟机过度到容器显得没有必要,多容器需要并发协同工作,支持跨主机管理才有意义,我们需要一个多容器管理平台,k8s是解决方案之一。

    管理特点:pod,controllers,configmap,secret等;资源配额与分配管理;健康检查,自愈,伸缩,滚动升级。

    k8s是微服务支撑平台

    k8s采用微服务架构,

    支撑特点:服务发现,服务编排,路由支撑;快速部署,自动负载均衡;对有状态服务的支持。

    k8s相当于新一代openstack,是可移植的云平台

    docker将k8s集成到调度引擎等等,k8s成为通用层

    平台特点:为用户提供简单一致的应用部署,伸缩,管理机制;云上应用可以跨云迁移或混用云供应商。

    为什么选择k8s作为容器标准

    生态角度:成熟先进;传统云供应商全面支持

    功能角度:使应用摆脱锁定,支持跨云;先进的Pod,Controllers管理模式;支持微服务抽象:服务注册,发现和自动负载均衡

  • 3-1 k8s是什么

    功能角度,容器的管理平台;应用角度,微服务的支撑平台;生态圈角度,可移植的云平台。


  • 2-1

    模式变迁:

    从前,以物理机为基本单元管理应用。想部署新应用,需要购买一台/一组新的物理机器,应用直接在物理机上构建部署,运行,大多数都是一对一定制版。

    代表:IBM,Sun

    然后,为了提高计算机资源利用率和降低使用应用成本,以拆分物理机,聚合离散计算机资源的方式,将一台物理机拆分成若干个虚拟机,即虚拟机作为基本计算单元管理应用。

    解决方案代表:VMware,Xen,KVM

    谷歌的基于虚拟化推出了AWS,开启了基础设施即服务IaaS的市场

    接着,虚拟化成熟期,OpenStack发布,又称云计算时代,以云的形式部署应用,

    解决方案代表:IaaS,PaaS平台即服务,SaaS软件即服务

    全球企业有一半计算资源都放到了公有云上,

    解决方案代表:AWS,Azure,阿里云,谷歌云

    后来,云的弊端也凸显了,启动慢,效率低,每个云是定制的,移植性差,就在这时候,Docker公司整合了已有技术,推出内核容器技术的标准镜像,与虚拟机相比,效率高,移植性好,启动快,计算基本单元从虚拟机变成了Docker容器镜像,

    但是光有容器不能完全体现虚拟机过渡到容器的优势,所以又提出了云原生概念,基于容器推出一整套原生环境,更加智能,敏捷地管理应用。

    13:54
    看视频
  • 1-1 

    k8s打败Docker的Swarm和Apache的Mesos,成为企业容器管理的首选,

    存在意义:成为云计算时代,新一代应用上,云的首选支撑(部署,运行,管理)

    人工智能,区块链,k8s,都是当今热门技术

  • 应用部署运行模式发展

    01:15
    看视频
  • 云原生模式: 借助容器管理自动化平台进行动态编排和资源优化利用

    12:30
    看视频

举报

0/150
提交
取消
课程须知
1、熟悉基本Linux操作 2、了解Docker容器概念与原理 3、了解基本docker命令操作
老师告诉你能学到什么?
1、Kubernetes是什么? 2、为什么要使用Kubernetes? Kubernetes给开发者带来哪些好处? 3、如何在Kubernetes集群上部署和管理一个应用 4、Kubernetes的架构 5、Kubernetes的组件与功用 6、Kubernetes对象模型以及基础概念
意见反馈 帮助中心 APP下载
官方微信