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

Kubernetes基础:开启云原生之门

难度中级
时长 1小时43分
学习人数
综合评分88.3
25人评价 查看评价
9.3 内容实用
8.6 简洁易懂
8.6 逻辑清晰
  • 将的非常好、易于理解
  • Kubernetes对象常用的Metedata属性-Name&UID

    01:24
    看视频
  • 6-4  常用的工作负载类、配置和存储类对象讲解

    Pod的生命周期

    phase:是Pod生命周期所处位置的概括,从phase的值可以反映Pod生命周期形态

    Pending:挂起,创建,部署阶段,pod已经被k8s集群接受,但有一个或多个容器镜像尚未创建,即Pending阶段是通过网络下载容器镜像,调度Pod等 等待时间

    Running Pod已经绑定到一个节点上,Pod中所有容器已经被创建,并且至少有一个容器正在启动或运行或重启

    Succeed 此时Pod所有容器被成功终止,并且不会再重启

    Failed Pod容器都已经被终止了,并且至少有一个容器因失败而终止,即容器以非0状态退出导致系统终止的

    (被废除的unknown:以未知原因无法取得Pod状态)

    ---

    Service:服务发现,负载均衡Load balance的核心对象

    前言:Pod是一个非持久性的实体对象,通常会由各种原因被终止,每次重启ip地址都会改变,所以Pod的ip地址是不能被稳定依赖的;问题来了,pod的ip地址不可靠前提下,我们怎么发现并连接到Pod呢,于是有了Service抽象概念。

    Service:与云原生应用的“微服务”概念一一对应

        k8s为每个Service分配一个集群唯一的IP地址,在Service生命周期内,ip地址不变;在内部DNS支持下,能轻松实现服务发现机制。

        Service通过label seletor关联到实际支撑业务的pod上,并通过集群内置的服务负载均衡将服务请求分发到后端Pod;即调用者无需关心pod状态如何,是否创建,pod的ip是否发生了变化。

        通过nodeport或者设置load balancer(负载均衡?)还可以实现将service暴露到集群外部。

    k8s还支持多重昂service,比如没有seletor的service,比如不需要分配ip不需要负载均衡的service(高级话题)

    ---

    Controllers:与Pod关联最为紧密的控制器对象,控制器对象就是为Pod保驾护航的。

        各种控制器就是为了保证一组Pod始终保证处于期望状态(desired state)正常运行。期望状态包括:Pod副本数量,节点选择,资源约束,持久化数据维持等...

        常用的控制器:deployment、replicaset、statefulset、daemonset等

            replicaset:副本集合控制器,确保健康Pod数量始终满足用户定义的数量。

                它的前身是ReplicationController(rc),新版RS支持集合式的label selector标签筛选(等优势?)

                虽然想Pod一样可以手动创建,但官方推荐使用deployment创建并由其自动管理replicaset,这样就可以不用担心兼容问题,比如repllicaset不支持滚动更新,但deployment支持。

            deployment:是k8s最常用的控制器,它为Pod和ReplicaSet提供了声明式定义(yaml)。声明式的意思是,描述他们状态是怎么样的,而不是说描述他们的创建步骤和方法。

                用户在deployment描述Pod和ReplicaSet的期望状态,DeploymentControlller就会自动将他们改变到期望(不要尝试手动修改由deployment自动创建的ReplicaSet,否则可能会引发未知后果)

                周所周知,Deployment支持Pod的滚动更新,并自动管理背后的ReplicaSet,例如更新Pod模板、规格字段来升级Pod新状态时,Deployment会自动创建新的ReplicaSet,Deployment会根据控制速率将Pod旧的ReplicaSet移动到新的那里。以实现ReplicaSet的滚动更新。

                Deployment支持Pod回滚,但仅由pod模板(Pod-template)改动的行为触发的版本升级。

    ---

    StatefulSet:Deployment,ReplicaSet等控制器,他们仅用于无状态应用的部署和管理,对于有状态应用,v1.5后k8s提供了StatefulSet提供支持

    v1.9毕业,说明可以在环境中可以正常使用了。保证了产品的先后兼容。

    为了解决有状态服务的部署问题,例如需要

    稳定的的持久化存储,集合的Pod被重新调度后,还是能访问到相同的持久化存储的。

    稳定的网络表示;Pod重新调度后,即PodName等标签不变,

    有序部署扩展:Pod是有顺序的,Pod在部署或扩展的时候,要根据定义的顺序依次进行,

    有序收缩,删除:Pod在被删除收缩等过程中,也要根据定义的顺序依次进行,

    有序自动滚动升级等:和有序收缩一样,依据定义的顺序依次进行,每次升级一个Pod,只有一个Pod完成升级才会进行下一个。

    Pod的存储必须由RersistentVolume Provisioner根据请求的Storage Class进行配置,或由管理员预先配置好。

    考虑到数据安全性,伸缩或删除StatefulSet不会删除关联的存储;另外StatefulSet要求没有class ip的Headless Service负责Pod的网络身份,用户有责任创建此类服务。(高级话题)

    ---

    DaemonSet:特殊的控制器,保证在每个Node上都运行一个Pod副本,当增加/溢出Node,会自动增加/收回Pod副本,删除DaemonSet会删除它创建的所有Pod

        适用于:系统Daemon程序sifvillike组件,监控跟踪clkD,日志收集runD等

        1.6以后支持滚动更新

        支持通过nodeSelector、nodeAffinity、podAffinity来选择需要部署的Node,当Node的标签发生变化时,DaemonSet会重新匹配Node,并在新匹配的Node上部署Pod副本并将原有的但此次为匹配到的Node的Pod副本删除。

    ---配置和存储类对象

    ConfigMap:允许我们将配置信息与容器镜像内容解耦,这样可以保持容器化应用镜像的可移植性,没有必要因为配置的变动而重新制作容器镜像,常用来想Pod提供非敏感的配置信息。

        configMap用于保存配置数据的键值对,可用来保存单个属性、配置文件

        configMap可以用命令行基于字面值,文件或目录来创建或通过configMap对象定义文件yaml创建。

        configMap可以通过三种方式在Pod中使用:环境变量,容器命令行或以文件形式通过数据卷插件挂在到Pod中

    示例:configMap的常见和使用

    <!--此处有图片-->

    定义kind:configMap的yaml,里面定义属性配置data.title,data.authtor

    定义一个kind:Pod的yaml,并将之前的配置信息以环境变量的形式使用

    启动pod,查看输出

    ---

    Secret使用上与ConfigMap类似,不同的是它解决是集群内密码,token,密钥等敏感数据的配置问题

        应用场景:鲳鱼ServiceAccount关联,存储在tmpfs系统,Pod删除后Secret文件也会对应地删除。

        有三种Secret:

    Opaque:64编码格式的secret,存储密码密钥,

    Service Account:在pod中访问k8s api服务的,有k8s自动创建。并挂载在到Pod指定目录中去,

    dockerconfigjson:用来存储私有docker镜像仓库的认证信息,

        secret可以以volume或环境变量方式使用。

    01:01
    看视频
  • 工作负载,控制类:pod,deployment,statefulSet,DeamonSet,job

    服务类:service,endpoint,ingress

    配置,存储类:configmap,secret,volume,persostentVolumeClaim

    集群类:node,namespace,persistenvolume,clustrRoleBinding resourceQuota


    pod中的命名空间,ipc资源,网络,存储被pod内的所有容器共享


  • node组件:普通pod,kubelet,kube-proxy.

    kubelet是唯一一个不是以容器的形式的组件,master和node之间的桥梁,处理master下发到node的节点,向apiserver注册node信息,定期汇报node的资源信息


    kube-proxy.service的抽象实现


  • apiserver 为所有的操作k8s集群提供api

    scheuler,调度pod和节点,有预选和优选

    controller 控制整个集群,自动化修复流程,使每个节点达到想要的状态,同时,所有节点的

    etcd:存储所有资源对象和状态,默认yumaster安装在一个node下面,里面的数据都是通过api的调用改变的

  • Controller-DaemonSet简单介绍

    10:35
    看视频
  • Controller-StatefulSet简单介绍

    09:32
    看视频
  • Controller-Deployment简单介绍

    07:14
    看视频
  • Controller-ReplicaSet简单介绍

    05:42
    看视频
首页上一页1234567下一页尾页

举报

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