二进制部署K8S-1基本概念

感谢老男孩教育王导的公开视频,文档整理自https://www.yuque.com/duduniao/k8s。

1.实验环境

1.1 虚拟机

因为在后期运行容器需要有大量的物理硬件资源使用的环境是用的Wmware EXSI如果使用笔记本可适当调整虚拟机配置。

角色 主机名 IP CPU Mem OS
(主)负载均衡、内网DNS hdss7-11.host.com 10.4.7.11 4C 4G CentOS Linux release 7.8
(备)负载均衡、内网DNS hdss7-12.host.com 10.4.7.12 4C 4G CentOS Linux release 7.8
k8s master、k8s node、etcd hdss7-21.host.com 10.4.7.21 4C 8G CentOS Linux release 7.8
k8s master、k8s node、etcd hdss7-22.host.com 10.4.7.22 4C 8G CentOS Linux release 7.8
harbor私有仓库、nfs hdss7-200.host.com 10.4.7.200 4C 4G CentOS Linux release 7.8

1.2 网络拓扑

  • Service 网络是虚拟网络,主要提供ClusterIP
  • Pod网络提供给创建的pod
  • 物理网络主要连接到每个虚拟机各个组件之间的通信。
  • Kube-proxy 连接了service网络和pod网络。

1.3 逻辑架构

2.docker的特点

2.1 docker引擎的意义

  • 统一了基础设施的环境

    不管是在什么平台上面只要能安装上docker引擎就运行程序。

  • 统一了程序打包的方式。

    docker镜像,不管是java、python、nodejs.......

  • 统一了程序的启动方式。

    不管什么程序docker run

2.2 docker容器的缺点

  • 单机使用,无法有效集群。
  • 随着容器数量的上升,管理成本上升。
  • 没有有效的容灾恢复机制。
  • 没有预设的编排模板,无法实现快速,大规模容器调度。
  • 没有统一的配置管理中心。
  • 没有容器生命周期工具。
  • 没有图形化运维工具。

3. k8s的优势

  • 自动装箱、水平扩展,自我修复。
  • 服务器自动发现和负载均衡。
  • 自动发布(滚动式发布)和回滚。
  • 集中化配置管理和密钥管理。
  • 存储编排。
  • 任务批处理运行。

......

4.k8s基本概念

4.1 pod

  • k8s中能够被运行的最小逻辑单元(原子单元)
  • 一个pod里面可以运行多个容器,他们共享UTS+NET+IPC名称空间。
  • 可以把pod理解位豌豆荚,一个容器理解为豌豆。
  • 一个pod里面运行多个容器,又叫边车模式(sideCar)。

4.2 pod 控制器

  • pod控制器是pod启动的一种模板,用来保证在k8s里启动的pod应始终按照人们预期运行(副本数、生命周期、健康状态检查。。。)
  • k8s中提供了多种控制器,常用的有:
    • Deployment
    • DaemonSet
    • ReplicaSet
    • Job
    • Cronjob

4.3 Name

k8s内部使用“资源”来定义每一种逻辑概念(功能)故每一种“资源”,都应该有自己的名称。

“资源”

  • api版本 ---- apiVersion
  • 类别 ---- kind
  • 元数据 ---- metadata
  • 定义清单 ---- spec
  • 状态 ---- status

名称通常定义在“资源”的”元数据“信息里面。

4.4 Namespace

  • 随着项目的增多、人员增加、集群规模的扩大,需要一种能够隔离k8s内部“资源”的方法,就是名称空间。
  • 名称空间可以理解为k8s内部的虚拟集群组。
  • 不同名称空间的“资源”,名称可以相同,相同名称空间内的同种“资源”,“名称“不能相同。
  • 合理的使用k8s的名称空间,使得集群管理员能够更好的对交付到k8s里的服务进行分类管理和浏览。
  • k8s里默认存在的名称空间有default、kube-system、kube-public
  • 查询k8s里特定”资源“要带上相应的名称空间。
  1. 删除一个namespace会自动删除所有属于该namespace的资源。
  2. default和kube-system命名空间不可删除。
  3. PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的。
  4. Events是否属于namespace取决于产生events的对象。

