Go微服务架构实战-中篇 1. k8s架构介绍

2023-05-16

Go微服务架构实战-公粽号:【堆栈future】

本系列文章主要是针对云原生领域微服务架构的实战,包括网关,k8s,etcd以及grpc等相关技术的应用,同时也会把服务发现与注册,熔断,降级,限流以及分布式锁等加入到系列当中作为补充,课程的最后也会安排分布式链路追踪框架的学习,监控平台的搭建以及灰度发布等技术服务,所以总体来讲,课程范围涉及技术领域较广,知识面比较宽,大家下来各取所需尽量做到熟悉和应用,之后有时间了在研究下源码,乐哉!

上篇已经完成,大家可以看下,我这里贴出来了,中篇从这周开始陆续为大家产出,因为太耗费精力,所以还望大家多多支持!

Go微服务架构实战目录

1. 微服务架构上篇

1. grpc技术介绍

2. grpc+protobuf+网关实战

3. etcd技术介绍

4. 基于etcd的服务发现与注册

5. 基于etcd的分布式锁实战

2. 微服务架构中篇

1. k8s架构介绍

1. k8s是什么

k8s就是k到s之间的距离是8,所以叫做k8s。图片

废话:原名是Kubernetes,简称k8s,k到s中间隔8个字符,为了方便记忆和书写就省去了这八个字符,用数字8代替。

k8s是Google公司开源的一个容器编排与调度管理框架,该项目最初是Google内部面向容器的集群管理系统,而现在是由CNCF托管的开源平台,由Google、AWS、Microsoft、IBM、Intel、Cisco和Red Hat等主要参与者支持,其目标是通过创建一组新的通用容器技术来推进云原生技术和服务的开发。作为领先的容器编排引擎,k8s提供了一个抽象层,使其可以在物理或虚拟环境中部署容器应用程序,提供以容器为中心的基础架构。

这是官方说法,说白了就是你之前docker起的容器以及对这些容器的管理和调度比较复杂,你使用k8s之后,容器的创建,调度,滚动升级等都变得异常简单,所以各个大厂小厂都在拥抱这种变化,对现有的服务进行k8s升级改造。

2. k8s能解决什么问题

对于大多数用户来说,k8s的主要作用是在一个给定的集群上把一个应用运行起来。更进一步说,k8s需要提供的是网关、水平拓展、监控、备份、灾难恢复等一系列运维能力。

3. k8s架构图

图片k8s系统架构遵循客户端/服务端(C/S)架构,系统架构分为Master和Node两部分,Master作为服务端,Node作为客户端。k8s系统具有多个Master服务端,可以实现高可用。在默认的情况下,一个Master服务端即可完成所有工作。


  • Master节点
  1. 主要负责
  • 集群的“大脑”,负责管理所有节点(Node)。

  • 负责调度Pod在哪些节点上运行。

  • 负责控制集群运行过程中的所有状态。

  1. 包含组件
  • etcd:保存整个集群的状态

  • apiserver提供了资源的唯一入口,并提供认证、授权、访问控制、API注册和发现等

  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等

  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上


  • Node节点
  1. 主要负责
  • 负责管理所有容器(Container)。

  • 负责监控/上报所有Pod的运行状态。

  1. 包含组件
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理

  • Container runtime负责镜像的管理以及Pod和容器的真正运行(CRI)

  • kube-poxy负责为Service提供cluster内部的服务发现和负载均衡


除了核心组件,还有一些推荐的组件:

  1. kube-dns负责为整个集群提供DNS服务

  2. Ingress Controller 为服务提供外网入口

  3. Heapster提供资源监控

  4. Flannel(提供集群间网络)

  5. Dashboard提供GUIFederation提供跨可用区的集群

  6. Fluentd-elasticsearch提供集群日志采集,存储与查询

说完组件之后,接下来开始k8s中各个资源对象的介绍。

  • Pod对象

  • k8s中最小的管理和部署单位,一个Pod中可以有一个或多个容器。同一Pod中的容器共享IP地址、通过localhost相互通信、共享数据卷。

  • 不同Pod之间可以相互访问或者通过service访问

  • Pod有自己的IP,但是不能对外使用,只能集群内使用,因为Pod随时就会被丢弃,外部的IP就无效了,可以通过别的方式对外暴露。

  • 从集群外部访问不鸟,因为集群网络都是隔离的,需要借助别的资源打通

  • Service对象

  • 一组逻辑Pods和它们访问策略的抽象,为一组相同属性的Pods抽象出一个固定IP地址,允许Pod之间以及Pod与Service之间相互通信。

  • 简称svc,通过筛选Pod的标签将一组Pod管理起来

  • svc提供一定的负载均衡能力

  • 对于Pod来说svc就是它们的统一入口

  • Deployment对象

  • 提供Pod滚动更新和ReplicaSets的控制器

  • 创建Pod,创建Pod的副本集

  • 删除Pod以及副本集

  • ReplicaSet对象

  • 保证集群在任何时间点上都有指定数量的Pod副本,除非你需要定制滚动更新的策略或者不需要滚动更新,K8s推荐使用Deployment而不是直接操作ReplicaSet

  • Namespace对象

  • 将集群资源汇总在指定的空间之下

  • 隔离资源对象

  • 默认是default空间

还有其它很多对象就不逐一介绍了,大家下去重点了解哈。

在我们了解了上述架构,组件以及资源对象之后,中篇后期文章所有基于这些对象和组件编排任务的流程就会清晰很多,我们会在上篇创建的基于grpc+etcd+gateway的项目上进行k8s任务编排,把裸机部署改造为容器化部署

最后放一张docker相关命令图,因为k8s管理的容器目前都是基于docker容器运行时环境,所有docker相关的你就得了解它。图片

公粽号:堆栈future

使很多处于迷茫阶段的coder能从这里找到光明,堆栈创世,功在当代,利在千秋

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go微服务架构实战-中篇 1. k8s架构介绍 的相关文章

