K8S 企业容器云01 - 资源管理

1 分钟读完

《Kubernetes权威指南-企业级容器云实战》 学习笔记

计算资源管理

解决多租户间不同应用容器的 CPU、内存等资源共享和分配,并提供不同级别的 QoS

跨集群资源

通过 Federation 组件将多个 Kubernetes 集群纳管

资源分区

Namespace 将 K8S 集群划分为多个虚拟分区,从逻辑上将租户间的应用隔离

资源配额 & 限制

从三个级别实现租户资源配额和控制

1- Container 级别

Requests <–> Limits

2- Pod 级别

LimitRange

3- Namespace 级别

ResourceQuota

服务端口号

1- 查看当前对外服务 NodePort

2- 纳入现有业务端口

3- 新业务创建时规避以上端口

网络资源管理

跨主机容器网络方案

K8S 网络模型设计原则: 每个 Pod 拥有一个独立 IP,所有 Pod 都在一个可以直接联通的、扁平的网络空间中,运行在不同 Node 上也可以通过 IP 进行访问。

Overlay 网络: 在不改变现有网络配置的前提下,通过某种额外的网络协议,将原 IP 报文封装起来,形成逻辑上的新网络。

CNI(Container Network Interface): 定义容器运行环境与网络插件之间的接口规范,仅关心容器创建时的网络配置和容器被销毁时的网络资源释放。

目前常用网络方案

1- Flannel

  • 为每个 Node 上的 docker0 网桥配置一个互不冲突的 IP 地址池;

  • 为各 Node 的 docker0 虚拟网络建立一个 Overlay Network,通过覆盖网络将原数据包封包后传输再解包

2- Calico

基于 BGP 的纯三层网络方案

Calico 使容器间流量通过 IP 路由的方式互联互通,直接利用数据中心的网络结构,不需要额外的 NAT、隧道或 Overlay 网络,没有额外封包,节约 CPU 运算且提高网络效率。

3- macvlan

基于 Linux Kernel,在 Node 的一个网络接口上配置多个虚拟的网络接口,这些接口有独立的 MAC 和 IP,使得容器网络和主机网络在同一网段中。

4- Linen

基于 Open vSwitch 的 Overlay 网络方案

5- 直接路由

为每个 Pod 配置 Node 上的路由规则

网络策略

使用 Network Policy 机制对容器间网络通信进行限制和准入控制

集群边界路由器 Ingress

Service 作用于 K8S 集群内部,对外需要 Ingress 将服务暴露出去

常用的 Ingress Controller:Nginx、HAProxy、Traefik

集群 DNS 域名服务

K8S 集群内推荐用 Service Name 作为目的服务的访问地址

1- 集群内部 DNS

skyDNS -> kubeDNS -> CoreDNS

2- 自定义 DNS 和上游 DNS

存储资源管理

存储资源使用需求

  • 应用配置文件、密钥

  • 应用数据的持久化存储

  • 应用间共享数据

Volume 类型

1- 临时目录:生命周期随 Pod 同步

  • emptyDir

2- 配置类:将配置以 Volume 形式挂载到 Pod 上

  • ConfigMap

  • Secret:密码密钥

  • downwardAPI

  • gitRepo:Git 代码库

3- 本地存储类

  • hostPath:容器挂载宿主机目录

  • local:本地存储以 PV 的形式提供给容器

4- 共享存储类

  • PV:Persistent Volume,供多个容器应用共享的持久存储卷

共享存储

CSI(Container Storage Interface):在容器和共享存储之间建立一套标准的存储访问接口,将存储供应商的代码与 K8S 代码完全解耦

K8S 通过 PV/StorageClass 和 PVC(Persistent Volume Claim)来完成共享存储资源的定义,并通过 volumeMount 挂载到容器的目录或文件进行使用

PV 即可用的存储资源,PVC 是对存储资源的需求

  • 静态模式:先指定存储后端定义一部分 PV,以供业务调用

  • 动态模式:通过对 StorageClass 的设置标记好后端存储类型,系统自动完成 PV 的创建及与 PVC 的绑定

支持的共享存储类型:FC、Flocker、NFS、iSCSI、CephFS、CephRBD、Cinder、GlusterFS、vSphere、Quobyte、Portworx、Dell EMC ScaleIO、StorageOS、gcePersistentDisk、AWS EBS、AzureFile、AzureDisk 等

存储资源应用场景

1- 存储放置于容器内部

  • 配置简单、易于水平扩展、I/O 性能无额外损耗

  • 难以持久化保存、要求容器间文件无交互关联

适用于存储运行中产生的临时文件

2- 存储挂载在宿主机上

  • 生命周期与容器本身解绑、I/O 性能无额外损耗

  • 实例间目录干扰、和宿主机绑定

适合有状态类型的容器应用;及 I/O 性能要求高的应用,如数据库类

3- 使用外部共享存储

  • 数据持久化、便于容器水平扩展

  • 网络传输对存储的性能影响

适合有状态类型的容器应用;对 I/O 性能不特别敏感;可以水平扩展

镜像资源管理

镜像生命周期

基于持续集成(Continuous Integration)流程,由 DevOps 工具链完成镜像的自动化构建过程,记录镜像版本信息,存入镜像仓库。

基于持续部署(Continuous Deployment)流程,使用仓库内的镜像完成应用的部署和更新

镜像库多租户权限

1- 不同租户的镜像互相隔离

2- 不同租户对镜像拥有不同权限(上传、下载、删除)

镜像库远程复制

多数据中心或跨地域多站点环境,通过总镜像库加多个子镜像库的两级镜像库设置,提高下载效率。

总镜像库的变更自动触发子镜像库远程同步。

镜像库操作审计

保留镜像操作记录

常用开源镜像库

1- Docker Registry

2- VMware Harbor

3- Sonatype Nexus

4- SUSE Portus

分类:

更新时间: