当前位置: 首页 > news >正文

【云原生】Kubernetes介绍

一、Kubernetes介绍

    • K8s介绍
      • 回顾
      • k8s功能
    • k8s的组件
      • Master组件
        • kube-apiserver
        • etcd
        • kube-scheduler
        • kube-controller-manager
        • cloud-controller-manager
      • Node组件
        • kubelet
        • kube-proxy
        • 容器引擎
      • Addons
        • DNS
        • Web UI(Dashboard)
        • ContainerResource Monitoring
        • Cluster-level Logging
        • Kuboard
        • KubeSphere

Kubernetes是一款 容器编排工具,以下 简称k8s(k到s中间有8个字母所以是k8s),为了更快的入门k8s我们首先要对k8s的一些概念有所了解。

K8s介绍

官方定义的k8s是能够对容器化软件进行部署和管理,也就是可以在不停机的情况下提供简单快速的发布和更新方式。简单点来说,**如果项目需要多机器节点的微服务架构,并且采用的是Docker进行容器化部署的,那么k8s就可以帮我们屏蔽集群的复杂性,自动选择最优资源分配方式进行部署。**k8s提供简单的多实例部署及更新方案,几个命令就可以实现。

回顾

为了理解Kubernetes的用处,我们先回顾部署应用的历史。

image-20221001142600457

在部署应用上经历了以上三个时代:

  • 传统部署:应用直接部署到物理机上,缺陷很明显!有的应用占用资源多,有的占用资源少,这就造成了资源分配不均、利用率不足的情况。

  • 虚拟机部署:针对上述问题,虚拟化技术应运而生。用户可以在单台物理机的cpu上运行多个虚拟机。

    • 虚拟化技术使应用程序被虚拟机分开了,限制了应用程序之间的非法访问,进而提供了一定程序的安全
    • 提高了物理机的资源利用率,降低了硬件成本。
    • 每一个虚拟机可认为自己是被虚拟化的物理机上的一台完整机器。
  • 容器化部署时代:容器与虚拟机类似,它降低了隔离层级,共享了OS。所以,容器可以认为是轻量级的

    • 与虚拟机相似,每个容器都有自己的文件系统、CPU、内存、进程空间等。
    • 运行应用程序需要的资源都被容器包装
    • 容器化的应用可以跨OS发行版进行部署

k8s功能

  • 服务发现和负载均衡

k8s可以通过ip地址暴露容器的的访问方式,在同组容器中可实现负载均衡

  • 存储编排

k8s可以自动挂在指定的存储系统,nfs、云存储…

  • 自动发布和回滚

我们可以在k8s中声明应用程序容器应该达到的状态,K8s将以合适的速率调整容器的状态,并自动达到期望的效果

  • 自愈
    • 重新启动已经停机的容器
    • 在容器没有准备完成之前,不会让调用者发现该容器
    • 替换、kill掉不健康的容器

k8s的组件

Master组件

  • master组件是负责集群中的全局决策
  • master 组件探测并响应集群事件(当 Deployment 的实际 Pod 副本数未达到 replicas 字段的规定时,启动一个新的 Pod)

为了简介性,master组件运行在同一台机器上(master)

kube-apiserver

这个组件提供K8s的API。它属于k8s平台的前端,可以水平扩展也就是加服务器数量以提高性能。像后面会用到的kubectl/ kubernetes dashboard / kuboard 等k8s的管理工具其本质上就是调用了k8s的api实现了对k8s集群的管理。

etcd

存储组件,k8s集群相关的配置信息都存储在etcd里。更多信息可以看官方文档

kube-scheduler

此组件监控所有新创建尚未分配到节点上的 Pod,而且自动的为pod选择一个合适的节点运行

kube-controller-manager

就像它的名字一样,所有的控制器都被它管理

它包含的控制器有:

  • 节点控制器: 负责监听节点停机的事件并作出对应响应
  • 副本控制器: 负责为集群中每一个 副本控制器对象(Replication Controller Object)维护期望的 Pod 副本数
  • 端点(Endpoints)控制器:负责为端点对象(Endpoints Object,连接 Service 和 Pod)赋值
  • Service Account & Token控制器: 负责为新的名称空间创建 default Service Account 以及 API Access Token

