Kubernetes
Kubernetes简介
什么是Kubernetes?
Kubernetes(通常简称为K8s)是一个开源的容器编排平台,旨在自动化应用程序的部署、扩展和管理。它最初由Google设计并开源,现在由Cloud Native Computing Foundation (CNCF) 维护。
Kubernetes的核心功能:
- 服务发现和负载均衡:Kubernetes可以使用DNS名称或自己的IP地址公开容器,并在多个容器间分配网络流量。
- 存储编排:自动挂载所选存储系统,如本地存储、公共云提供商等。
- 自动部署和回滚:可以描述已部署容器的所需状态,并以受控的速率将实际状态更改为期望状态。
- 自动完成装箱计算:指定每个容器所需的CPU和内存,Kubernetes将容器放置在最适合的节点上。
- 自我修复:重新启动失败的容器、替换和重新调度无响应的容器,以及杀死不符合健康检查的容器。
- 密钥与配置管理:在不重建镜像的情况下,管理密钥和应用程序配置。
为什么使用Kubernetes?
在容器化的现代应用环境中,Kubernetes提供了:
- 基础设施抽象,使开发人员专注于应用开发而非运维
- 基于声明式API的自动化
- 可移植性,支持多云和混合云环境
- 微服务架构的天然支持
- 企业级的高可用、伸缩和安全能力
核心架构
Kubernetes采用主从架构设计,由以下部分组成:
控制平面(Control Plane)
控制平面负责管理集群的全局决策(如调度),以及检测和响应集群事件(如当Pod的副本数不满足要求时启动新的Pod)。
控制平面组件包括:
- kube-apiserver:暴露Kubernetes API,是整个系统的前端接口。
- etcd:一致且高可用的键值存储,用于保存所有集群数据。
- kube-scheduler:监视新创建的、未指定运行节点的Pod,并选择节点让Pod在上面运行。
- kube-controller-manager:运行控制器进程,处理集群中的常规任务。包括:
- 节点控制器:当节点宕机时进行通知和响应
- 副本控制器:维护正确数量的Pod副本
- Endpoints控制器:填充Endpoints对象(即加入Service与Pod)
- 服务账户和令牌控制器:为新的命名空间创建默认账户和API访问令牌
- cloud-controller-manager:与底层云提供商交互的控制器
工作节点(Node)
节点是Kubernetes中的工作机器,可以是物理机或虚拟机。每个节点包含运行Pod所需的服务,并由控制平面组件管理。
节点组件包括:
- kubelet:确保容器在Pod中运行。
- kube-proxy:维护节点上的网络规则,允许从集群内部或外部的网络会话与Pod通信。
- 容器运行时:负责运行容器的软件,如Docker、containerd或CRI-O。
通信架构
Kubernetes系统组件之间的通信分为以下几种方式:
- API服务器与其他组件通信:所有组件通过API服务器进行通信,不直接相互通信。
- 控制平面与节点通信:主要通过API服务器与kubelet进程通信。
- API服务器与kubelet通信:
- 获取Pod日志
- 连接到运行中的Pod
- 提供kubectl执行代理功能
- API服务器与节点、Pod和服务的通信:默认使用普通的HTTP通信。
基础组件
Pod
Pod是Kubernetes中最小的可部署计算单元,代表集群中运行的进程。
特点:
- 包含一个或多个容器,共享存储、网络和如何运行容器的规范
- Pod中的容器共享IP地址和端口空间
- Pod是短暂的,不会被重新调度到新节点,而是被一个相同的新Pod替代
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
ReplicaSet
ReplicaSet的目的是维护一组在任何时候都处于运行状态的Pod副本的稳定集合。
特点:
- 确保指定数量的Pod副本在任何时间运行
- 提供Pod的高可用性
- 通常不直接使用,而是使用Deployment
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
Deployment
Deployment提供了对Pod和ReplicaSets的声明式更新。
特点:
- 描述期望状态
- 控制器以受控速率更改实际状态
- 支持回滚和版本控制
- 适合无状态应用部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Service
Service是一种抽象,定义了一组Pod的逻辑集合和访问它们的策略。
特点ÿ