【K8S 系列】k8s 学习一,Kubernetes 基本介绍及核心组件

简介: 【K8S 系列】k8s 学习一,Kubernetes 基本介绍及核心组件

【K8S 系列】k8s 学习一,Kubernetes 基本介绍及核心组件

Kubernetes 概述

官网::kubernetes.io/

kubernetes github:github.com/kubernetes/…

学习资料(语言可以自由切换):www.kubernetes.org.cn/k8s

image.png

kubernetes 有什么由来?

最开始是谷歌公司内部使用的 Borg 系统,后面使用 Golang 重写并捐献给 CNCF 基金会开源了

kubernetes 重要的作用?

kubernetes 是一个开源的容器编排框架工具,有着极其丰富的生态资源

学习 kubernetes 的意义?

解决单机裸跑 docker 的若干痛点

为什么 kubernetes  叫做 K8S ?

因为 k 到 s 之间 有 8个字母, 因此叫做 K8S

kubernetes 有什么优势?

  • 可自动装箱,可水平扩展,可自我修复
  • 有服务发现和负载均衡
  • 可集中化配置管理和秘钥管理
  • 可存储编排
  • 可任务批处理运行
  • 可自动发布和回滚 等等

此处的自动发布默认是滚动发布模式

自动发布模式有如下 4 种:

  • 蓝绿发布
  • 滚动发布 (kubernetes 默认发布方式)
  • 灰度发布
  • 金丝雀发布

kubernetes 的四组概念

Pod 和 Pod 控制器

Pod 是 K8S 里面的概念,

是 K8S 里面能够被运行的最小逻辑单元,也就是原子单元

1 个 Pod 里面可以运行多个 docker 容器,多个 docker 容器是共享 UTS命名空间,NE命名空间T,IPC命名空间的

K8S 里面称这种 1 个 Pod 里面可以运行多个 docker 容器的模式叫做 边车模式(SideCar)

这里顺便说一下 linux 里面的 6 种命名空间:

  • UTS

主机名

  • IPC

进程间通信

  • PID

chroot进程树

  • NS

挂载点

  • NET

网络访问,包括接口

  • USER

将本地的虚拟user-id映射到真实的user-id

Pod 控制器是 Pod 启动的一种模板,用来保证 K8S 里面启动的 Pod 能够始终按照人们的预期运行,例如副本数,生命周期,健康状态的检查等等

K8S 里面提供了多个 Pod 控制器,如下 6 种最为常见 Pod 控制器,具体使用的时候我们再详细的说明其作用和原理:

  • Deployment

部署,为无状态服务而设计的,

  • DaemonSet

DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用

  • ReplicaSet

为无状态服务而设计,简称为RC,是复本控制器,主要作用是确保 Pod 以我们指定的副本数运行

Deployment 控制 ReplicaSet,ReplicaSet 控制 Pod

  • StatefulSet

是为了解决有状态服务的一系列问题

  • Job

负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束

  • CronJob

即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务

其中 Deployment 和 DaemonSet 最为核心

Name 和 Namespace

Name 就是名称

在 K8S 里面,是用资源来定义每一种逻辑概念或者功能,每种资源就要有自己的名称,名称通常定义在资源元数据里面

例如:

  • 资源的 api 版本
  • 类别 kind
  • 元数据 metadata
  • 定义清单 spec
  • 状态 status 等配置文件

Namespace 就是命名空间

随着项目,人员,集群规模不断扩张,我们就需要一种能隔离 K8S 内部资源的方法,就会使用命名空间

  • 我们可以理解命名空间就是内部的一个虚拟组
  • 不同的命名空间里面的资源名字可以相同,相同的命名空间内的资源不能同名
  • K8S 里面默认存在的命名空间有:
  • default
  • kube-system
  • kube-public
  • 查询 K8S 里面特定的资源需要带上相应的命名空间

Lable 和 Label 选择器

Lable 就是标签

标签是 K8S 特色的管理方式,便于分类管理资源对象,有如下几个注意点:

  • 标签的组成是 key=value 的形式
  • 标签和资源是多对多的关系,一个标签可以有多个资源,一个资源也可以有多个标签
  • 一个资源拥有多个标签的时候,可以实现不同维度的管理
  • 有一种形式叫做注解,他与标签类似

根据官网的说明和解释

image.png

标签可以是 63 个字符以下,包含[a-z0-9A-Z],还可以包含-_ .

Label 选择器 就是可以对标签进行过滤,进行管理

标签选择器目前有两种:

  • 基于等值关系(等于 或者 不等于)
  • 基于集合关系(属于 或者 不属于)

许多的资源是支持内嵌标签选择器字段的

  • matchLabels
  • matchExpressions

Service 和 Ingress

k8s 有三大网络:

  • Node 节点网络
  • Pod 容器网络
  • service 集群网络

K8S 面对一个问题,K8S 里面的每个 Pod 都会分配一个单独的 IP 地址,但是这个地址会随着 Pod 的销毁而消失

K8S 就有专门的 Service 服务来处理这个问题

  • 一个 Service 服务可以看作一组提供相同服务的 Pod 对外访问的接口
  • 然而 Service 作用与哪些 Pod ,这是通过标签选择器来定义的

Ingress 就是 K8S 里面网络模型下第 7 层的应用,他是对外暴露接口的

  • service 只能进行在第 4 层上面进行流量调度,咱们能够看到的表现形式是 ip + port
  • Ingress 就比较强大,他可以调度不同业务域,还可以调度不同 URL 访问路径的业务流量

K8S 的组成

