硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

Kubernetes 的核心概念讲解

  • 2019-08-13
  • 本文字数:2147 字

    阅读完需:约 7 分钟

Kubernetes的核心概念讲解

入门 Kubernetes 是非常困难的,因为这会涉及到许多的概念和新理念,本文以图文并茂的形式总结了 Kubernetes 中的核心概念。


它本不必如此困难?

掌握 Kubernetes 是非常困难的,因为互联网上有如此多的信息,有时候很难找到理解 Kubernetes 的“核心”信息,当我们看到kubernetes.io站点上概念页面和文档如此密集时更会如此。在本文中,我们将会探索 Kubernetes 的核心概念,以便于获取关于它的基础知识,这样我们就可以一起揭开 Kubernetes 的神秘面纱。

什么是 Kubernetes?

Kubernetes 提供了基础设置和构造,帮助我们的团队构建适用于开发和部署的可用平台。用户可以通过图形化的用户界面以及命令式和声明式命令行接口管理 Kubernetes 集群,Kubernetes 旨在管理容器化应用程序和服务的整个生命周期。


借助 Kubernetes,我们可以扩展和收缩应用程序、执行滚动部署并管理由哪些服务处理特定的请求。它还提供了一个可扩展的开发框架,允许我们的团队扩展核心的 Kubernetes 原语(primitive)以满足个性化的需求。同时,它还支持创建自己的概念。


但是,与大多数框架一样,它的缺点之一是缺少许多现成的功能,无法被视为交钥匙(turn-key)解决方案。在标准发行版中,它不包含服务如何相互通信的方法(甚至不包含网络组件!),因此存在其他的发行版,另外我们也可以构建自己的版本。

容器

容器是独立、可执行的软件,它包含了运行所需的所有内容,比如代码、库和所有的外部依赖。它会确保运行的内容是完全相同的,即便是位于不同的环境中也是如此。这是通过将要运行的代码与它的运行上下文隔离开实现的。


在 Linux 中,这是通过使用名为 cgroups 的 API 来分割 Linux 内核的一个子集来实现的。这种方式提供了与操作系统的高度隔离,但不会带来像虚拟化环境(如 VMWare、KVM 等)那样的性能损耗。


Pod

pod 是 Kubernetes 中最基本的对象。


pod 是容器的集合,它们共享存储和网络,并且具备如何运行它们的规范。每个 pod 会分配自己的 IP 地址。pod 中的容器会共享这个 IP 地址、端口空间,并且能够使用 localhost 实现彼此查找。


pod 应该被视为短暂存活的原子单元。


Replicaset

根据给定的模板,replicaset 可以运行 n 个 pod。


replicaset 并不会直接使用,但是需要理解这种资源,因为在 Kubernetes 构建应用的时候,它是基础的构建块。


(按照指令)replicaset 可以按需扩展和收缩 pod 的数量。


Service

因为 pod 是短期存活的(replicaset 通过扩展和收缩 pod 的数量实现这一点),那么这就带来了一个问题,现在,除非使用非常复杂的逻辑,否则我们几乎不可能引用单个 pod 以便于跟踪拓扑结构的变化。


Service 通过在 pod 之上提供抽象来解决这个问题,它提供了一个可寻址的方法来与 pod 进行通信。


Service 操作的是 OSI 模型之中的“第 4 层”(IP 之上的 TCP/UDP)。


Deployment

Deployment 管理 replicaset,可以在应用的不同版本间执行滚动更新。


这是最常用的资源类型,它通过一个接口提供了对 replicaset 和 pod 的抽象。



在更新 Deployment 的时候,换句话说,也就是部署应用的新版本,Deployment 控制器会创建一个新的 replicaset,并管理新版本替换旧版本的滚动更新。



在 Kubernetes 1.11 版本中,Deployment 目前不会自动处理回滚。

ConfigMap

设计良好的应用应该遵循十二要素应用宣言,应用的配置应该保存到“环境”中。尽管现在通用的安全实践指出,在环境中存储配置可能会导致私密的意外泄漏,因为一些应用程序在失败时会暴露了它们的环境信息,但是无论如何,如果配置随环境(开发、staging、生产)而变化的话,那么就应该将它们与要构建的应用分开进行存储。


