(一)Kubernetes - 介绍

news2024/11/23 18:45:37

Kubernetes介绍

    • 1. 介绍
      • 1.1 什么是Kubernetes
      • 1.2 K8s主要功能
      • 1.3 K8s架构
      • 1.4 K8S核心概念
      • 1.5 完整流程
    • 2. K8S安装方式选择
      • 2.1 kubeadm
      • 2.2 手动部署(二进制)
      • 2.3 Rancher
      • 2.4 kubespray
    • 3. 思维导图

1. 介绍

1.1 什么是Kubernetes

​ Kubernetes是Google公司在2014年6月开源的一个容器集群管理系统,使用Go语言开发,也叫K8S。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用。

下文中Kubernetes以K8s简称表示

1.2 K8s主要功能

  • 自动装箱
  • 自我修复(自愈能力)
  • 水平扩展
  • 服务发现
  • 滚动更新
  • 版本回退
  • 密钥和配置管理
  • 存储编排
  • 批处理
  • 自动装箱

    基于容器对应用运行环境的资源配置要求,自动部署应用容器

  • 自我修复(自愈能力)

    • 当容器失败时,会对容器进行重启
    • 当所部署的Node节点有问题时,会对容器进行重新部署和重新调度
    • 当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

    如果某个服务器上的应用不响应了,Kubernetes会自动在其它的地方创建一个

  • 水平扩展

    通过简单的命令、用户UI 界面或基于CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁

      当我们有大量的请求来临时,我们可以增加副本数量,从而达到水平扩展的效果
    
  • 服务发现

    用户不需使用额外的服务发现机制,就能够基于Kubernetes 自身能力实现服务发现和负载均衡

      对外提供统一的入口,让它来做节点的调度和负载均衡
    
  • 滚动更新

    可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新

      添加应用的时候,不是加进去就马上可以进行使用,而是需要判断这个添加进去的应用是否能够正常使用
    
  • 版本回退

    可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退

      类似于Git中的回滚
    
  • 密钥和配置管理

    在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

  • 存储编排

    自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要

      存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
    
  • 批处理

    提供一次性任务,定时任务;满足批量数据处理和分析的场景

1.3 K8s架构

官方架构设计简要示意图
在这里插入图片描述
架构图
在这里插入图片描述
k8s生态圈
在这里插入图片描述

K8S架构主要包含两部分:Master(主控节点)和 Node(工作节点)

k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求

  • Master node:主控节点

    • API Server:集群统一入口,以restful风格进行操作,同时交给etcd存储
      • 提供认证、授权、访问控制、API注册和发现等机制
    • scheduler:节点的调度,选择node节点应用部署
    • controller-manager:处理集群中常规后台任务,一个资源对应一个控制器
    • etcd:存储系统,用于保存集群中的相关数据
  • work Node:工作节点

    • Kubelet:master派到node节点代表,管理本机容器
      • 一个集群中每个节点上运行的代理,它保证容器都运行在Pod中
      • 负责维护容器的生命周期,同时也负责Volume(CSI) 和 网络(CNI)的管理
    • kube-proxy:主要就是为 Service 提供服务的,来实现内部从 Pod 到 Service 和外部 NodePort 到 Service 的访问。
  • Container Runtime:容器运行环境

    • 容器运行环境是负责运行容器的软件
    • Kubernetes支持多个容器运行环境:Docker、containerd、cri-o、rktlet以及任何实现Kubernetes CRI (容器运行环境接口) 的软件
  • fluentd:是一个守护进程,它有助于提升集群层面日志
    Fluentd简介

1.4 K8S核心概念

  • Pod
  • Volume
  • Controller
  • Deployment
  • Service
  • Label
  • Namespace
  • API
  • 其它组件

Pod

  • Pod是K8s中最小的单元
  • 一组容器的集合
  • 共享网络【一个Pod中的所有容器共享同一网络】
  • 生命周期是短暂的(服务器重启后,就找不到了)
    在这里插入图片描述

Volume

  • 声明在Pod容器中可访问的文件目录
  • 可以被挂载到Pod中一个或多个容器指定路径下
  • 支持多种后端存储抽象【本地存储、分布式存储、云存储】

