衣舞晨风

勿忘初心

Kubernetes 架构及基础概念

一、K8S架构

这里写图片描述

  • K8S 集群组成
    • 分布式存储(Etcd)
    • 控制节点(Master)
    • 工作节点(Node)
  • 只有 apiserver 与存储通信
    • 用户直接访问 apiserver
    • 内部进程,包括 kubelet, controller 均通过 apiserver 访问存储
    • 出于安全考虑
  • 配置管理操作声明式而非命令式

二、基础概念

1、Namespace与ResourceQuota

Namespace

  • 物理集群上的虚拟集群
  • 用户级别的资源限制,用户只需关注 namespace 上的资源情况
  • 默认没有资源限制,需要通过 ResourceQuota 来配额

这里写图片描述

ResourceQuota: Namespace 资源配额

  • 计算资源配额
    • CPU,MEM
  • k8s 元素数量配额

2、Resource

这里写图片描述

3、Label 和 Selector

Label

  • 用于区分资源的 key/value 键值对

  • 资源可以拥有多个 label

这里写图片描述

selector

  • 根据 label 选择对应的资源
  • Equality-based 选择器

    • kubectl get pods -l environment=production,tier=frontend
  • Set-based 选择器

    • kubectl get pods -l ‘environment in (production),tier in (frontend)’

4、Master节点

这里写图片描述

5、Node

这里写图片描述

6、Pod

  • 多个容器的集合
  • 最小调度单位
  • 共享 namespace
    • PID 名字空间(同一 Pod 内的容器能看到其他容器的PID,Docker 容器暂不支持)
    • 网络名字空间(共享 IP 和 localhost)
    • IPC 名字空间(能够使用 SystemV IPC 或者POSIX 消息队列进行通信)
    • UTS 名字空间(共享同一个主机名)
  • Pod 的网络原则:一 Pod 一 IP
  • 防止端口冲突
  • 方便服务注册

这里写图片描述

7、Service

  • 一个唯一指定的名字
  • 一个虚拟 IP 和端口号
  • 服务类型
    • ClusterIP(default)
    • Nodeport
    • LoadBalancer
  • 服务发现
    • 环境变量
    • DNS

这里写图片描述

8、ReplicationController

ReplicationController(简称RC)是确保用户定义的Pod副本数保持不变。
这里写图片描述

RC 替代方法:
ReplicaSet
ReplicaSet是支持新的set-based选择器要求的下一代ReplicationController 。
Deployment(推荐)

9、StatefulSets

Pod调度运行时,如果应用不需要任何稳定的标示、有序的部署、删除和扩展,则应该使用一组无状态副本的控制器来部署应用,例如 Deployment 或 ReplicaSet更适合无状态服务需求。

10、Volumes

  • Pod 生命周期内一直可用
  • Pod 内容器共享
  • 当前支持的类型
    • emptyDir:Pod 与 Node 绑定/解绑时创建/删除
    • hostPath:挂载 Node 上的目录
    • gcePersistentDisk
    • nfs

这里写图片描述

Volumes(存储卷)是Pod中能够被多个容器访问的共享目录。Kubernetes的Volumes概念与Docker的Volumes比较类似,但并不完全相同。Kubernetes中的Volumes与Pod生命周期相同,而不与容器的生命周期相关。当容器终止或者重启时,Volumes中的数据也不会丢失。另外,Kubernetes支持多种类型的Volumes,并且一个Pod可以同时使用任意多个Volumes。

emptyDir:一个EmptyDir Volume是在Pod分配到Node时创建的。从它的名称就可以看出,它的初始内容为空。同一个Pod中所有容器可以读和写EmptyDir中的相同文件。当Pod从Node上移除时,EmptyDir中的数据也会永久删除。
EmptyDir的一些用途如下:
- 临时空间,例如用于某些应用程序运行时所需的临时目录,且无需永久保留;
- 长时间任务的中间过程CheckPoint临时保存目录;
- 一个容器需要从另一个容器中获取数据的目录(多容器共享目录)。

hostPath:在Pod上挂载宿主机上的文件或目录。
hostPath通常可以用于:

  • 容器应用程序生成的日志文件需要永久保存,可以使用宿主机的高速文件系统进行存储;
  • 需要访问宿主机上Docker引擎内部数据结构的容器应用,可以通过定义hostPath为宿主机/var/lib/docker目录使得容器内部应用可以直接访问Docker的文件系统。
  • 在不同Node上具有相同配置的Pod可能会因为宿主机上的目录和文件不同而导致对Volume上目录和文件的访问结果不一致;

11、ConfigMap

  • 应用镜像和配置分离
  • 数据类型为键值对
  • Pod 使用 ConfigMap 的三种方式
    • 命令行参数
    • 环境变量
    • 数据卷文件

12、Deployment

  • 确保任意时间都有指定数量的Pod “副本”在运行
  • 通过 Pod 选择器筛选出对应的Pod 实例并实时监控其状态和数量
  • 提供 Pod 和 Replica Set 的声明式更新
  • 把部署,滚动更新和回滚进行了自动化
  • 创建 Deployment
    • kubectl create -f docs/user-guide/nginx-deployment.yaml –record
  • 更新 Deployment
    • kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
  • 查看 Deployment 的修订版本
    • kubectl rollout history deployment/nginx-deployment

Deployment负责创建和更新应用。创建Deployment后,Kubernetes master 会将Deployment创建好的应用实例调度到集群中的各个节点。
应用实例创建完成后,Kubernetes Deployment Controller会持续监视这些实例。如果管理实例的节点被关闭或删除,那么 Deployment Controller将会替换它们,实现自我修复能力。
创建Deployment时,需要为应用程序指定容器镜像以及要运行的副本数,后续可以通过Deployment更新来更改该这些信息。

13、API group

  • 每个 API group 中的资源可以单独的 enable/disable
  • 每个 API group 有不同的版本,单独开发维护

14、PersistentVolume (PV)

  • 集群中的一块网络存储
  • 独立于 Pod 的生命周期
  • 支持的 PV 类型
    • GCEPersistentDisk
    • AWSElasticBlockStore
    • NFS
    • Cinder
    • iSCSI

本文整理自网络

个人微信公众号:
这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

阅读更多
版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。 https://blog.csdn.net/xunzaosiyecao/article/details/78219365
个人分类: Kubernetes
想对作者说点什么? 我来说一句

Kubernetes架构深度解析

2018年06月08日 952KB 下载

Kubernetes微服务架构应用实践

moonpure moonpure

2016-11-04 11:49:17

阅读数:538

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