初识k8s

k8s:

kubernetes:八个字母省略,就是k8s

自动部署,自动扩展和管理容器化部署的应用程序的一个开源系统

k8s是负责自动化运维管理多个容器化程序的集群,是一个功能强大得容器编排工具

分布式和集群化的方式进行容器管理

市面上常用的版本:

1.15  1.18  1.20(常用) 1.28

k8s是谷歌的borg系统作为原型,后期由go语言编写开源软件

k8s网址:Kubernetes

源码包:

GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management

Docker微服务,可以满足微服务使用,那么为什么还要使用k8s

  1. 传统的部署方式:一般意义上的额二进制部署,安装运行-运行维护,需要专业的人员,如果出了故障还需要人工去重新拉起来,而且如果业务量增大,只能水平的推展,再部署一个
  2. 容器化,我们可以用dockerfile编写好的自定义的容器,随时基于镜像都可以运行,数量少还可以管理,数量多了管理起来太复杂。而且docker一般都是单机部署运行,没有高可用

k8s的作用:

简单,高效的部署容器化的应用

  1. 解决了docker的单机部署和无法集群化的特点
  2. 解决了随着容器数量的额增加,对应增加的管理成本
  3. 容器的高可用,提供了一种容器的自愈机制
  4. 解决了容器没有预设模板,以及无法快速,大规模部署,以及大规模的容器调度
  5. k8s提供了集中化配置管理的中心
  6. 解决了容器的生命周期的管理工具
  7. 提供了图形化工具,可以用图形化工具来对容器进行管理

k8s是一个基于开源的容器集群管理系统,在docker容器技术的基础之上

为容器化的应用提供部署,运行,资源调度,服务发现,动态伸缩等一系列完整的功能

大规模容器管理:

  1. 对docker等容器技术从应用的包---部署---运行---停止---销毁,全生命周期管理
  2. 集群方式运行,跨机器的容器管理
  3. 解决docker的跨机器运行的网络问题
  4. k8s可以自动修复,使得整个容器集群可以在用户期待的状态下运行

k8s的特性:

  1. 弹性伸缩,基于命令,或者图形化界面基于CPU的使用情况,自动对部署程序进行扩容和缩容,以最小的成本运行服务
  2. 自我修复:节点故障时,重新启动失败的容器,替换和重新部署
  3. 服务发现和负载均衡:k8s为多个容器提供一个同一的访问入口(内部地址和内部的DNS名称),自动负载均衡关联的所有容器

  1. 自动发布和回滚:k8s采用滚动的策略更新应用,先更新一部分,在更新所有,可以更新回滚点来进行回滚

Nginx-1 先更新1 最新的版本

Nginx-2 更新2

  1. 集中化的配置管理和密钥管理

k8s集群内部的各个组件都是要进行密钥队验证的,但是k8s的安全性不够,核心就是不建议部署在k8s上,例如MySQL,nginx

  1. 可以实现存储编排
  1. 可以自动化的把容器部署在节点上
  2. 也可以通过命令行或者yml文件(自定义pod)实现指定节点部署
  3. 也可以通过网络存储,NFS,GFS

  1. 任务进行批次处理,通过一次性的任务,也可以提供定时任务。满足需要批量处理和分析的场景

k8s的核心组件:

  1. kube-apiserver:

 k8s集群的之中的每个组价都要靠密钥队来进行验证,组件之间的通信靠apiserver来实现。API是应用接口服务,k8s的所有资源请求和调用操作都是kube-abserver来完成

所有对象资源的增删改查和监听的操作都是kube-apiserver处理完之后交给etcd来进行

api-server是k8s所有请求的入口服务,api-server接收k8s的所有请求(命令行和图形化界面),然后根据用户的具体请求通知对用的组件展示或者运行指定结果运行命令,api-server相当于整个集群的大脑

  1. kube-controller-manager:

  1. 运行管理控制器,是k8s集群当中处理常规任务的后台线程,是集群当中所有资源对象的自动化控制中心,一个资源对应一个控制器,controller-manager负责管理这些控制器
  1. node controller(节点控制器):负责节点控制器,负责节点发现故障的发现和响应
  2. Replication controller(副本控制器):控制关联pod的副本数,可以随时扩缩容
  3. Endpoints controller(端点控制器):监听service和对应的副本变化,端点就是服务暴露出的访问点,要访问这个服务,必须要知道他的endpoints,就是内部每个服务的IP+端口
  4. Server account和roken controllers(服务账户和令牌控制)