随机推荐

  • CMakeLists.txt常用语法

    0 绪 cmake 是一个跨平台 开源的构建系统 它是一个集软件构建 测试 打包于一身的软件 它使用与平台和编译器独立的配置文件来对软件编译过程进行控制 1 常用命令 1 1制定cmake最小版本 cmake minimum require
  • Vue 模板

    原文 在Vue中 xff0c Vue模板对应的就是Vue中的View xff08 视图 xff09 部分 xff0c 也是Vue重中之一 xff0c 而在Vue中要了解Vue模板我们就需要从两个方面来着手 xff0c 其一是Vue的模板语法
  • Ubuntu:系统分区

    在系统分区之前 先进行磁盘分区 这里针对的是window10系统下安装ubuntu双系统 需要在window10下进行磁盘分区来安装ubuntu系统 一 磁盘分区 win10系统下 右击此电脑 xff0c 点击管理就进入磁盘管理 这时候可以
  • Mac 安装node.js

    Mac系统安装Node js xff0c 下载地址 如上图安装路径 xff1a This package will install Node js v16 19 1 to usr local bin node span class toke
  • MySQL 常用函数(二)

    ABS函数 xff1a 求绝对值 绝对值函数 ABS x 返回 x 的绝对值 正数的绝对值是其本身 xff0c 负数的绝对值为其相反数 xff0c 0 的绝对值是 0 span class token keyword SELECT span
  • MyBatis Mapper常用动态SQL之foreach 、if、choose、where、when

    if语句 lt if gt 判断语句 xff0c 用于单条件分支条件判断 使用 lt if gt 元素对参数username和jobs进行非空判断 xff0c 并动态组装SQL xff1a span class token keyword
  • Java 查看官方Java API文档

    话不多说 xff0c 直接上方法 打开官网址 xff1a http www oracle com technetwork cn java javase downloads index html 方式一 在线浏览 点击Java 文档 xff1
  • iOS-微信分享成功回调问题

    本人用ShareSDK做分享和第三方登录 xff0c 登录先不讲 xff0c 本节只做分享成功或失败后回调问题 相信好多人会有这个疑惑就是在微信分享成功后没有成功后的方法回调 xff0c 我在ShareSDK论坛也发表过帖子问过 xff0c
  • iOS-常见三种加密(MD5、非对称加密,对称加密)

    任何应用的开发中安全都是重中之重 xff0c 在信息交互异常活跃的现在 xff0c 信息加密技术显得尤为重要 在app应用开发中 xff0c 我们需要对应用中的多项数据进行加密处理 xff0c 从而来保证应用上线后的安全性 xff0c 给用
  • iOS-开辟子线程(NSThread、NSOperationQueue、GCD)

    本节主要总结一些开辟子线程的常用的几种方法 一 通过NSThread类开辟子线程 1 NSThread手动开启子线程 span class hljs comment 创建线程对象 span span class hljs built in
  • Mac 安装 IntelliJ IDEA 以及激活方法

    之前一直在苹果移动端开发 xff0c 这里想了解下Java后台的开发 xff0c 以至于更好的配合后台工作 xff0c 下面说下破解版的安装过程 xff08 Mac xff09 第一步 xff1a 下载Java开发工具 这里我们选择比较好的
  • Mac IntelliJ IDEA连接和操作MySQL数据库

    想要IntelliJ IDEA后台开发 xff0c 数据库的连接时必不可少的 xff0c 这里我们选择开源的 xff0c 同时也是使用人数比较多的一种数据库MySQL 第一步 xff1a MySQL的下载安装 到MySQL官网下载 xff0
  • GStreamer-CRITICAL **: gst_element_make_from_uri: assertion `gst_uri_is_valid (uri)' failed

    在Qt中 xff0c 使用phonon播放视频的时候 xff0c 出现了GStreamer CRITICAL gst element make from uri assertion 96 gst uri is valid uri 39 fa
  • IDEA导入JDBC驱动的jar包

    JDBC的全称是Java Database Connectivity xff0c 意思就是Java数据库链接 xff0c 是一套面向对象的应用程序接口 xff0c 指定了统一的访问各种类型数据库的标准接口 JDBC是一种底层的API xff
  • IDEA-自带Database中table进行增删改查和筛选数据

    显式的数据库有人喜欢用Navicat Premium xff0c 在里面对数据进行各种筛选和增删改查操作 xff0c 用起来很方便 这里我们说下IDEA内部自带的显式的数据库 这里我已经建好数据库和表 xff0c 表内数据我也添加了若干条
  • Flutter - Android Studio开发Flutter以及iOS真机测试

    上一节已经配置好了iOS和安卓的环境 xff0c 下面我们用Android Studio开发Flutter xff0c 当然你也可以用VSCode和ItelliJ IDEA来开发 还没配置的同学请看上一片文章 一 创建项目 接着上一节操作
  • Oracle 中ORA-28000: the account is locked解决办法

    在没有navicat xff0c 只有cmd应用程序的条件下 xff0c 在密码输入多次都出现 the account is locked用户账号被锁的问题 xff0c 请看这里 xff1a 首先 xff0c 出现ORA 28000 the
  • Linux 虚拟机设置共享文件夹不显示问题解决办法

    安装完VMware Tools后 xff0c 不要点重新启动客户机 xff0c 需要先关闭客户机 xff0c 然后再启动客户机就可以看到共享的文件
  • ROS话题通信c++和python实现

    机器人是一种高度复杂的系统性实现 xff0c 在机器人上可能集成各种传感器 雷达 摄像头 GPS 以及运动控制实现 xff0c 为了解耦合 xff0c 在ROS中每一个功能点都是一个单独的进程 xff0c 每一个进程都是独立运行的 更确切的
  • Go微服务架构实战-中篇 1. k8s架构介绍

    Go微服务架构实战 公粽号 xff1a 堆栈future 本系列文章主要是针对云原生领域微服务架构的实战 xff0c 包括网关 xff0c k8s xff0c etcd以及grpc等相关技术的应用 xff0c 同时也会把服务发现与注册 xf