Kubernetes概述

Kubernetes(也常称K8s,用8代替8个字符“ubernete”而成的缩写),是一个开源的,用于管理云平台中多个主机上的容器化应用.

它的一个核心特点是:能够自主的管理容器来保证云平台中的容器按照用户期望的状态运行.打个比方:比如我希望我的某个服务一直运行,至于怎么去做,我不管,我想要达到的目的就是我的那个服务一直运行,那么Kubernetes就会自动去监控,重启,新建,总之,只要是你想要让它一直运行,那么它就会一直运行下去.

可以说,因为Kubernetes的存在,使得自动化成为了可能,可用以及可靠.

Kubernetes设计架构

Kubernetes集群包含有节点代理kubelet和Master组件(APIs,scheduler,etc),一切基于分布式的存储系统.来一张Kubernetes的架构图:

  • Kubernetes主要由以下几个核心组件组成:
    • etc保存了整个集群的状态;
    • controller manager负责维护集群的状态,比如故障检测,自动扩展,滚动更新等;
    • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
    • apiserver提供了资源操作的唯一入口,并提供认证,授权,访问控制,API注册和发现等机制;
    • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
    • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
    • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
  • Kubernetes核心技术概念
  • API对象是K8s集群中的管理操作单元.K8s集群系统每支持一项新功能,引入一项新技术时,一定会新引入对应的API对象.每个API对象都有3大类属性:
    • 元数据(metadata):用来表示API对象,每个对象至少有3个元数据:namespace,name,uid
    • 规范(spec):描述了用户期望K8s集群中的分布式系统达到的理想状态
    • 状态(status):描述了系统实际当前达到的状态
  • Pod
    • Pod是在K8s集群中运行部署应用或服务的最小单元,它支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务.
    • Pod是K8s集群中所有业务类型的基础.不同类型的业务就需要不同类型的Pod去执行.
  • 复制控制器(Replication Controller,RC)
    • 通过监控运行中的Pod来保证集群中运行指定数目的Pod副本.
    • 一般情况下,通过RC运行Pod比直接运行Pod更明智,因为RC可以发挥它高可用的能力,保证永远有指定数目个Pod在运行.但它只适用于长期伺服型的业务类型
  • 副本集(Replica Set,RS)
    • 新一代RC,提供同样的高可用能力,但RS能支持更多种类的匹配模式.
    • 一般不单独使用,而是作为Deployment的理想状态参数使用
  • 部署(Deployment)
    • 部署表示用户对K8s集群的一次更新操作.
  • 服务(Service)
    • RC,RS和Deployment只是保证了支撑服务的微服务Pod数量,但是没有解决如何访问这些服务的问题.因为一个Pod只是一个运行服务的实例,随时可能在一个节点上停止,在另一个节点启动一个新的Pod,故而不能用确定的ip和端口号提供服务.
    • 为解决这个问题,就有了Service的概念.在K8s集群中,客户端需要访问的服务就是Service对象.每个Service会对应一个集群内部有效的虚拟ip,这样客户端就不需要考虑Pod运行在哪儿个节点,这个工作只需要由Service去完成就OK
  • 任务(Job)
    • Job是K8s用来控制批处理型任务的API对象.
    • Job管理的Pod根据用户的设置把任务成功完成就退出,成功完成的标志根据不同的spec.completions策略而不同
  • 如上图,Job Controller负责创建Pod,并持续监控Pod的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的Pod再次重试任务。

    Kubernetes核心设计理念

    从以上介绍,我们可以知道,Kubernetes的两个核心设计理念:一个是容错性,一个是易扩展性.

    容错性实际是保证K8s系统稳定性和安全性的基础,易扩展性是保证K8s对变更友好,可以快速迭代增加新功能的基础.

    感谢您的阅读~

    [Kubernetes]关于K8s,你应该知道的一些东西的更多相关文章

    1. Minikube之Win10单机部署Kubernetes(k8s)自动化容器操作的开源平台

      Minikube之Win10单机部署 Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作.如果你曾经用过Docker部署容器,那么可以 ...

    2. dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启

      kubernetes(k8s)DNS 服务反复重启解决: k8s.io/dns/pkg/dns/dns.go:150: Failed to list *v1.Service: Get https:// ...

    3. kubernetes(K8S)创建自签TLS证书

      TLS证书用于进行通信使用,组件需要证书关系如下: 组件 需要使用的证书 etcd ca.pem server.pem server-key.pem flannel ca.pem server.pem ...

    4. Kubernetes(k8s)目录

      Kubernetes(k8s)目录 Kubernetes集群安装(亲测有效)

    5. kubernetes(K8S)快速安装与配置集群搭建图文教程

      kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...

    6. (转)dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启

      转:https://blog.csdn.net/shida_csdn/article/details/80028905 kubernetes(k8s)DNS 服务反复重启解决: k8s.io/dns/ ...

    7. Kubernetes --(k8s)入门

      k8s 简介: 什么是k8s? Kubernetes (k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker技术基础上,为容器化的应用提供部署运行.资源调度.服务发现和动 ...

    8. 使用国内的镜像源搭建 kubernetes(k8s)集群

      1. 概述 老话说的好:努力学习,提高自己,让自己知道的比别人多,了解的别人多. 言归正传,之前我们聊了 Docker,随着业务的不断扩大,Docker 容器不断增多,物理机也不断增多,此时我们会发现 ...

    9. Kubernetes(K8s)极速入门

      1. 概述 老话说的好:努力学习,努力提高,做一个有真才实学的人. 言归正传,之前我们聊了 如何使用国内的镜像源搭建 kubernetes(k8s)集群 ,今天我们来聊聊如何在 kubernetes( ...

    随机推荐

    1. Ajax结合Json进行交互数据(四)

      <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

    2. MySQL5.7单实例二进制包安装方法

      MySQL5.7单实例二进制包安装方法 一.环境 OS: CentOS release 6.9 (Final)MySQL: mysql-5.7.20-linux-glibc2.12-x86_64.ta ...

    3. SQL语法基础之ALTER语句

      SQL语法基础之ALTER语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看ALTER的帮助信息 mysql> ? ALTER Many help items fo ...

    4. Systemd 添加自定义服务(开机自启动)

      Systemd 简介:https://fedoraproject.org/wiki/Systemd/zh-cn 一.service unit 常用命令,以 mysql 服务为例 # 开机启动 syst ...

    5. JAVA-Proxy 代理

      jdk静态代理 interface Dao { void save(); } class DaoImpl implements Dao { @Override public void save() { ...

    6. linux unknown host 问题【转】

      如果某台Linux(CentOS)服务器ping域名, 如下提示: # ping www.sina.comping: unknown host www.sina.com 确认网络没问题的情况下, 可以 ...

    7. NIO SocketChannel 【链接】

      Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(六) Selector Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer ...

    8. jQuery使用(三):DOM操作之val()方法操作表单元素value值

      操作表单元素属性value的值 <form action="./" method='GET'> <h3 >选择你喜欢的明星</h3> <s ...

    9. [Android] Android 让UI控件固定于底部的几种方法

      Android 让UI控件固定于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_p ...

    10. Devexpress dll搜集

      Devexpress一部分在全局dll中,需要分析缺哪些dll,有两种方式1.打包,安装时会自动提示 2.使用自带分析工具Assembly deployment tool