为命名空间创建默认账户和api访问的令牌

Namespace,访问不同的命名空间

  1. resourcequota controller(资源控制器):既可以对命名空间的资源使用进行限制,也可以对pot的资源进行限制
  2. Namespace controller(命名空间的控制器):管理命名空间的生命周期
  3. Service controller(服务节点控制器):k8s集群和外部的主机之间的接口控制器

  1. kube-scheduler:资源调度组件,

根据调度算法为新创建的pod选择一台合适的node节点

可以理解为k8s的所有node节点调度器,部署和调度node

预先策略:人工定制,指定node节点上部署

优先策略:限制条件

根据调度算法选择一个合适的node,node的节点资源情况,node的资源控制的情况等等,选一个资源最富裕,负载最小的node来部署

ETCD:k8s的存储服务,

etcd分布式键值存储系统(key:value),k8s的关键配置和用户配置,先通过apiserver调用etcd当中的存储信息,然后在实施(这个集群当中,能对etcd存储进行读写权限的,只有apiserver)

Node组件:

kublet:

node节点的监控器,以及于MASTER节点的通信器,也可以理解为master在node节点上的眼线(相当于特务组织)

Kublet会定时向api server汇报自己的node运行服务的状态,API-server会把节点上的状态保存ETCD存储当中。

接受来自master节点的调度命令,

如果发现自己的状态和master节点的状态不一致,调用docker的接口,同步数据

对节点上的生命周期进行管理,保证节点上的镜像不会占满磁盘空间,退出的容器的资源,进行回收

kube-proxy:

实现每个node节点上的pod网络代理,负责节点上的网络规划和四层负载均衡的实现,负责写入iptables(快被淘汰) IPVS(实现服务映射)

注意:Pod不是容器,是一个资源整合的节点

kube-proxy:本身不直接给pod提供网络代理,proxy只是service资源的载体

docker:

容器引擎,运行容器,负责本机容器创建和管理,基于容器创建的,但是它不是容器

k8s要创建pod时,kube-schedule调度到节点上(node节点),节点上的kubelet只是docker启动特定的容器,kubelet把容器的信息收集,发送给主节点,主需要在主节点上发布指令,节点上kubelet就会指示docker拉取镜像,启动或者停止容器

pod

也是运行在节点上的,是k8s当中创建或者最小,最简单的基本单位,一个pod代表着集群上正在运行的一个进程,类似于一个豌豆,里面的颗粒就是容器,同一个pod内每个容器就是一颗豌豆

Pod是由一个或多个组成,pod中的容器共享网络,存储和计算资源,可以部署在不同的主机上

一个pot里面可以运行多个容器,也可以是一个容器,在生产环境中,一般都是单个容器或者关联具有关联关系的多个容器组成的一个pod

Deployment:无状态应用部署,作用就是管理和控制pod,以及replicaset(运行多个容器),管控他的运行状态

Replicaset:保证pod的副本数量,受控于deployment

在k8s当中,部署服务,实际上就是pod,deployment部署的服务就是pod,replicase的就是来定义pod的容器数量

可以保证pod的不可重复性,在当前命名空间不能重复,不同命名空间名称可以重复

官方推荐使用的就是deployment进行服务部署

Daemonset:确保所有节点运行同一类的pod

Statuefulset:有状态部署

Job:可以给pod中设置一次性的任务,运行玩即退出

Cronjob:一直运行的周期性任务

Service:

又叫CLUSTER-IP

在k8s整个集群当中,每创建一个pod,都会会其中运行的容器分配一个集群内的IP地址,由于业务的变更,容器可能会发生变化,IP地址也会发生变化,service的作用就是提供整个pod对外的整个IP地址

Service就是一个网关,就是一个路由器,通过访问service就可以访问pod内部的容器集群

Service能实现负载均衡和代理-----kube-proxy(载体)----来实现负载均衡

Service是k8s微服务的核心,屏蔽了服务的细节,统一的对外暴露的端口,真正实现了微服务

Service的流量调度:userspace(用户空间,已经被废弃),iptables(即将废弃),IPVS(目前1.20都用IPVS)

