目录

  • 一、重要概念
    • 1.1 基础
    • 1.2 补充
  • 二、组件
    • 2.1 Master 组件
      • kube-apiserver
      • ETCD
      • kube-controller-manager
      • cloud-controller-manager 具体功能:
      • DNS
      • 用户界面
      • 容器资源监测
      • Cluster-level Logging
    • 2.2 节点(Node)组件
      • kubelet
      • kube-proxy
      • docker
      • RKT
      • supervisord
      • fluentd
  • 三、pod详解
    • Kubernetes中的Pod使用可分两种主要方式:
    • 网络
    • 存储
    • 使用Pod
    • Pod和Controller
    • Pod模板
  • 四、deployment详解
    • 四、Deployments详解

一、重要概念

1.1 基础

1、为了保证k8s的稳定,和其他的应用一样,我们会搭建k8s集群。
2、k8s集群管理我们发布的容器。
3、k8s是通过pod管理容器的:将共享一些资源和端口的容器放到同一个pod中,然后负责pod的创建和部署。
4、k8s部署pod的方式:选择一个node(就是节点,也可以理解为主机),将pod部署上去。
5、k8s将node进行分类,一类的在同一个service中

1.2 补充

  1. k8s集群
    为了保证k8s的运行正常,一般会搭建k8s集群
  2. deployment
    在集群中,需要搭建deployment,用来创建和管理pod
  3. pod
    创建或部署的最小/最简单的基本单位。
    pod可以有多个容器(容器就是我们部署的,一般用docker作为容器),他们常会共享一些资源和端口空间。
    同时,pod是有生命周期的。当一个工作节点(Node)销毁时,节点上运行的Pod也会销毁,然后通过ReplicationController动态创建新的Pods来保持应用的运行。
  4. node
    node可以是虚拟机、物理机。pod创建后,会被部署到不同的node上面。

二、组件

本文介绍了Kubernetes集群所需的各种二进制组件。

2.1 Master 组件

Master组件提供集群的管理控制中心。

Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用户容器。请参考 构建高可用群集以来构建multi-master-VM。

kube-apiserver

kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行。请参阅构建高可用群集。

ETCD

etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。

kube-controller-manager

kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。

这些控制器包括:

  1. 节点(Node)控制器。
  2. 副本(Replication)控制器:负责维护系统中每个副本中的pod。
  3. 端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。
  4. Service Account和Token控制器:为新的Namespace 创建默认帐户访问API Token。
  5. cloud-controller-manager
    云控制器管理器负责与底层云提供商的平台交互。云控制器管理器是Kubernetes版本1.6中引入的,目前还是Alpha的功能。

云控制器管理器仅运行云提供商特定的(controller loops)控制器循环。可以通过将—cloud-provider flag设置为external启动kube-controller-manager ,来禁用控制器循环。

cloud-controller-manager 具体功能:

节点(Node)控制器
路由(Route)控制器
Service控制器
卷(Volume)控制器
kube-scheduler
kube-scheduler 监视新创建没有分配到Node的Pod,为Pod选择一个Node。

插件 addons
插件(addon)是实现集群pod和Services功能的 。Pod由Deployments,ReplicationController等进行管理。Namespace 插件对象是在kube-system Namespace中创建。

DNS

虽然不严格要求使用插件,但Kubernetes集群都应该具有集群 DNS。

群集 DNS是一个DNS服务器,能够为 Kubernetes services提供 DNS记录。

由Kubernetes启动的容器自动将这个DNS服务器包含在他们的DNS searches中。

用户界面

kube-ui提供集群状态基础信息查看。更多详细信息,请参阅使用HTTP代理访问Kubernetes API

容器资源监测

容器资源监控提供一个UI浏览监控数据。

Cluster-level Logging

Cluster-level logging,负责保存容器日志,搜索/查看日志。

2.2 节点(Node)组件

节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。

kubelet

kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能:

安装Pod所需的volume。
下载Pod的Secrets。
Pod中运行的 docker(或experimentally,rkt)容器。
定期执行容器健康检查。
Reports the status of the pod back to the rest of the system, by creating a mirror pod if necessary.
Reports the status of the node back to the rest of the system.

kube-proxy

kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。

docker

docker用于运行容器。

RKT

rkt运行容器,作为docker工具的替代方案。

supervisord

supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行。

fluentd

fluentd是一个守护进程,可提供cluster-level logging.。

三、pod详解

Kubernetes中的Pod使用可分两种主要方式:

  1. Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法; 在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。
  2. Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源,这些容器可以形成一个单一的内部service单位 - 一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。
    请注意,在单个Pod中共同管理多个容器是一个相对高级的用法,应该只有在容器紧密耦合的特殊实例中使用此模式。

网络

每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost相互通信。当Pod中的容器与Pod 外部通信时,他们必须协调如何使用共享网络资源(如端口)。

存储

Pod可以指定一组共享存储volumes。Pod中的所有容器都可以访问共享volumes,允许这些容器共享数据。volumes 还用于Pod中的数据持久化,以防其中一个容器需要重新启动而丢失数据。有关Kubernetes如何在Pod中实现共享存储的更多信息,请参考Volumes。

使用Pod

你很少会直接在kubernetes中创建单个Pod。因为Pod的生命周期是短暂的,用后即焚的实体。当Pod被创建后(不论是由你直接创建还是被其他Controller),都会被Kuberentes调度到集群的Node上。直到Pod的进程终止、被删掉、因为缺少资源而被驱逐、或者Node故障之前这个Pod都会一直保持在那个Node上。

