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系统组件之间的通信分为以下几种方式:

  1. API服务器与其他组件通信:所有组件通过API服务器进行通信,不直接相互通信。
  2. 控制平面与节点通信:主要通过API服务器与kubelet进程通信。
  3. API服务器与kubelet通信
    • 获取Pod日志
    • 连接到运行中的Pod
    • 提供kubectl执行代理功能
  4. 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的逻辑集合和访问它们的策略。

特点ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值