K8S 逻辑架构图,该图来源于网络

image.png

图中涉及到的模块,下面会逐个提到

CLI 客户端 1 个

  • kubectl

核心附件有如下 4 个:

  • CNI 网络插件 - flanel /calico
  • 服务发现插件 - coredns
  • 服务暴露插件 - traefik
  • GUI 管理插件 - Dashboard

核心组件

配置存储中心 使用的是 ETCD 服务

主控节点(master)有如下 3 个:

  • kube-apiserver 服务

是整个 K8S 的大脑

他的作用非常强大,有如下 4 个主要的功能

1、提供集群管理的 RESTFUL API 接口,这里面包括鉴权,数据校验及集群状态变更等

2、负责其他模块之间的数据交互,承担通信枢纽的功能所有组件的交互都需要通过 apiserver

3、apiserver 是资源控制的入口

4、apiserver 提供完备的安全机制

  • kube-controller-manager 服务

就是用来管理控制器的 , 它由一系列控制器组成,所有的控制器都依赖于 kube-controller-manager ,通过 apiserver 监控整个集群的状态,并确保他们都处于预期的工作,例如

1、Node 控制器

2、Deployment 控制器

3、service 控制器

4、Volume 控制器

5、Endpoint 控制器

6、Garbage 控制器

7、Namespace 控制器

8、Job 控制器

9、Resource quta 控制器 等等

  • kube-schedule 服务

主要就是接收调度 Pod 到合适的节点上面,他有 2 个策略:

1、预算策略(predict)

2、优选策略(priorities)

运算节点有如下 2 个:

  • kube-kubelet 服务

kubelet 主要就是定时从某处节点上获取 Pod 的期望状态,并调用对应的 docker 接口来达到这个状态

此处的期望状态有这些:

运行的容器,副本数量,网络如何配置,存储如何配置等等

1、kubelet 会定时汇报当前节点的状态给到 apiserver,用于之后调度使用

2、kubelet 还做镜像和容器的清理工作,保证节点的镜像不会占满磁盘空间

  • kube-proxy 服务

kube-proxy 就是一个 K8S 上运行网络的代理,service 服务资源的载体

1、kube-proxy 可以建立 Pod 网络和集群网络的关系 (clusterip -> podip)

2、kube-proxy 负责建立、删除和更新调度规则,通知 apiserver 自身更新,或者从 apiserver 获取调度规则,更新 kube-proxy 自身

kube-proxy 常用的三种流量调度模式:

  • Userspace
  • Iptables
  • Ipvs

K8S 集群网络图示例

image.png

一般主控节点可以揉在一起部署,主控节点和 Pod 节点,逻辑上是分开的,物理上实际上是可以部署在一起,主控节点一般部署 2 个

例如可以这样高可用部署,

image.png

etcd 一般部署奇数个,例如1、3、5、7等等,因为其中一个 etcd 挂了,会通过选举投票的方式来选举下一个 etcd 作为主,若部署的是偶数个 etcd 就无法选举出结果

其中 Proxy 代理 四层网络和七层网络,分别主要是代理 apiserver  和 ingress 应用

参考资料:

kubernetes docs


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
18天前
|
存储 运维 Kubernetes
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
|
4天前
|
Kubernetes Java API
Kubernetes详解(三)——Kubernetes集群组件
Kubernetes详解(三)——Kubernetes集群组件
15 1
|
12天前
|
Kubernetes API 调度
|
18天前
|
Kubernetes Ubuntu Linux
Kubernetes(K8S)集群管理Docker容器(部署篇)
Kubernetes(K8S)集群管理Docker容器(部署篇)
|
18天前
|
存储 Kubernetes Docker
Kubernetes(K8S)集群管理Docker容器(概念篇)
Kubernetes(K8S)集群管理Docker容器(概念篇)
|
18天前
|
Kubernetes Shell 网络安全
Shell脚本快速部署Kubernetes(K8S v1.1版本)集群系统
Shell脚本快速部署Kubernetes(K8S v1.1版本)集群系统
|
16天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
2天前
|
存储 运维 监控
Kubernetes 集群的持续监控与性能优化策略
【5月更文挑战第11天】在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。随着其在不同规模企业的广泛采用,如何确保 Kubernetes 集群的高效稳定运行变得至关重要。本文将探讨一套系统的 Kubernetes 集群监控方法,并结合实践经验分享针对性能瓶颈的优化策略。通过实时监控、日志分析与定期审计的结合,旨在帮助运维人员快速定位问题并提出解决方案,从而提升系统的整体表现。
|
9天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与维护策略
【5月更文挑战第4天】 在当今微服务架构盛行的时代,容器化技术已成为软件开发和部署的标准实践。Kubernetes 作为一个开源的容器编排平台,因其强大的功能和灵活性而广受欢迎。然而,随着 Kubernetes 集群规模的扩大,集群的监控和维护变得日益复杂。本文将探讨 Kubernetes 集群监控的重要性,分析常见的监控工具,并提出一套有效的集群维护策略,以帮助运维人员确保集群的健康运行和高可用性。
40 10
|
10天前
|
存储 运维 监控
Kubernetes 集群的持续监控与优化策略
【5月更文挑战第3天】在微服务架构和容器化部署日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排平台。然而,随着集群规模的增长和业务复杂度的提升,有效的集群监控和性能优化成为确保系统稳定性和提升资源利用率的关键。本文将深入探讨针对 Kubernetes 集群的监控工具选择、监控指标的重要性解读以及基于数据驱动的性能优化实践,为运维人员提供一套系统的持续监控与优化策略。