注意:重启Pod中的容器跟重启Pod不是一回事。Pod只提供容器的运行环境并保持容器的运行状态,重启容器不会造成Pod重启。
Pod不会自愈。如果Pod运行的Node故障,或者是调度器本身故障,这个Pod就会被删除。同样的,如果Pod所在Node缺少资源或者Pod处于维护状态,Pod也会被驱逐。Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例。虽然可以直接使用Pod,但是在Kubernetes中通常是使用Controller来管理Pod的。

Pod和Controller

Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。

包含一个或者多个Pod的Controller示例:

Deployment
StatefulSet
DaemonSet
通常,Controller会用你提供的Pod Template来创建相应的Pod。

Pod模板

Pod模板是包含了其他对象(如Replication Controllers,Jobs和 DaemonSets)中的pod定义 。Controllers控制器使用Pod模板来创建实际需要的pod。

pod模板类似cookie cutters。“一旦饼干被切掉,饼干和刀将没有关系”。随后对模板的后续更改甚至切换到新模板对已创建的pod并没有任何的影响。

四、deployment详解

Deployment为Pod和Replica Set(升级版的 Replication Controller)提供声明式更新。

你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

注意:您不该手动管理由 Deployment 创建的 Replica Set,否则您就篡越了 Deployment controller 的职责!下文罗列了 Deployment 对象中已经覆盖了所有的用例。如果未有覆盖您所有需要的用例,请直接在 Kubernetes 的代码库中提 issue。

典型的用例如下:

  1. 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
  2. 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
  3. 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
  4. 扩容Deployment以满足更高的负载。
  5. 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
  6. 根据Deployment 的状态判断上线是否hang住了。
  7. 清除旧的不必要的 ReplicaSet。

四、Deployments详解

Deployment为Pod和Replica Set(升级版的 Replication Controller)提供声明式更新。

你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

注意:您不该手动管理由 Deployment 创建的 Replica Set,否则您就篡越了 Deployment controller 的职责!下文罗列了 Deployment 对象中已经覆盖了所有的用例。如果未有覆盖您所有需要的用例,请直接在 Kubernetes 的代码库中提 issue。

典型的用例如下:

使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
扩容Deployment以满足更高的负载。
暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
根据Deployment 的状态判断上线是否hang住了。
清除旧的不必要的 ReplicaSet。

kubernetes(k8s)——使用教程相关推荐

  1. k8s之Pod详解(五)【Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级)】

    参考于Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级) Pod Pod的结构 每个Pod中都可以包含一个或者多个容器 这些容器可以分为两类: 用户自定义用的 ...

  2. Kubernetes K8s 结合国内外文章解决 The kubelet is not running

    初学K8s,好好教程不跟着来,非要全部安装最新的docker 和 k8s,经过4小时奋战终于解决! 先说明下docker是最新版的安装,又安装K8s cat > /etc/yum.repos.d ...

  3. 云服务器-异地部署集群服务-Kubernetes(K8S)-网络篇

    重要!!! 注意: 本文使用二进制安装,过程非常繁琐,所以不推荐大家使用这种安装方式.请使用更简洁的kubeadm安装,具体请参考 云服务器-异地部署集群服务-Kubernetes(K8S)-Kube ...

  4. kubernetes (k8s) 与 Docker 关系

    kubernetes (k8s) 与 Docker 关系 简要介绍 Docker就像飞机,而Kubernetes就像飞机场. Docker: 是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到 ...

  5. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  6. 深入剖析Kubernetes k8s

    深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...

  7. 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证

    上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  9. kubernetes(k8s)-介绍2

    kubernetes(k8s)-安装(二) 什么是Kubernetes Kubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构. 使用Kuber ...

最新文章

  1. win10 mysql 5.7.21_MySql 5.7.21免安装版本win10下的配置方法
  2. Linux 查看I/O端口地址分配
  3. FB/IB多代事务结构详解--对FB事务最好的讲解
  4. 常量池之字符串常量池String.intern()
  5. 使用NoSQL实施实体服务–第5部分:使用云提高自治性
  6. matlab压控振荡器,MATLAB仿真应用_第5章(1)解析.ppt
  7. node-包管理工具 npm
  8. 5 -- Hibernate的基本用法 --5 3 改变持久对象状态的方法
  9. Python之 if-else
  10. 全自动高清录播服务器,全自动高清录播服务器 高清录播系统 一体化操作;易使用 操作简便...
  11. DSP 程序远程升级 / Bootloader设计指南(一)—— 初识Bootloader/DSP引导流程
  12. DELPHI sqlite数据库
  13. C++primer第五版课后答案参考
  14. python儿童编程-一款儿童编程入门的理想工具——PythonTurtle
  15. 软考信息系统项目管理师考试难度大概是怎样的?
  16. python爬虫时爬取的html代码显示“请开启JavaScript并刷新该页”
  17. DAY9:尚学堂高琪JAVA(98)
  18. 发现ULC(UltraLightClient)
  19. 微信图片怎么添加竖排文字_轻松设置微信竖排昵称
  20. 给定3个数字,求出这3个数字中的最大数,并输出最大数

热门文章

  1. emacs 中文设置与输入法安装
  2. 国内各大优秀免费源码下载站集合!
  3. 谢文东的一些话,很有道理
  4. 【科创人】联软科技张建耀:不擅长营销的拓荒高手,企业长期发展必经管理变革
  5. 看过来:种子轮…A轮?Pre-A?IPO?融资轮次,傻傻分不清楚
  6. 未来挣钱的行业有哪些,这3个项目有前景
  7. 在windows上安装Postgresql,安装空间数据库postgis引擎,创建可以存储空间点线面的数据库,解决could not open extension control file问题
  8. CSS进阶(2)- 块级格式化上下文
  9. 眼图观测实验报告_实验2 眼图观察测量实验
  10. 2021年度南山区科技奖励支持计划申报奖励及条件,补贴300万