4.5 Label

  • 标签是k8s特色的管理方式,便于分类管理资源对象。
  • 一个标签可以对应对个资源,一个资源可以有多个标签,他们是多对多的关系。
  • 一个资源拥有多个标签,可以实现不同维度的管理。
  • 标签的组成:key=value
  • 与标签类似的,还有一种”注释“(annotations)

4.6 Label选择器

  • 给资源打上标签后,可以使用标签选择器过滤指定的标签。
  • 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)
  • 许多资源支持内嵌标签先择器字段。
    • matchLables
    • matchExpressions

4.7 Service

  • 在k8s的世界里虽然每一个pod会被分配一个IP地址,但这个IP地址会随着Pod的销毁而消失。
  • Service(服务)就是用来解决这个问题的核心概念。
  • 一个Service可以看做是一组提供相同服务的Pod的对外访问接口。
  • Service作用于哪些Pod是通过标签选择器定义的。

4.8 Ingress

  • Ingress是k8s集群里工作在OSI网络参考模型下,第七层的应用,对外暴露的端口。比如http
  • Service只能进行L4(OSI的第四层)流量调度,表现形式是ip+port
  • Ingress则可以调度不同业务域、不同URl访问路径的业务流量。

5. 核心组件

5.1 配置存储中心----etcd服务

5.2 主控master节点:

kube-apiserver服务

提供了集群管理的REST-API接口(包括鉴权、数据校验及集群状态变更。)

负责其它模块之间的数据交互,承担通信枢纽功能。

是资源配额控制的入口。

提供完备的集群安全机制。

kube-controller-manager服务

由一系列控制器组成通过api-server监控整个集群的状态,并确保集群处于预期的工作状态。

kube-scheduler服务

接收调度pod到适合的节点上。

预算策略

优选策略

5.3 运算node节点:

kube-kubelet服务

kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行的什么容器、运行的副本数量、网络或者存储如何配置等等 )并调用相应的容器平台接口达到相应的状态。

定时汇报当前节点的状态给api-server以供调度的时候使用。

镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多的资源。

kube-proxy

是k8s在每个节点上运行网络代理,service资源的载体

建立了pod网络和集群网络的关系(clusterIP---podip)

常用三种流量调度模式:

​ userspace

​ iptables

​ ipvs

负责建立和删除包括更新调度规则、通知apiserver自己的更新,或者从apiserver那里获取其它kubeproxy的调度规则变化来更新自己。

CLI客户端

  • kubectl

5.4 核心附件:

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

K8S中文文档

最新文章

  1. ASP.NET MVC - 探究应用程序文件夹
  2. C++11引用临时变量的终极解析
  3. 第一次wubi安装Ubuntu的经历及所走的弯路
  4. [TYVJ] P1049 最长不下降子序列
  5. jquery实现锚点动画效果
  6. Cocos2d-x 地图步行实现1:图论Dijkstra算法
  7. IBM Mq Spring JMS 的xml配置
  8. Codeforces #377 Div2
  9. java 方法重载overload
  10. 为什么要使用消息认证码(MAC)而非对称密钥?
  11. Mybatis if test 中int判断非空的坑
  12. java集合之ArrayList,TreeSet和HashMap分析
  13. spo0lsv病毒分析
  14. Python语言说明
  15. Redis入门到高可用(十三)—— 发布订阅
  16. leveldb 学习记录(八) compact
  17. 浅谈微服务架构、容器技术与K8S
  18. java的八大排序
  19. 调研getfit
  20. 纪念Vamai

热门文章

  1. kubernetes dashboard 2.0 部署
  2. HCL实验8:NAT搭建私有网络
  3. 01-MySQL Linux安装
  4. OO电梯系列优化分享
  5. Linux就该这么学:重定向,管道符,通配符,转义符,环境变量
  6. OrchardCore 如何动态加载模块?
  7. Unity2D项目-平台、解谜、战斗! 1.5 Player框架、技能管理组件
  8. manjaro 手动调节屏幕亮度
  9. 玉帝传美猴王上天,大闹天宫之Java设计模式:命令模式
  10. H5 hybrid开发-前端资源本地化方案纪要