Kubernetes 是一个软件系统,使你在数以万计的电脑节点上运行软件时就像 所有节点是以单个大节点一样, 它将底层基础设施抽象,这样做同时简化了应用开发、部署,以及对开发和运维团队的管理。

Kubernetes集群架构

Kubernetes集群由很多节点组成,分为两大类:

  • 主节点 承载Kubernetes控制和管理整个集群系统的控制面板
  • 工作节点 运行实际部署的应用

控制面板

控制集群并使它工作,包含多个组件(组件单节点或通过副本分别部署到多个主节点以确保高可用)

  • Kubernetes Api Server: 客户端Kubectl、控制面板其他组件和worker节点都需要和它通信
  • Scheduler: 调度应用
  • Controller Manager: 执行集群级别功能,如复制组件、持续跟踪工作节点、处理节点失败等
  • etcd:可靠的分布式数据库存储,能持久化集群配置

工作节点

运行容器化应用的机器,运行、监控、管理应用服务的任务由下组件完成:

  • Docker、rtk或其他容器类型
  • Kubelet与API Server通信,并管理它所在节点容器
  • Kube-Proxy:负责组件之间负载均衡网络流量

MiniKube环境& 核心概念

本处window10+Hyper-V搭建minikube本地集群

这台虚拟机既作为master,又作为worker,Kubectl从集群外部发起管理和控制。

  1. # 因国内极差的网络环境,建议使用阿里云的镜像地址:
  2. minikube start --image-mirror-country=cn --image-repository=http://registry.aliyuncs.com/google_containers --registry-mirror=https://aq32bn7a.mirror.aliyuncs.com

以管理员权限执行CMD命令:

  • kubectl: 发送Restful api 控制Kubernetes集群管理器
  • Minikube是一个CLI工具,配置、管理(已针对开发流程优化)的单节点Kubernetes集群

列举4个核心概念

1. API

Kubernetes API作为声明式配置方案的基石,API文档中定义了API端点、资源,kubectl命令行工具可操作API对象,对象的序列化对象存储在etcd中,各组件也是通过API交互。

2. k8s对象

Kubernetes对象代表系统中持久化的实体,下面的实体都作为对象:

  • 哪些容器化应用正在运行
  • 这些应用程序可用的资源
  • 与这些应用程序有关的行为&策略:重新启动策略、升级和容错

Kubernetes对象是期望状态,创建对象之后,你就通知了K8s你希望集群这样运作。

大多数K8s对象由spec和status组成:

  • spec:[由你]提供资源的特征描述
  • status: [系统自行控制] 描述对象当前状态,由K8s系统组件设置和更新,K8s控制面板持续管理对象的实际状态去匹配你设定的期望状态

当你创建k8s对象, 你需要提供对象spec来描述预期状态。 当使用k8s API(或者kubectl),在API请求的body包含json信息;大多数时给kubectl提供.yaml文件来代替json,kubectl会将yaml文件中信息转换为json再发起API请求。

下面的kubia-rs.yaml文件:ReplicaSet对象启动3个nodejs应用, [spec]定义了此次ReplicaSet的规格

  1. apiVersion: apps/v1
  2. kind: ReplicaSet
  3. metadata:
  4. name: kubia-rs
  5. spec:
  6. replicas: 3
  7. selector:
  8. matchLabels:
  9. app: kubia
  10. template:
  11. metadata:
  12. labels:
  13. app: kubia
  14. spec:
  15. containers:
  16. - name: kubia
  17. image: luksa/kubia
  18. ports:
  19. - containerPort: 8080
  20. # 对于ReplicaSet啰嗦两句: 新一代的ReplicationController; 通常不会直接创建ReplicaSet,而是在创建更高级的Deployment资源时自动创建它们。

3. Pod

Kubernetes Pod是创建/部署k8s对象中最小最简单的单元:

由于不能将多个进程聚集在一个单独容器,需要另外一种高级结构将容器绑定在一起,作为一个单元管理,这就是Pod背后根本原理, 一个pod中容器共享相同ip和端口空间。

4. Controller

k8s控制器是一个control loop(监控集群状态,在被需要时或主动请求时更新集群),每个控制器都试图将当前集群状态移动到期望状态

在机器人和自动化,control loop是一个非终止回路,用于调节系统状态,例如房间的空调。

控制器自身可以执行操作,但一般情况下,控制器会将引起连锁反应的消息发往api server.

Kubernetes内置了一些控制器: ReplicaSet、Deployment、StatefulSets、DaemonSet、Job...

  1. # k8s deployment检查容器健康状态、保证容器数量、还具备部署相关的特性, deployment是管理和缩放容器的推荐控制器
  2. kubectl create deployment hello-kubia --iamge=luksa/kubia

这4个概念连起来就是:

K8s已经定义了API元数据,Controller调度K8s系统到指定的 预期状态(这个预期状态以K8s对象体现),在落地形式上以创建/调度Pod来承载应用。 (此4个概念还不包含NetWork相关)

开启Kubernetes之旅

创建3实例nodejs应用,

  1. 使用上面的K8s对象定义文件: kubia-rs.yaml文件:
  1. \> kubectl create -f kubia-rs.yaml
  2. \> kubectl get pod --show-labels=true
  3. NAME READY STATUS RESTARTS AGE LABELS
  4. kubia-rs-96ncq 1/1 Running 0 3m40s app=kubia
  5. kubia-rs-h5ppz 1/1 Running 0 3m41s app=kubia
  6. kubia-rs-x5578 1/1 Running 0 3m40s app=kubia

注意:Pod控制器中使用标签选择器来指定哪些Pod属于同一组(服务也使用同样机制)。

  1. 以上有多个Pod,创建服务对后端Pod形成负载均衡

[集群内访问]: ClusterIP

[提供集群外访问]

  • nodeport: 把 service 的 port 映射到集群节点的一个端口上
  • LoadBalancer:负载均衡器会单独分配一个ip地址并监听后端服务的指定端口,请求的流量会通过指定的端口转发到后端对应的服务。
  • Ingress (minikube addons先启用ingress,智能路由)

4种网络方式的yaml代码如下:请通过kubectl create -f ...ymal命令生成对应的服务(ingress不是服务)

LoadBalancer是服务暴露到集群外或者公网上的标准方式;

Ingress 这个服务类型跟我们前面的三种服务类型不一样,它实际上不是一种服务类型,而是类似一种集群服务入口的存在,它可以基于你配置的不同路径或者子域名把流量路由到对应的后端服务,更像是一个“智能路由”服务。

  1. 访问3 Pod实例的nodejs应用
  • ClusterIP 只能在集群内访问,minikube ssh 进入集群,或者Hyper-V进入VM: curl 10.100.166.197访问
  • nodePort、Loadbalancer 需要使用minikube获取本地集群url

  • ingress 是复杂网络应用的常规做法

    (1) 在hosts文件中添加kubia.xxx.com与IP地址的映射

    (2) 通过ingress路由访问pod

上面输出差异体现了随机Pod(即使连接来自同一个客户端),SessionAffinity亲和力属性值(ClientIP)可让单一客户端请求都指向一个Pod。

总结

本文从K8s全局架构讲起,力求先在你头脑中构筑宏观思维导图;

提出核心概念帮助全流程理解;

通过一个常见的多实例nodejs应用来实践k8s核心功能。

本文的所有代码:https://github.com/zaozaoniao/k8s-example.git

https://blog.csdn.net/weixin_44267608/article/details/102728050

