乐趣区

关于golang:K8S-系列k8s-学习一Kubernetes-基本介绍及核心组件

Kubernetes 概述

官网::https://kubernetes.io/

kubernetes github:https://github.com/kubernetes…

学习材料(语言能够自在切换):https://www.kubernetes.org.cn…

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 的模式
  • 标签和资源是多对多的关系,一个标签能够有多个资源,一个资源也能够有多个标签
  • 一个资源领有多个标签的时候,能够实现不同维度的治理
  • 有一种模式叫做 注解,他与标签相似

依据官网的阐明和解释

标签能够是 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 逻辑架构图,该图来源于网络

图中波及到的模块,上面会一一提到

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 集群网络图示例

个别主控节点能够揉在一起部署,主控节点和 Pod 节点,逻辑上是离开的,物理上实际上是能够部署在一起,主控节点个别部署 2 个

例如能够这样高可用部署,

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

其中 Proxy 代理 四层网络和七层网络,别离次要是代理 apiserver 和 ingress 利用

参考资料:

kubernetes docs

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

我是 小魔童哪吒,欢送点赞关注珍藏,下次见~

退出移动版