ConfigMaps 允许将配置文件作为环境变量或文件系统挂载到 Pod 中,从而解决了这个问题。


Secret

Secret 与 ConfigMap 非常类似,顾名思义,它们对应的是“Secret”信息。


Daemonset

Daemonset 会确保所有的节点都运行特定的 Pod。如果要在所有节点上运行像日志代理(如 fluentd)这样的内容的话,这是非常有用的。


它还能够通过使用 Taints 忽略特定的节点。


Ingress

在大多数情况下,Service 和 Pod 的 IP 地址只能在 Kubernetes 集群中进行访问。Service 是与互联网流量隔离的。


“Ingress 是一组规则集合,它允许入站的连接访问集群 Service。”



它可以用于负载平衡、终止 TLS、为外部提供可路由的 URL 等等。Ingress 只是另外一种 Kubernetes 资源,但是,在大多数情况下,它需要有一个 Ingress 控制器,如 Nginx 或 Træfik 等。


Kubernetes 是一个自动化容器编排平台,能够允许应用程序在大型平台上大规模运行,这些平台可以包含不同处理器体系结构和操作系统的组合,这完全由实现者决定。


借助这些核心概念,Kubernetes 可以将 Pod 安排到适当的节点上,以确保 Pod 的最大密度,这会由 Kubernetes 实现的多种算法来控制,比如 Bin Packing,从而实现更高的硬件利用率。


参考资料:


[1] https://medium.com/google-cloud/kubernetes-configmaps-and-secrets-68d061f7ab5b


[2] https://medium.com/google-cloud/kubernetes-configmaps-and-secrets-part-2-3dc37111f0dc


[3] https://kubernetes.io/docs/concepts/configuration/secret/


[4] https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/


本文最初发表于云原生计算基金会官方博客,由 InfoQ 中文站翻译分享。


2019-08-13 09:086371

评论

发布
暂无评论
发现更多内容

怎样做分布式数据一致性优化?YashanDB实现策略分享

数据库砖家

怎样做海量数据归档管理?选择YashanDB的理由详解

数据库砖家

跨集群搜索在安全应用中的配置指南

qife122

机器学习 跨集群搜索

怎样在YashanDB中实现数据流动性

数据库砖家

怎样实现YashanDB与其他工具的无缝集成?

数据库砖家

怎样做保障YashanDB数据安全与权限管理

数据库砖家

怎样搭建适合大规模企业的YashanDB系统架构

数据库砖家

怎样实现YashanDB的高可用性架构设计?

数据库砖家

怎样通过YashanDB优化服务的响应时间

数据库砖家

怎样做保障YashanDB数据库的安全性与稳定性?

数据库砖家

怎样做定期优化YashanDB数据库性能的实用方法?

数据库砖家

怎样做高效查询优化,提升YashanDB性能表现?

数据库砖家

怎样构建高效安全的YashanDB数据库访问控制?

数据库砖家

怎样利用YashanDB的弹性扩展确保服务持续可用

数据库砖家

通过YashanDB集成云计算服务提升灵活性

数据库砖家

YashanDB数据库安全策略规划与配置

数据库砖家

使用Jekyll Bootstrap快速构建静态博客

qife122

ruby 静态站点

怎样利用YashanDB实现企业数据的自动化管理

数据库砖家

通过YashanDB支持深度学习模型的训练

数据库砖家

怎样做调优YashanDB数据库参数提升查询性能?

数据库砖家

怎样利用YashanDB支持API迈向未来

数据库砖家

怎样做备份与恢复YashanDB数据库的最佳实践

数据库砖家

构建基于YashanDB数据库的分布式事务管理系统技术分析

数据库砖家

可扩展文本转语音框架实现多模型协同

qife122

系统架构 文本转语音

怎样通过YashanDB支持实时监控需求

数据库砖家

通过YashanDB进行API的性能测试

数据库砖家

通过YashanDB实现数据集成平台的技术分析

数据库砖家

怎样在YashanDB中支持多种数据分析工具

数据库砖家

利用YashanDB构建机器学习模型

数据库砖家

Awesome Vite.js - 精选Vite.js资源大全

qife122

vite 脚手架

怎样在YashanDB中实现负载均衡?

数据库砖家

Kubernetes的核心概念讲解_语言 & 开发_Tom Gallacher_InfoQ精选文章