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. Linux下进程与线程的区别及查询方法

      在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 ...

    2. 1.Eureka

      分布式系统中,当B的数量越来越多的时候,A只需要从注册中心获取B注册的服务,而不需要直接从B中获取服务,答案显而易见. application.yml: eureka: client: service ...

    3. ruby----controller中简单的增删改 方法定义

      class WorkProsController < ApplicationController before_action :set_work, only: [:show, :edit, :u ...

    4. Hadoop完全分布式安装

      一.软件版本 Hadoop版本号:hadoop-2.6.0.tar: VMWare版本号:VMware-workstation-full-11.0.0-2305329 Ubuntu版本号:ubuntu ...

    5. CSS-With-BEM

      Naming rules block_name__element_name--modifier_name-modifier_value Names are written in lowercase L ...

    6. Part-Eight 模板与群体数据的组织

      1.方法模板 #include<iostream> using namespace std; template<typename T> void outputArray(con ...

    7. PHP7 学习笔记(十三)composer详解一

      摘要 从拷贝第三方代码到项目中(1994),到PEAR安装依赖包(1999),再到Composer兴起(2012),PHP社区经历了将近20年的探索.PHP这门古老的语言,也在不断的发展更新,在web ...

    8. Oracle和Mysql的安装

      Oracle12C的安装:https://blog.csdn.net/qubeleyz/article/details/79451192 Mysql安装:

    9. oracle java连接配置

      oracle数据库连接使用ojdbc驱动.使用tomcat-jdbc连接池. pom.xml: <!-- tomcat jdbc --> <dependency> <gr ...

    10. SpringBoot系列: 单元测试

      SpringBoot 项目单元测试也很方便, Web项目中单元测试应该覆盖:1. Service 层2. Controller 层 本文前半部分讲解是一些测试基础配置. 对于Service和Contr ...