Controller

  • 确保预期的pod副本数量【ReplicaSet】

  • 无状态应用部署【Deployment】

    • 无状态就是指,不需要依赖于网络或者ip
  • 有状态应用部署【StatefulSet】

    • 有状态需要特定的条件
  • 确保所有的node运行同一个pod 【DaemonSet】

  • 一次性任务和定时任务【Job和CronJob】

Deployment

  • 定义一组Pod副本数目,版本等
  • 通过控制器【Controller】维持Pod数目【自动回复失败的Pod】
  • 通过控制器以指定的策略控制版本【滚动升级、回滚等】

Service

  • 定义一组pod的访问规则

  • Pod的负载均衡,提供一个或多个Pod的稳定访问地址

  • 支持多种方式【ClusterIP、NodePort、LoadBalancer】

    可以用来组合pod,同时对外提供服务

Label

label:标签,用于对象资源查询,筛选

Namespace

命名空间,逻辑隔离

  • 一个集群内部的逻辑隔离机制【鉴权、资源】
  • 每个资源都属于一个namespace
  • 同一个namespace所有资源不能重复
  • 不同namespace可以资源名重复

API

我们通过Kubernetes的API来操作整个集群

同时我们可以通过 kubectl 、ui、curl 最终发送 http + json/yaml 方式的请求给API Server,然后控制整个K8S集群,K8S中所有的资源对象都可以采用 yaml 或 json 格式的文件定义或描述

其它组件:

  • CoreDNS:主要就是用来给 K8s 的 Service 提供一个域名和 IP 的对应解析关系。
  • Dashboard:主要就是用来给 K8s 提供一个 B/S 结构的访问体系(即,我们可以通过 Web 界面来对 K8s 进行管理)
  • Ingress Controller:主要就是用来实现 HTTP 代理(七层),官方的 Service 仅支持 TCP\UDP 代理(四层),据了解主要是用来负载均衡的。了解负载均衡,可以参考LB
  • Prometheus:主要就是用来给 K8s 提供一个监控能力,使我们能够更加清晰的看到 K8s 相关组件及 Pod 的使用情况。
  • ELK:主要就是用来给 K8s 提供一个日志分析平台。

1.5 完整流程

  1. 通过Kubectl提交一个创建RC(Replication Controller)的请求,该请求通过APlserver写入etcd
  2. 此时Controller Manager通过API Server的监听资源变化的接口监听到此RC事件
  3. 分析之后,发现当前集群中还没有它所对应的Pod实例
  4. 于是根据RC里的Pod模板定义一个生成Pod对象,通过APIServer写入etcd
  5. 此事件被Scheduler发现,它立即执行执行一个复杂的调度流程,为这个新的Pod选定一个落户的Node,然后通过API Server讲这一结果写入etcd中
  6. 目标Node上运行的Kubelet进程通过APiserver监测到这个"新生的Pod".并按照它的定义,启动该Pod并任劳任怨地负责它的下半生,直到Pod的生命结束
  7. 随后,我们通过Kubectl提交一个新的映射到该Pod的Service的创建请求
  8. ControllerManager通过Label标签查询到关联的Pod实例,然后生成Service的Endpoints信息,并通过APIServer写入到etcd中,
    上运行的Kubelet进程通过APiserver监测到这个"新生的Pod.并按照它的定义,启动该Pod并任劳任怨地负责它的下半生,直到Pod的生命结束
  9. 随后,我们通过Kubectl提交一个新的映射到该Pod的Service的创建请求
  10. ControllerManager通过Label标签查询到关联的Pod实例,然后生成Service的Endpoints信息,并通过APIServer写入到etod中,
  11. 接下来,所有Node上运行的Proxy进程通过APIServer查询并监听Service对象与其对应的Endponts信息,建立一个软件方式的负载均衡器来实现Service访问到后端Pod的流量转发功能

2. K8S安装方式选择

2.1 kubeadm

kubeadm官方推荐方案,也在大力发展。小问题比较多,扩展还是需要配合其它方案一起做。高可用上面还是需要自己花一些精力 如果只是玩玩,还是非常推荐的,但是想要正式环境使用,我还是推荐大家三思。

由于kubeadm更像是一套完整的脚本封装,所以想要扩展它,还是需要配合其它的方案一起做。升级之类的,可以参考官方的升级指南,还是比较容易的。