cloud-controller-manager

cloud-controller-manager 中运行了与具体云基础设施供应商互动的控制器。

Node组件

Node 组件运行在每一个节点上(包括 master 节点和 worker 节点),负责维护运行中的 Pod 并提供 Kubernetes 运行时环境

kubelet

此组件是运行在每一个集群节点上的代理程序。它确保 Pod 中的容器处于运行状态。

kube-proxy

kube-proxy 是一个网络代理程序,运行在集群中的每一个节点上,是实现 Kubernetes Service 概念的重要部分。

kube-proxy 在节点上维护网络规则。这些网络规则使得您可以在集群内、集群外正确地与 Pod 进行网络通信。

容器引擎

容器引擎负责运行容器。

Addons

Addons 使用 Kubernetes 资源(DaemonSet、Deployment等)实现集群的功能特性。由于他们提供集群级别的功能特性,addons使用到的Kubernetes资源都放置在 kube-system 名称空间下。

DNS

除了 DNS Addon 以外,其他的 addon 都不是必须的,所有 Kubernetes 集群都应该有 Cluster DNS

Cluster DNS 是一个 DNS 服务器,是对您已有环境中其他 DNS 服务器的一个补充,存放了 Kubernetes Service 的 DNS 记录。

如果安装过K8s集群的话对这个组件会有印象

Web UI(Dashboard)

Dashboard (opens new window)是一个Kubernetes集群的 Web 管理界面。用户可以通过该界面管理集群。

ContainerResource Monitoring

将容器的度量指标(metrics)记录在时间序列数据库中,并提供了 UI 界面查看这些数据

Cluster-level Logging

将容器的日志存储到一个统一存储中,并提供搜索浏览的界面

Kuboard

Kuboard是一款基于Kubernetes的微服务管理界面,相较于 Dashboard,Kuboard 强调:

  • 无需手工编写 YAML 文件
  • 微服务参考架构
  • 上下文相关的监控
  • 场景化的设计
    • 导出配置
    • 导入配置

KubeSphere

KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统

提供全栈的 IT 自动化运维能力,简化企业的 DevOps 工作流。

相关文章:

  • C语言自定义类型【结构体】
  • springboot请求映射原理,springboot版本2.3.4.RELEASE
  • 【数值分析+python】python生成稀疏对称正定矩阵
  • jave web开发(IDEA中配置maven)
  • 保存滚动位置的实现方法
  • 什么是数据库事务
  • 异步FIFO的原理及verilog实现(循环队列、读写域数据同步、Gray Code、空满标志、读写域元素计数)
  • 大数据_YARN的工作原理
  • anaconda,docker和Jupyter Notebook常见问题解答
  • 【Rust日报】2022-10-01 Rumqtt:基于rust的mqtt代理
  • STM32 GPIO模拟UART串口:外部时钟及TIM方式
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • 知识点17--如何将spring boot项目布置在外部tomcat中
  • 面向对象——抽象类
  • C++ 异常处理机制讲解
  • ----------
  • .pyc 想到的一些问题
  • 【剑指offer】让抽象问题具体化
  • const let
  • docker python 配置
  • ES6--对象的扩展
  • javascript面向对象之创建对象
  • JavaScript设计模式与开发实践系列之策略模式
  • Java精华积累:初学者都应该搞懂的问题
  • Laravel核心解读--Facades
  • Promise面试题,控制异步流程
  • Rancher如何对接Ceph-RBD块存储
  • SSH 免密登录
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • web标准化(下)
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 让你的分享飞起来——极光推出社会化分享组件
  • 深入浅出webpack学习(1)--核心概念
  • 使用agvtool更改app version/build
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​第20课 在Android Native开发中加入新的C++类
  • ​一些不规范的GTID使用场景
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • ${ }的特别功能
  • ${factoryList }后面有空格不影响
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (待修改)PyG安装步骤
  • (二)斐波那契Fabonacci函数
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)重识new
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net mvc actionresult 返回字符串_.NET架构师知识普及