Label:标签,k8s的特色管理方式,用于分类管理资源对象

Node  pod  service等等,都可以起标签

Label标签可以自定义

Lable选择器:等于,不等于,使用定义的标签名

Ingress:

k8s集群对外暴露提供访问的接口,属于应用层,七层代理,转发的是http请求,访问的是http/https

面试题:service是四层转发,转发的是流量

对外访问暴露的流程:

Namespace

k8s上可以通过namespace来实现资源隔离,项目隔离

通过namespace可以把集群划分为多个资源不可共享的虚拟的集群组

不同命名空间里面的资源名称可以重复的

k8s核心图:

在k8s之中是不和容器打交道的,和容器打交道的是pod

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTP小记2

目录 HTTP/1.1优化 QUIC协议 路由器 RTT(Round-Trip Time) 计算机网络体系结构 体系结构各层在整个过程中的作用 HTTP/1.1优化 1.通过缓存技术来避免/减少发送HTTP请求 2.减少HTTP请求的次数 将原本由客户端处理的重定向请求,交给代理…

alertmanage调用企业微信告警(k8s内部署)

一、前言 alertmanage调用企业微信应用告警会比直接使用钉钉告警更麻烦一点,调用企业微信应用告警需要在应用内配置企业可信ip,不然调用企业微信接口就会报错,提示ip地址有风险 二、部署 先自行创建企业微信,再使用管理后台创建应…

机器视觉实战应用:手势、人脸、动作以及手势鼠标构建(一)

CV实战应用手势、人脸、动作以及手势鼠标构建(一)总起 核心思想 手势识别是一种常见的计算机视觉应用,它可以通过摄像头或者预先录制的视频图像来追踪和识别人类手势。手势识别的应用非常广泛,例如在游戏、虚拟现实、人机交互等…

RuoYi-Cloud集成DataRoom大屏设计器

基于RuoYi-Cloud 3.6.3 版本集成 先贴一下开源地址: https://gitee.com/wxjstudy/jove-fast DataRoom开源地址: https://gitee.com/gcpaas/DataRoom 后端 新建modules 启动类 增加注解扫描,以及配置分页插件 import com.baomidou.mybatisplus.extension.plugins.MybatisPlu…

Leetcode—54.螺旋矩阵【中等】

2023每日刷题&#xff08;七十&#xff09; Leetcode—54.螺旋矩阵 实现代码 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;int m matrix.size();int n matrix[0].size();int row 0, col…

虚拟环境和Pycharm中均有transforms仍报ModuleNotFoundError:No module named ‘transformers‘

问题&#xff1a;运行新模型&#xff0c;配置了新环境&#xff0c;下载了包后&#xff0c;仍然报ModuleNotFoundError&#xff1a;No module named transformers 错误。 查看Pycharm解释器&#xff1a; 没问题&#xff01;&#xff01;&#xff01;&#xff1f; 命令行查看虚…

阿赵UE学习笔记——5、创建关卡元素

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   之前介绍了从空白模板创建关卡&#xff0c;接下来尝试着在这个空白的世界里面&#xff0c;创建一些内容。 一、创建地面 1、创建面片作为地面 创建——形状——平面&#xff0c;可以创建一个面片 在细节面板设置合适的…

【广州华锐互动】VR科技科普展厅平台:快速、便捷地创建出属于自己的虚拟展馆

随着科技的不断进步&#xff0c;虚拟现实(VR)技术已经在许多领域取得了显著的成果。尤其是在展馆设计领域&#xff0c;VR科技科普展厅平台已经实现了许多令人瞩目的新突破。 VR科技科普展厅平台是广州华锐互动专门为企业和机构提供虚拟展馆设计和制作的在线平台。通过这个平台&…

【微服务核心】Spring Boot

Spring Boot 文章目录 Spring Boot1. 简介2. 开发步骤3. 配置文件4. 整合 Spring MVC 功能5. 整合 Druid 和 Mybatis6. 使用声明式事务7. AOP整合配置8. SpringBoot项目打包和运行 1. 简介 SpringBoot&#xff0c;开箱即用&#xff0c;设置合理的默认值&#xff0c;同时也可以…

设计模式-单例模式(结合JVM基础知识)