目前支持的操作系统主要有:Ubuntu 16.04+ /Debian 9/ CentOS 7 / RHEL 7 / Fedora/HypriotOS/Container Linux 对于云平台的支持一般,还是推荐大家在安装完毕后,手动扩展吧。

kubeadm

2.2 手动部署(二进制)

手动部署完全看喜好,推荐大家都尝试一遍,成功与不成功不要紧,最主要的是了解一下Kubernetes的组件。会为你调试其它方案有很好的帮助。理论上,如果对Kubernetes足够了解,完全可以把他创建成与kops 或者 kubespray 一样的方案。
使用二进制方式安装 Kubernetes 1.18.3 版本

2.3 Rancher

如果说kuernetes类似于IaaS+,那么Rancher就是标准的PaaS,如果你愿意按照Rancher的项目结构思路走,如果你团队不大,我还是比较推荐的。
Rancher 使用介绍

2.4 kubespray

kubespray最推荐的方案有kops的集成度(还差一些,但是该有的都有了),升级方便。只要对它不爽,随时可以fork一份,按照自己意愿进行修改。

kubespray是一个基于Ansible的部署方案,所以部署过程大家都能看得懂(如果你看不懂,请问你们公司还需要人吗?我这个小研发最近打算转运维)

操作系统支持绝大部分基于systemd的系统,什么Container Linux/Debian/Ubuntu/CentOS/RHEL/Fedora/CentOS Atomic/openSUSE 支持绝大部分的云平台(阿里云,腾讯云什么的,目前还不支持。),也支持OpenStack,vSphere等虚拟化方案。所以自建机房什么的也完全不用担心啦。

kubespray也为我们准备好了高可用方案,支持绝大部分网络插件,DNS也支持很多类型,你可以根据自己的需要选择。

文档上,目前也很完整。国内如果想要部署,仅仅需要写一下部署配置,声明一些镜像地址(替换从国外拉镜像的尴尬)。就可以愉快的一键执行了。

3. 思维导图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

根据cadence设计图学习硬件知识day06 了解一些电源转化芯片和 稳压器 和 开关芯片

1. TPL920 (高精度线性稳压器) 1.1.TPL920 介绍 TPL920系列产品是2A大电流、6μVRMS低噪声、高PSRR、高精度线性稳压器,通常具有在2A负载条件下的110 mV超低电压降。这TPL920系列产品同时支持固定输出电压范围从0.8伏到3.95伏,输出电压可调范围为0.8V至…

d2l BERT预训练(model+dataset*+train)

千呼万唤始出来,终于来到了bert。本篇博客先介绍预训练部分,dataset部分只介绍简洁输入输出,详细的另行更新新的blog。 目录 1.model 1.1bert总述 1.2输入表示 1.3Encoder 1.3.1验证输出 1.4掩敝语言模型mlm 1.4.1forward探索 Layer…

有什么台灯性价比高又实惠的品牌?护眼台灯性价比高的led大灯

不管你处在学生被动学习还是上班后主动学习的阶段,为自己挑选一款合适的台灯非常重要,因为夜晚的氛围能达到很高的学习效率,而台灯可以保证我们有一个舒适的阅读感受。那在为学习需求挑选台灯时,不应该以平价作为选购标准&#xf…

FA-PEG-Silane 叶酸-聚乙二醇-硅烷 Silane-PEG2000-FA,PEG分子量2000

FA-PEG-Silane 叶酸-聚乙二醇-硅烷 中文名称:叶酸聚乙二醇硅烷 英文名称:FA-PEG-Silane,Folic acid PEG Silane 性状:液体或者固体,取决于分子量 溶剂:溶于水、DMSO、DMF等常规性有机溶剂 分子量&…

第十二讲 常用数据结构之集合

在学习了列表和元组之后,我们再来学习一种容器型的数据类型,它的名字叫集合(set)。说到集合这个词大家一定不会陌生,在数学课本上就有这个概念。如果我们把一定范围的、确定的、可以区别的事物当作一个整体来看待&…

三维可视化智慧档案馆之八防环境监控系统平台白皮书

目录 一、智慧档案馆建设目的 二、智慧档案馆集成度 三、智慧档案馆架构 3.1库房环境监测 3.2库房安防监控 四、智慧档案馆功能简介 4.1档案室一体化控制管理系统建设方案 4.2温湿度检测建设方案 4.3恒温控制建设方案 4.4烟雾感应检测系统 4.5安防系统建设…