2020年必须掌握的硬核技能k8s的更多相关文章

  1. 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点

    1. 前言 随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率.特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需 ...

  2. 十一长假我肝了这本超硬核PDF,现决定开源!!

    写在前面 在 [冰河技术] 微信公众号中的[互联网工程]专题,更新了不少文章,有些读者反馈说,在公众号中刷 历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了,但就是不 ...

  3. Mybatis系列全解(六):Mybatis最硬核的API你知道几个?

    封面:洛小汐 作者:潘潘 2020 年的大疫情,把世界撕成几片. 时至今日,依旧人心惶惶. 很庆幸,身处这安稳国, 兼得一份安稳工. · 东家常讲的一个词:深秋心态 . 大势时,不跟风.起哄, 萧条时 ...

  4. 袋鼠云研发手记 | 数栈·开源:Github上400+Star的硬核分布式同步工具FlinkX

    作为一家创新驱动的科技公司,袋鼠云每年研发投入达数千万,公司80%员工都是技术人员,袋鼠云产品家族包括企业级一站式数据中台PaaS数栈.交互式数据可视化大屏开发平台Easy[V]等产品也在迅速迭代.在 ...

  5. FPGA的软核与硬核

    硬核 zynq和pynq系列的fpga都是双ARM/Cortex-A9构成,这里的ARM处理器为硬核,Cortex-A9部分为FPGA部分.即整体分为两部分:PS/PL.PS部分为A9处理器部分,PL ...

  6. 嵌入ARM硬核的FPGA

    目前,在FPGA上嵌入ARM硬核的包括Xilinx的zynq系列以及Intel 的CYCLONEV系列. Zynq出来有一定市场,但是这个市场不是传统FPGA的主流市场,而是为了和微处理抢一些控制领域 ...

  7. 【开源我写的富文本】打造全网最劲富文本技术选型之经典OOP仍是魅力硬核。

    套路--先贴图 demo :  http://www.vvui.net/editor/index.html gitee : https://gitee.com/kevin-huang/Bui-Edit ...

  8. Colder框架硬核更新(Sharding+IOC)

    目录 引言 控制反转 读写分离分库分表 理论基础 设计目标 现状调研 设计思路 实现之过五关斩六将 动态对象 动态模型缓存 数据源移植 查询表达式树深度移植 数据合并算法 事务支持 实际使用 展望未来 ...

  9. 程序员需要了解的硬核知识之CPU

    大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CP ...

随机推荐

  1. 《Java多线程编程实战指南(核心篇)》阅读笔记

    <Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...

  2. ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径

    IViewLocationExpander API ExpandViewLocations Razor视图路径,视图引擎会搜索该路径. PopulateValues 每次调用都会填充路由 项目目录如下 ...

  3. 死磕Lambda表达式(六):Consumer、Predicate、Function复合

    你的无畏来源于无知.--<三体> 在上一篇文章(传送门)中介绍了Comparator复合,这次我们来介绍一下其他的复合Lambda表达式. Consumer复合 Consumer接口中,有 ...

  4. Blazor入门笔记(5)-数据绑定

    1.环境 VS2019 16.5.1 .NET Core SDK 3.1.200 Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.默认绑定 ...

  5. Gin框架系列03:换个姿势理解中间件

    什么是中间件 中间件,英译middleware,顾名思义,放在中间的物件,那么放在谁中间呢?本来,客户端可以直接请求到服务端接口. 现在,中间件横插一脚,它能在请求到达接口之前拦截请求,做一些特殊处理 ...

  6. 201771010108 -韩腊梅-java学习进度表

    2018面向对象程序设计(Java)课程进度表 周次 (阅读/编写)代码行数  发布博文量/评论他人博文数量  课余学习时间(小时)  学习收获最大的程序阅读或编程任务 1 30/40 1/0 8   ...

  7. 16个实例讲述如何写好App描述

    App描述很重要,很多人都知道,但你有没有亲自比较.研究过别人的app是如何描述的呢?   毫无疑问,app描述页面不仅仅是描述,它更多是一个销售页面,开发者不能面对面向用户营销自己的产品,因此app ...

  8. MVC分层设计

    MVC分层设计 什么是MVC? MVC 是一种软件架构模式,利用分层的思想来设计交互式应用程序,由以下3层组成: Model 业务模型层. View 展示层. Controller 控制层. MVC包 ...

  9. 以太坊代币,USDT归集流程图

    1.用户充值 600 代币 (网站小助手会及时监听到用户的充值信息,并回调给用户填写的URL地址) 2.会员转账600代币,属于大额转账,开始触发系统的自动汇集程序 注:这里系统检测到会员的地址并没有 ...

  10. Vulnhub webdeveloper靶机渗透

    信息搜集 nmap -sP 192.168.146.0/24 #主机发现 nmap -A 192.168.146.148 #综合扫描 访问一下发现是wordpress,wp直接上wpscan wpsc ...