1.定义介绍 所谓单例模式&#xff0c;是指在程序运行时&#xff0c;整个JVM中只有一个该类的实例对象 2. 单例模式的优点 复用性高&#xff0c;节省内存资源。类的加载、连接、初始化、使用都要占用虚拟机内存空间&#xff0c;因此&#xff0c;频繁创建对象会造成资源浪费&a…

文件夹共享(普通共享和高级共享的区别)防火墙设置(包括了jdk安装和Tomcat)

文章目录 一、共享文件1.1为什么需要配置文件夹共享功能&#xff1f;1.2配置文件共享功能1.3高级共享和普通共享的区别&#xff1a; 二、防火墙设置2.1先要在虚拟机上安装JDK和Tomcat供外部访问。2.2设置防火墙&#xff1a; 一、共享文件 1.1为什么需要配置文件夹共享功能&…

IDEA使用之打包Jar,指定main方法

前言 在某些场景&#xff0c;可能会遇到将非Spring项目打包的情况&#xff0c;我们不需要Tomcat服务器部署&#xff0c;只需要执行指定的main方法即可&#xff0c;这种情况打包成jar就比较方便了。 操作步骤 打包结果默认在项目的out目录下 使用 java -jar xxx.jar

企业微信自建应用获取用户信息

一.前言 开发企业微信自建应用的时候难免会有获取企微个人信息的业务需求,这篇博客将详细说明企微自建应用获取userId的具体流程. 二.基本概念介绍 2.1 corpid 每个企业都拥有唯一的corpid&#xff0c;获取此信息可在管理后台“我的企业”&#xff0d;“企业信息”下查看“企业…

(1)llvm学习词法分析器

首先是Token取值 下面两个值记录当前识别出来的token单元的字面量 首先是空字符&#xff0c;然后如果是空字符&#xff0c;就读下一个字符&#xff0c;知道这个字符不是空为止&#xff0c;也就是LastChar出循环的时候是下一个不为空的字符,下面两个值是记录实际值用于后续处理 …

VR渲染器怎么用之自适应图像采样器,可解决渲染黑图问题

大家好&#xff0c;相信刚接触到vr渲染器时&#xff0c;会vr的图像采样器感到迷茫&#xff0c;如何使用图像采样器&#xff1f;图像采样器有何用呢&#xff1f; 今天便为大家讲解vr中的自适应DMC图像采样器的运用。 说明&#xff1a;高版本渲染器中的渲染块整合了原有的“固定…

PYTHON入门级游戏开发:宇宙飞船游戏两万字详析

手讲解超详细python入门游戏项目‘打外星飞船’手把&#xff08;一&#xff09; 由于内容比较多&#xff0c;这里会分为五篇文章来讲解&#xff0c;从页面的创建、飞船控制、射击、外星人创建、射杀外星人五片来展开。 做一个窗口和设置响应用户 import sysimport pygame&qu…

STM32逆变器方案

输入电压&#xff1a; 额定输入电压&#xff1a;DC110V 输入电压范围&#xff1a;DC77-137.5V 额定输出参数 电压&#xff1a;200V5%&#xff08;200VAC~240VAC 可调&#xff09; 频率&#xff1a; 42Hz0.5Hz&#xff08;35-50 可调&#xff09; 额定输出容量&#xff1a;1…

CentOS7搭建Elasticsearch与Kibana服务

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net 1.2拉取elasticsearch镜像 docker pull elasticsearch:7.11.1 1.3.运行 运行docker命令&#xff0c;部…

致远互联FE协作办公平台 editflow_manager.jsp SQL注入漏洞

漏洞描述 致远互联FE协作办公平台是一款为企业提供全方位协同办公解决方案的产品。它集成了多个功能模块&#xff0c;旨在帮助企业实现高效的团队协作、信息共享和文档管理。致远互联FE协作办公平台editflow_manager存在sql注入漏洞&#xff0c;攻击者可以获得敏感信息。 资产…

Vue框架引入Element-Ui

首先已经创建好了 Vue 框架&#xff0c;安装好了 node.js。 没有完成的可按照此博客搭建&#xff1a;搭建Vue项目 之后打开终端&#xff0c;使用命令。 1、命令引入 npm i element-ui -S2、package.json 查看版本 在 package.json 文件里可查看下载好的依赖版本。 3、在 ma…