STM32开发(十七)STM32F103 片内资源 —— 独立看门狗 IWDG 详解

文章目录 一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解五、结果演示 一、基础知识点 STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引…

数据库做实验过程-------pyqt环境的配置

首先下载anacunda Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 找到windows最新版x86 64版本等待下载 双击运行安装包 此时一定要记录文件夹的位置,便于以后环境变量的配置。 别看是4.7但是以后可能会增加新的配置&…

学生管理系统

一、项目框架 二、 CommandInfo.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Common; //using MySql.Data.MySqlClient;namespace WinStudent {public class CommandInf…

JMU Oracle 实验五

问的问题 看了一下log和logfile,就是重做日志组和日志文件的地址信息看了归档的地址如何执行归档,就是switch那个语句 1. 查询Oracle数据库当前使用的联机重做日志文件组及成员信息 v$log:记录有关重做日志文件组相关的信息。 v$logfile&a…

数据结构——栈的构建

在本次的博客当中我们来向大家介绍两个看似很新没有听过,实际上我们之前已经实现过了的数据结构——栈和队列。 🌵栈 实质上栈就是一个具有特殊要求的线性表。栈在定义上要求我们只能从一端插入和一段删除数据。举一个简单的例子:我们一次向栈…

MySQL的ID用完了,怎么办?

目 录 一 首先首先分情况 二 自增ID 1 mysql 数据库创建一个自增键的表 2 导出表结构 3 重新创建 自增键是4294967295的表 4 查看表结构 5 异常测试 三 填充主键 1 首先创建一个test 表,主键不自增 2 插入主键最大值 3 再次插入主键最大值1 四 没有声明…

SSO、CAS、OAuth、OIDC

参考 简单了解概念: https://www.bilibili.com/video/BV1XG411w7DN/简单了解操作: https://www.bilibili.com/video/BV1334y11739/ openid-connect👍流程图解: https://www.youtube.com/watch?vt18YB3xDfXI (图&#…

conda虚拟环境配置

文章目录 1 下载Anaconda2 创建自己的虚拟环境3 配置自己的虚拟环境 1 下载Anaconda 直接官网下载 Anaconda官网 2 创建自己的虚拟环境 可以直接在anaconda软件上添加 还可以通过命令行指令,打开终端输入conda create -n 名字 python3.7 3 配置自己的虚拟环境…

大厂高频面试:底层的源码逻辑知多少?

你好,我是何辉。今天我们来聊一聊Dubbo的大厂高频面试题。 大厂面试,一般重点考察对技术理解的深度,和中小厂的区别在于,不仅要你精于实战,还要你深懂原理,勤于思考并针对功能进行合理的设计。 网上一直流…

一文读懂RabbitMQ消息队列

一.什么是消息队列 1.简介 在介绍消息队列之前,应该先了解什么是 AMQP(Advanced Message Queuing Protocol, 高级消息队列协议,点击查看) 消息(Message)是指在应用间 传送的数据,消息可以非常简单&#xff…

【Golang开发入门】你真的会用Go写“Hello world“吗?

博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: Go语言核心编程近期目标:写好专栏的每一篇文章 目录 一、Go项…

Zynq-7000、FMQL45T900的GPIO控制(六)---linux驱动层配置GPIO输入输出控制

本文使用的驱动代码 Zynq-7000、FMQL45T900的GPIO控制(六)-linux驱动层配置GPIO输入输出控制资源-CSDN文库 在Zynq-7000、FMQL45T900驱动层也时常会用到对GPIO的控制,这里就针对实际使用的情况进行说明,首先根据之前的帖子确实使…

监测HDD smart信息的脚本编写

最近需要完成一个测试HDD的项目,因为接的HDD太多,手动查看smart信息太麻烦,所以需要写一个自动帮我们检查smart信息的脚本。此遍文章只介绍直连或者JBOD模式下的信息监测,没有涉及到组RAID模式。 1 首先看下HDD的smart信息&#x…

谁在成为产业经济发展的推车人?

区域发展的新蓝图中,京东云能做什么?它的角色是什么?这个问题背后,隐藏的不仅是京东云自身的能力和价值,更是其作为中国互联网云厂商的代表之一,对“技术产业”的新论证。 作者|皮爷 出品|产业家 关于云…