专注企业网站建设,wordpress打赏积分功能,杭州 商城网站开发,中山百度关键词搜索学习k8s
我为什么要用k8s 和其他部署方式的区别是什么? 传统部署方式 java -- package -- 放到服务器上 -- Tomcat 如果是同时进行写操作,会存在并发问题. 用户 --网络带宽– 服务器 --服务 同一个服务器上,多个服务: 网络资源的占用 内存的占用 cpu的占…学习k8s
我为什么要用k8s 和其他部署方式的区别是什么? 传统部署方式 java -- package -- 放到服务器上 -- Tomcat 如果是同时进行写操作,会存在并发问题. 用户 --网络带宽– 服务器 --服务 同一个服务器上,多个服务: 网络资源的占用 内存的占用 cpu的占用 … 资源争抢 复杂度可以通过脚本来解决. 虚拟化部署/隔离机制/占用资源过多 java -- package --xx.jar– linux服务器(虚机[Tomcat xx.jar文件 ]) 带来了,资源占用过度问题 虚机的启动是分钟级别 容器化部署 容器的启动是 秒级别的.
k8s的特点?为什么选择k8s? 为了解决以上问题,需要什么? 自我修复 弹性伸缩 自动部署和回滚 服务发现和负载均衡 机密和配置管理 存储编排 批处理 企业级服务调度平台有哪些? Apache Mesos 概念: 资源管理器,把所有的资源管理,调度,主从模式,zookeeper给主节点提供服务注册,服务发现功能,通过Framework Marathon 提供容器调度能力. 优势: 发布时间早,5w节点控制,大规模节点的管理. 缺点: 面向节点,而不是容器 Docker Swarm 概念: 标准版的Docker API 优势: 和Docker是集成的. 缺点: 已经弃用了.没人用. Google Kubernetes(一家独大) 概念: 使用Label和Pod的概念来将容器分为逻辑单元.Pods是同步地写作(co-located)容器的集合. 这是kubernetes 和其他两个框架哎的主要区别.简化了管理. 优势: 通过pods这一抽象的概念,解决了Container之间的依赖于通信问题,Pods,Services, Deployment 是独立部署的部分,可以通过 Selector 提供更多的灵活性,内置服务注册表和负载均衡. 缺点: 相比于 Apache Mesos 管理节点规模小
学习K8s
集群架构和组件
相关组件
控制面板组件(Master) kube-apiserver 接口服务,REST风格,k8s接口服务 kube-controller-manager 控制器管理器: 管理各个类型的控制器,管理k8s的各个资源 cloud-controller-manager 云控制器管理器: 第三方云平台提供的控制器API对接管理平台 kube-scheduler 调度器: 负责将pod给予一定算法,将其调用到合适的节点(Node)上 etcd k8s的数据库,键值对,分布式数据库,基于Raft算法, 老版本: 基于内存 新版本: 持久化存储
节点组件(Node)一般是多个Nodes kubelet 负责容器的生命周期 负责Volume(CVI)挂载,存储 网络(CNI)管理 kube-proxy 网络代理,负责Service的服务发现,负载均衡(4层负载) container-runtime 负责镜像管理已经Pod和容器的真正运行(CRI容器运行环境接口) docker,containerd,CRI-O,
附加组件 kube-dns kube-dns 负责为整个集群提供 DNS 服务 ingress Controller Ingress Controller 为服务提供外网入口 Prometheus Prometheus 提供资源监控 Dashboard Dashboard 提供 GUI Federtion Federation 提供跨可用区的集群 Fluentd-elasticsearch Fluentd-elasticsearch 提供集群日志采集、存储与查询
分层架构 生态系统 Kubernetes 外部日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS 应用、ChatOps 等Kubernetes 内部CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等 接口层 kubectl 命令行工具、客户端 SDK 以及集群 管理层 系统度量如基础设施、容器和网络的度量自动化如自动扩展、动态 Provision 等以及策略管理RBAC、Quota、PSP、NetworkPolicy 等 应用层 部署无状态应用、有状态应用、批处理任务、集群应用等和路由服务发现、DNS 解析等 核心层 Kubernetes 最核心的功能对外提供 API 构建高层的应用对内提供插件式应用执行环境
核心概念与专业术语
服务的分类 无状态 举例: Nginx /Apache 优点: 对客户端透明,无依赖关系,可以高效实施扩容,迁移 缺点: 不能储存数据,需要额外的数据服务支撑 有状态 举例: Mysql/Redis 优点: 可以独立存储数据,实现数据管理 缺点: 集权环境下需要实现主从,数据同步,备份,水平扩容复杂
资源和对象 元数据型 Horizontal Pod AutoscalerHPA Pod 自动扩容可以根据 CPU 使用率或自定义指标metrics自动对 Pod 进行扩/缩容。 控制管理器每隔30s可以通过–horizontal-pod-autoscaler-sync-period修改查询metrics的资源使用情况支持三种metrics类型 预定义metrics比如Pod的CPU以利用率的方式计算自定义的Pod metrics以原始值raw value的方式计算自定义的object metrics 支持两种metrics查询方式Heapster和自定义的REST API支持多metrics PodTemplate Pod Template 是关于 Pod 的定义但是被包含在其他的 Kubernetes 对象中例如 Deployment、StatefulSet、DaemonSet 等控制器。控制器通过 Pod Template 信息来创建 Pod。 LimitRange 可以对集群内 Request 和 Limits 的配置做一个全局的统一的限制相当于批量设置了某一个范围内某个命名空间的 Pod 的资源使用限制。
集群级别 Namespace Kubernetes 支持多个虚拟集群它们底层依赖于同一个物理集群这些虚拟集群被称为命名空间。 作用是用于实现多团队/环境的资源隔离。 命名空间 namespace 是 k8s 集群级别的资源可以给不同的用户、租户、环境或项目创建对应的命名空间。 默认 namespace kube-system 主要用于运行系统级资源存放 k8s 自身的组件kube-public 此命名空间是自动创建的并且可供所有用户包括未经过身份验证的用户读取。此命名空间主要用于集群使用关联的一些资源在集群中是可见的并且可以公开读取。此命名空间的公共方面知识一个约定但不是非要这么要求。default 未指定名称空间的资源就是 default即你在创建pod 时如果没有指定 namespace则会默认使用 default Node 不像其他的资源如 Pod 和 NamespaceNode 本质上不是Kubernetes 来创建的Kubernetes 只是管理 Node 上的资源。虽然可以通过 Manifest 创建一个Node对象如下 json 所示但 Kubernetes 也只是去检查是否真的是有这么一个 Node如果检查失败也不会往上调度 Pod。 ClusterRole ClusterRole 是一组权限的集合但与 Role 不同的是ClusterRole 可以在包括所有 Namespace 和集群级别的资源或非资源类型进行鉴权。 ClusterRoleBinding ClusterRoleBinding将 Subject 绑定到 ClusterRoleClusterRoleBinding 将使规则在所有命名空间中生效。
命名空间级别
####### 工作负载型
对象规约和状态
微服务项目k8s环境演示