【K8S|【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 默认发布方式)
- 灰度发布
- 金丝雀发布
Pod 是 K8S 里面的概念,
是 K8S 里面能够被运行的最小逻辑单元,也就是原子单元
【【K8S|【K8S 系列】k8s 学习一,Kubernetes 基本介绍及核心组件】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
- ReplicaSet
Deployment 控制 ReplicaSet,ReplicaSet 控制 Pod
- StatefulSet
- Job
- CronJob
其中 Deployment 和 DaemonSet 最为核心
Name 和 Namespace
Name 就是名称
在 K8S 里面,是用
资源
来定义每一种逻辑概念或者功能,每种资源就要有自己的名称,名称通常定义在资源
的元数据
里面例如:
资源
的 api 版本- 类别 kind
- 元数据 metadata
- 定义清单 spec
- 状态 status 等配置文件
随着项目,人员,集群规模不断扩张,我们就需要一种能隔离 K8S 内部资源的方法,就会使用命名空间
- 我们可以理解命名空间就是内部的一个虚拟组
- 不同的命名空间里面的资源名字可以相同,相同的命名空间内的资源不能同名
- K8S 里面默认存在的命名空间有:
- default
- kube-system
- kube-public
- 查询 K8S 里面特定的资源需要带上相应的命名空间
Lable 就是标签
标签是 K8S 特色的管理方式,便于分类管理资源对象,有如下几个注意点:
- 标签的组成是 key=value 的形式
- 标签和资源是多对多的关系,一个标签可以有多个资源,一个资源也可以有多个标签
- 一个资源拥有多个标签的时候,可以实现不同维度的管理
- 有一种形式叫做
注解
,他与标签类似
文章图片
标签可以是 63 个字符以下,包含[a-z0-9A-Z],还可以包含
-
,_
,.
Label 选择器 就是可以对标签进行过滤,进行管理
标签选择器目前有两种:
- 基于等值关系(等于 或者 不等于)
- 基于集合关系(属于 或者 不属于)
- matchLabels
- matchExpressions
k8s 有三大网络:
- Node 节点网络
- Pod 容器网络
- service 集群网络
K8S 就有专门的 Service 服务来处理这个问题
- 一个 Service 服务可以看作一组提供相同服务的 Pod 对外访问的接口
- 然而 Service 作用与哪些 Pod ,这是通过标签选择器来定义的
- service 只能进行在第 4 层上面进行流量调度,咱们能够看到的表现形式是 ip + port
- Ingress 就比较强大,他可以调度不同业务域,还可以调度不同 URL 访问路径的业务流量
文章图片
图中涉及到的模块,下面会逐个提到
CLI 客户端 1 个
- kubectl
- CNI 网络插件 - flanel /calico
- 服务发现插件 - coredns
- 服务暴露插件 - traefik
- GUI 管理插件 - Dashboard
配置存储中心 使用的是 ETCD 服务
主控节点(master)有如下 3 个:
- kube-apiserver 服务
他的作用非常强大,有如下 4 个主要的功能
1、提供集群管理的 RESTFUL API 接口,这里面包括鉴权,数据校验及集群状态变更等
2、负责其他模块之间的数据交互,承担通信枢纽的功能所有组件的交互都需要通过 apiserver
3、apiserver 是资源控制的入口
4、apiserver 提供完备的安全机制
- kube-controller-manager 服务
1、Node 控制器
2、Deployment 控制器
3、service 控制器
4、Volume 控制器
5、Endpoint 控制器
6、Garbage 控制器
7、Namespace 控制器
8、Job 控制器
9、Resource quta 控制器 等等
- kube-schedule 服务
1、预算策略(predict)
2、优选策略(priorities)
运算节点有如下 2 个:
- kube-kubelet 服务
此处的期望状态有这些:
运行的容器,副本数量,网络如何配置,存储如何配置等等
1、kubelet 会定时汇报当前节点的状态给到 apiserver,用于之后调度使用
2、kubelet 还做镜像和容器的清理工作,保证节点的镜像不会占满磁盘空间
- kube-proxy 服务
1、kube-proxy 可以建立 Pod 网络和集群网络的关系 (clusterip -> podip)
2、kube-proxy 负责建立、删除和更新调度规则,通知 apiserver 自身更新,或者从 apiserver 获取调度规则,更新 kube-proxy 自身
kube-proxy 常用的三种流量调度模式:
- Userspace
- Iptables
- Ipvs
文章图片
一般主控节点可以揉在一起部署,主控节点和 Pod 节点,逻辑上是分开的,物理上实际上是可以部署在一起,主控节点一般部署 2 个
例如可以这样高可用部署,
文章图片
etcd 一般部署奇数个,例如1、3、5、7等等,因为其中一个 etcd 挂了,会通过选举投票的方式来选举下一个 etcd 作为主,若部署的是偶数个 etcd 就无法选举出结果
其中 Proxy 代理 四层网络和七层网络,分别主要是代理 apiserver 和 ingress 应用
参考资料:
kubernetes docs
欢迎点赞,关注,收藏 朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
文章图片
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是小魔童哪吒,欢迎点赞关注收藏,下次见~
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长