您现在的位置是: 网站首页 >Kubernetes >Docker&Kubernetes技术全解 Kubernetes

【K8s+Docker技术全解】01.Kubernetes快速入门概述

admin2020年10月7日 21:28 Docker | Kubernetes | Linux 802人已围观

Docker&Kubernetes技术全解简介 Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 课程来自老男孩教育学习总结。

# 概述 官网: https://kubernetes.io/zh/docs/home/ **开源的容器编排框架工具(生态极为丰富)** Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 名称 **Kubernetes** 源于希腊语,意为 “舵手” 或 “飞行员”。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 [Google 在大规模运行生产工作负载方面拥有十几年的经验](https://ai.google/research/pubs/pub43438)的基础上,结合了社区中最好的想法和实践。 课程来自老男孩教育学习总结。 ## Kubernetes是什么 参考官网: https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/ - 传统部署时代:直接在物理机运行,多应用运行,互相影响。 - 虚拟化部署时代:单个服务器上运行多个虚拟机,每个VM都需要虚拟化硬件,资源消耗大。 - 容器部署时代:轻量级,与基础架构分离,方便移植。 ## 容器的优势 - 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了**容器镜像创建的简便性和效率**。 - **持续开发、集成和部署**:通过快速简单的回滚(由于镜像不可变性),提供可靠且频繁的容器镜像构建和部署。 - 关注开发与运维的分离:在构建/发布时而不是在部署时创建应用程序容器镜像,从而将**应用程序与基础架构分离**。 - **可观察性**:不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。 - 跨开发、测试和生产的**环境一致性**:在便携式计算机上与在云中相同地运行。 - 云和操作系统分发的**可移植性**:可在 Ubuntu、RHEL、CoreOS、本地、Google Kubernetes Engine 和其他任何地方运行。 - 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。 - 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分,并且可以动态部署和管理 \- 而不是在一台大型单机上整体运行。 - **资源隔离**:可预测的应用程序性能。 - **资源利用**:高效率和高密度。 ## Kubernetes能做什么 容器是打包和运行应用程序的好方式。在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。 - **服务发现和负载均衡** Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果到容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。 - **存储编排** Kubernetes 允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。 - **自动部署和回滚** 您可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以自动化 Kubernetes 来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。 - **自动二进制打包** Kubernetes 允许您指定每个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。 - **自我修复** Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。 - **密钥与配置管理** Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。 # 快速入门 ## 四组基本概念 ### Pod/Pod控制器 - Pod [官网](https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-overview/) - Pod是k8s里能够运行的最小的逻辑单元(原子单元) - 一个Pod里面可以运行多个容器,他们共享UTS+NET+IPC名称空间 - 可以把Pod理解成豌豆荚,而同一个Pod内的每个容器可以看成豌豆 - 一个Pod里面运行多个容器,有叫:边车(SideCar)模式 - Pod控制器 [官网](https://kubernetes.io/zh/docs/concepts/workloads/controllers/) - Pod控制器是Pod启动的一种模板,可以保证在k8s里启动的Pod始终按照我们的预期运行(副本数、生命周期、健康状态检查等) - k8s内提供了众多的Pod控制器,常用的有 - Deployment(常用) - DaemonSet(常用) - ReplicaSet - StatefulSet - Job - Cronjob ### Name/Namespace - Name [官网](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/names/) - 由于k8s内部使用“资源”来定义每一种逻辑概念(功能),故每种“资源”都应该有自己的“名称” - “资源”有api版本(apiVersion)、类别(kind)元数据(metadata)、定义清单(spec)、状态(status)等配置信息 - “名称”通常定义在“资源”的“元数据”信息里 - Namespace [官网](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/namespaces/) - 随着项目增多、人员增多、集群规模的扩大,需要一种能够隔离k8s内各种“资源”的方法,这就是名称空间 - 名称空间可以理解为k8s内部的虚拟集群组 - 不同名称空间内的“资源”、名称可以相同,相同名称空间内的各种“资源”、“名称”不能相同 - 合理的使用k8s的名称空间,使得集群管理员能够更好的对交付到k8s里的服务进行分类管理和浏览 - k8s里默认存在的名称空间有:`default`、`kube-system`、`kube-public` - 查询k8s里特定“资源”要带上相应的名称空间 ### Lable/Lable选择器 - Label [官网](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/) - 标签是k8s特色的管理方式,便于分类管理资源对象 - 一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多对多的关系 - 一个资源拥有多个标签,可以实现不同纬度的管理 - 便签的组成:`key=value` - 与标签类似的,还有一种“注释”(annotations) - Label选择器 [官网](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/) - 给资源打上标签后,可以使用标签选择器过滤指定的标签 - 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在) - 许多资源支持内嵌标签选择器字段 - matchLabels - matchExpressions ### Service/Ingress - Service [官网](https://kubernetes.io/zh/docs/concepts/services-networking/service/) - 在k8s中,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失,Service(服务)就是用来解决这个问题的 - 一个Service可以看做一组提供相同服务的Pod的对外访问接口 - Service作用于哪些Pod是通过标签选择器来定义的 - Ingress [官网](https://kubernetes.io/zh/docs/concepts/services-networking/ingress/) - Ingress是k8s集群里工作在OSI参考模型下,第7层的应用,对外暴露的接口 - Service只能进行L4流量调度,表现形式为ip+port - Ingress则可以调度不同业务域、不同URL访问路径的业务流量 ## 组件 - 核心组件 - 配置存储中心:etcd服务 - 主控(master)节点 - kube-apiserver服务(集群大脑) - 提供了集群管理的REST API接口(包括鉴权、数据校验、集群状态变更) - 负责其他模块之间的数据交互,承担通信枢纽功能 - 是资源配额控制的入口 - 提供完整的集群安全机制 - kube-controller-manager服务:控制器管理器 - 由一系列控制器组成,通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态 - Node、Deployment、Service、Volume、Endpoint、Garbage、Namespace、Job、Resource.... Controller - kube-scheduler服务 - 主要功能是接收调度Pod到适合的运算节点上 - 预算策略(predict) - 优选策略(priorities) - 运算(node)节点 - kube-kubelet服务 - 简单的说,kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等),并调用对应的容器平台接口达到这个状态 - 定时汇报当前节点的状态给apiserver,以供调度的时候使用 - 镜像和容器的清理工作,保证节点上的镜像不会占满磁盘空间,退出的容器不会占用太多资源 - kube-proxy服务 - 是k8s在每个节点上运行网络代理,service资源的载体 - 建立了pod网络和集群网络的管理(clusterip -> podip) - 常用三种流量调度模式:Userspace(废弃)、Iptables(濒临废弃)、Ipvs(推荐) - 负责建立和删除包括更新调度规则、通知apiserver自己的更新,或者从apiserver那里获取其他kube-proxy的调度规则变化来更新自己的 - CLI客户端 - kubectl - 核心附件 - CNI网络插件:flannel/calico - 服务发现用插件:coredns - 服务暴露用插件:traefik - GUI管理插件:Dashboard ![BLOG_20201007_213339_66](/media/blog/images/2020/10/BLOG_20201007_213339_66.png "博客图集BLOG_20201007_213339_66.png") ![BLOG_20201007_213331_54](/media/blog/images/2020/10/BLOG_20201007_213331_54.png "博客图集BLOG_20201007_213331_54.png") ## 常见安装方式 - Minikube 单节点微型k8s(学习、预览) - 二进制安装部署(生产环境) - 使用kubeadmin部署,k8s部署工具 Minikube运行,在官方文档,教程中: https://kubernetes.io/zh/docs/tutorials/hello-minikube/

很赞哦! (0)

文章交流

  • emoji
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行2076天
  • 系统信息:Linux
  • 后台程序:Python: 3.8.10
  • 网站框架:Django: 3.2.6
  • 文章统计:256 篇
  • 文章评论:60 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站