白话 Kubernetes 基础概念

Kubernetes 简介

微服务框架的流行,使得服务愈来愈精细化,服务也变的愈来愈多,对于发布和管理而言产生了巨大的挑战,而 Docker 的诞生,给与微服务的资源治理和控制提供了很好的基础。容器化能够解决各个不一样语言环境部署、移植性高、跨平台部署等。可是 Docker 对于容器服务的编排没有那么方便,由于 Docker 这方面不足,而诞生 KubernetesKubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工做负载和服务,可促进声明式配置和自动化。docker

使用 Kubernetes 带来那些方便

  • 快速部署应用
  • 很容易实现 水平伸缩 或 垂直伸缩
  • 无缝发布新的应用版本
  • 资源使用最大化
  • 应用中止自动重启

Kubernetes 特色

  • 可移植:支持公有云、私有云、混合云、多重云(multi-cloud)
  • 可扩展:模块化、插件化、可挂载、可组合
  • 自动化:自动部署、自动重启、自动复制、自动伸缩/扩展

为何须要 Kubernetes,它能作什么?

容器是打包和运行应用程序的好方式。在生产环境中,您须要管理运行应用程序的容器,并确保不会停机。例如,若是一个容器发生故障,则须要启动另外一个容器。若是系统处理此行为,会不会更容易?json

这就是 Kubernetes 的救援方法!Kubernetes 为您提供了一个可弹性运行分布式系统的框架。Kubernetes 会知足您的扩展要求、故障转移、部署模式等。网络

Kubernetes 为您提供:负载均衡

  • 服务发现和负载均衡:Kubernetes 可使用 DNS 名称或本身的 IP 地址公开容器,若是到容器的流量很大,Kubernetes 能够负载均衡并分配网络流量,从而使部署稳定。
  • 存储编排:Kubernetes 容许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。
  • 自动部署和回滚:您可使用 Kubernetes 描述已部署容器的所需状态,它能够以受控的速率将实际状态更改成所需状态。例如,您能够自动化 Kubernetes 来为您的部署建立新容器,删除现有容器并将它们的全部资源用于新容器。
  • 容器资源配额:Kubernetes 容许您指定每一个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 能够作出更好的决策来管理容器的资源。
  • 自我修复:Kubernetes 从新启动失败的容器、替换容器、杀死不响应用户定义的运行情况检查的容器,而且在准备好服务以前不将其通告给客户端。
  • 密钥与配置管理:Kubernetes 容许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您能够在不重建容器镜像的状况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
  • 配置文件:Kubernetes 能够经过 ConfigMap 来存储配置。

Kubernetes 基础资源定义和理解

一切皆为资源,一切便可描述,一切皆可管理。框架

NameSpaces

命名空间,在一个 Kubernetes 集群中可使用namespace建立多个“虚拟集群”,这些namespace之间能够彻底隔离,也能够经过某种方式,让一个namespace中的service能够访问到其余的namespace中的服务。ssh

Deployment

Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代之前的 ReplicationController 来方便的管理应用。典型的应用场景包括:分布式

  • 定义Deployment来建立Pod和ReplicaSet
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续Deployment

Service

Kubernetes Service 定义了这样一种抽象:一个 Pod 的逻辑分组,一种能够访问它们的策略 —— 一般称为微服务。 这一组 Pod 可以被 Service 访问到,一般是经过 Label Selector实现的。模块化

Ingress

Ingress 是从 Kubernetes集群外部访问集群内部服务的入口。好比官方维护的 Ingress Nginxingress traefikingress haproxy等。微服务

Pod

Pod 是 kubernetes 中你能够建立和部署的最小也是最简的单位。Pod表明着集群中运行的进程。编码

Pod中封装着应用的容器(有的状况下是好几个容器),存储、独立的网络IP,管理容器如何运行的策略选项。Pod表明着部署的一个单位:kubernetes中应用的一个实例,可能由一个或者多个容器组合在一块儿共享资源。

ConfigMap

ConfigMap API 资源用来保存 key-value pair配置数据,这个数据能够在pods里使用,或者被用来为像controller同样的系统组件存储配置数据。虽然 ConfigMap 跟 Secrets 相似,可是ConfigMap更方便的处理不含敏感信息的字符串。 注意:ConfigMaps不是属性配置文件的替代品。ConfigMaps只是做为多个properties文件的引用。你能够把它理解为Linux系统中的/etc目录,专门用来存储配置文件的目录。

Secret

Secret 解决了密码、token、密钥等敏感数据的配置问题,而不须要把这些敏感数据暴露到镜像或者Pod Spec中。Secret 能够以Volume或者环境变量的方式使用。

Secret有三种类型:

  • Service Account :用来访问Kubernetes API,由Kubernetes自动建立,而且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;
  • Opaque :base64编码格式的Secret,用来存储密码、密钥等;
  • kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息。

PV 和 PVC

用于数据持续存储,Pod中,容器销毁,全部数据都会被销毁,若是须要保留数据,这里就须要用到 PV存储卷,PVC存储卷申明。

PVC 经常使用于 Deployment 作数据持久存储。实现持久化存储还须要理解 Volume 概念。

Volume

容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,可是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)从新启动。其次,在 Pod 中同时运行多个容器时,这些容器之间一般须要共享文件。Kubernetes 中的 Volume 抽象就很好的解决了这些问题。

Labels 和 Selectors

标签选择器。做用用于给每一个容器打标签,而后各个控制器经过 Selector 匹配容器,并管理。好比 Deployment 或 Service 都是经过这种方式匹配相应的 Pod。

自述

以上只是介绍 Kubernetes 几种经常使用的资源概念和做用,具体介绍能够查阅Kubernetes 官方文档

参考连接

本文由 YP小站 发布!
相关文章
相关标签/搜索