kubernetes+rancher使⽤教程
⽬录
kubernetes 介绍
官⽅⽂档
kubernetes(K8S)概念
名称 Kubernetes 源于希腊语,意为 “舵⼿” 或 “飞⾏员”。Kubernetes 是⼀个可移植的、可扩展的开源平台,⽤于管理容器化的⼯作负载和服务,可促进声明式配置和⾃动化。Kubernetes 拥有⼀个庞⼤且快速增长的⽣态系统。Kubernetes 的服务、⽀持和⼯具⼴泛可⽤。
服务器部署时代变迁
传统部署时代: 早期,组织在物理服务器上运⾏应⽤程序。⽆法为物理服务器中的应⽤程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运⾏多个应⽤程序,则可能会出现⼀个应⽤程序占⽤⼤部分资源的情况,结果可能导致其他应⽤程序的性能下降。⼀种解决⽅案是在不同的物理服务器上运⾏每个应⽤程序,但是由于资源利⽤不⾜⽽⽆法扩展,并且组织维护许多物理服务器的成本很⾼。
虚拟化部署时代: 作为解决⽅案,引⼊了虚拟化功能,它允许您在单个物理服务器的 CPU 上运⾏多个虚拟机(VM)。虚拟化功能允许应⽤程序在 VM 之间隔离,并提供安全级别,因为⼀个应⽤程序的信息不能被另⼀应⽤程序⾃由地访问。
因为虚拟化可以轻松地添加或更新应⽤程序、降低硬件成本等等,所以虚拟化可以更好地利⽤物理服务器中的资源,并可以实现更好的可伸缩性。
每个 VM 是⼀台完整的计算机,在虚拟化硬件之上运⾏所有组件,包括其⾃⼰的操作系统。
容器部署时代: 容器类似于 VM,但是它们具有轻量级的隔离属性,可以在应⽤程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。容器与 VM 类似,具有⾃⼰的⽂件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和 OS 分发进⾏移植。
为什么需要 Kubernetes,它能做什么?
容器是打包和运⾏应⽤程序的好⽅式。在⽣产环境中,您需要管理运⾏应⽤程序的容器,并确保不会停机。例如,如果⼀个容器发⽣故障,则需要启动另⼀个容器。如果系统处理此⾏为,会不会更容易?
这就是 Kubernetes 的救援⽅法!Kubernetes 为您提供了⼀个可弹性运⾏分布式系统的框架。Kubernetes 会满⾜您的扩展要求、故障转移、部署模式等。例如,Kubernetes 可以轻松管理系统的 Canary 部署。
Kubernetes 为您提供:
服务发现和负载均衡
Kubernetes 可以使⽤ DNS 名称或⾃⼰的 IP 地址公开容器,如果到容器的流量很⼤,Kubernetes 可以负载均衡并分配⽹络流量,从⽽使部署稳定。
存储编排
Kubernetes 允许您⾃动挂载您选择的存储系统,例如本地存储、公共云提供商等。
⾃动部署和回滚
您可以使⽤ Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以⾃动化 Kubernetes 来为您的部署创建新容器,删除现有容器并将它们的所有资源⽤于新容器。
⾃动⼆进制打包
Kubernetes 允许您指定每个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
⾃我修复
Kubernetes 重新启动失败的容器、替换容器、杀死不响应⽤户定义的运⾏状况检查的容器,并且在准备好服务之前不将其通告给客户端。
密钥与配置管理
Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应⽤程序配置,也⽆需在堆栈配置中暴露密钥。
Pods
Pod 是 Kubernetes 应⽤程序的基本执⾏单元,即它是 Kubernetes 对象模型中创建或部署的最⼩和最简单的单元。Pod 表⽰在 集 上运⾏的进程。
Pod 封装了应⽤程序容器(或者在某些情况下封装多个容器)、存储资源、唯⼀⽹络 IP 以及控制容器应该如何运⾏的选项。
Pod 中的所有容器共享⼀个 IP 地址和端⼝空间,并且可以通过 localhost 互相发现。他们也能通过标准的进程间通信(如 SystemV 信号量或POSIX 共享内存)⽅式进⾏互相通信。不同 Pod 中的容器的 IP 地址互不相同,没有 特殊配置 就不能使⽤ IPC 进⾏通信。这些容器之间经常通过Pod IP 地址进⾏通信。
docker重启容器命令在 Docker 体系的术语中,Pod 被建模为⼀组具有共享命名空间和共享⽂件系统卷 的 Docker 容器。
控制器
在机器⼈技术和⾃动化中,控制回路是⼀个⾮终⽌回路,⽤于调节系统状态。
这是⼀个控制环的例⼦:房间⾥的温度⾃动调节器。
当你设置了温度,告诉了温度⾃动调节器你的期望状态。房间的实际温度是当前状态。通过对设备的开关控制,温度⾃动调节器让其当前状态接近期望状态。
控制器通过 apiserver 监控集的公共状态,并致⼒于将当前状态转变为期望的状态。
控制器可以为您创建和管理多个 Pod,管理副本和上线,并在集范围内提供⾃修复能⼒。 例如,如果⼀个节点失败,控制器可以在不同的节点上调度⼀样的替⾝来⾃动替换 Pod。
控制器包含以下⼏种
1、Deployment:
部署最适合⽤于⽆状态应⽤程序(即,当您不必维护⼯作负载的状态时)。由部署⼯作负载管理的Pod被视为独⽴且可处理的。如果Pod遇到中断,Kubernetes会将其删除,然后重新创建。⽰例应⽤程序将是Nginx Web服务器。
2、StatefulSets
与部署相反,当您的应⽤程序需要维护其⾝份并存储数据时,最好使⽤StatefulSets。应⽤程序将类似于Zookeeper,即需要数据库存储的应⽤程序。
3、DaemonSets
守护程序确保集中的每个节点都运⾏⼀个pod副本。对于要收集⽇志或监视节点性能的⽤例,这种类似于守护程序的⼯作负载效果最佳。
4、Jobs
作业启动⼀个或多个吊舱,并确保成功终⽌指定数量的吊舱。与管理进⾏中的所需应⽤程序状态相反,作业最好⽤于完成有限任务。
5、CronJobs
CronJobs与⼯作相似。但是,CronJobs会按基于cron的时间表运⾏完毕。
我第⼀次看到 Deployment 的描述的时候,⾮常费解,什么叫做⽆状态应⽤程序,什么叫有状态?在搜索了较多资料以后,这⾥给出我个⼈的⼀些理解:
⽆状态应⽤程序:程序的每个 Pod 之间相互独⽴,没有依赖关系,例如:普通的信息⽹站前端
有状态应⽤程序:程序的每个 Pod 之间互相依赖,添加每个 Pod 的时候需要做类似数据同步之类的操作,例如: Mysql 数据库Service(服务发现)
Kubernetes 中的服务(Service)是⼀种抽象概念,它定义了 Pod 的逻辑集和访问 Pod 的协议。Service 使从属 Pod 之间的松耦合成为可能。
尽管每个 Pod 都有⼀个唯⼀的 IP 地址,但是如果没有 Service ,这些 IP 不会暴露在集外部。Service 允许您的应⽤程序接收流量。Service 也可以⽤在 ServiceSpec 标记type的⽅式暴露
ClusterIP (默认) - 在集的内部 IP 上公开 Service 。这种类型使得 Service 只能从集内访问。
NodePort - 使⽤ NAT 在集中每个选定 Node 的相同端⼝上公开 Service 。使⽤: 从集外部访问 Service。是 ClusterIP 的超集。
LoadBalancer - 在当前云中创建⼀个外部负载均衡器(如果⽀持的话),并为 Service 分配⼀个固定的外部IP。是 NodePort 的超集。
ExternalName - 通过返回带有该名称的 CNAME 记录,使⽤任意名称(由 spec 中的externalName指定)公开 Service。不使⽤代理。这种类型需要kube-dns的v1.7或更⾼版本。
Service 匹配⼀组 Pod 是使⽤ 标签(Label)和选择器(Selector), 它们是允许对 Kubernetes 中的对象进⾏逻辑操作的⼀种分组原语。标签(Label)是附加在对象上的键/值对。
本教程版本
Rancher 版本 v2.5.3
Kubernetes 版本: v1.19.4
安装 Rancher
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论