一、Kubernetes(K8s)概述

1.1 什么是K8s

Kubernetes,简称K8s,是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它是由Google设计并捐赠给Cloud Native Computing Foundation的,是目前最流行的容器编排工具之一。

1.2 K8s的作用

K8s的作用主要包括:

  • 自动化部署:简化容器化应用的部署过程,实现一键部署。
  • 自动化扩展:根据负载情况自动扩展或缩减应用实例。
  • 自动化管理:自动化管理容器的生命周期,包括创建、启动、停止、删除等。
  • 服务发现和负载均衡:自动发现服务并提供负载均衡。
  • 故障自愈:当容器失败时,自动重启容器。

1.3 K8s的功能

K8s的主要功能包括:

  • Pod:K8s的基本调度单元,一个Pod可以包含一个或多个容器。
  • Service:提供负载均衡和服务发现。
  • Volume:提供持久化存储。
  • Network Policy:提供网络隔离和访问控制。
  • Ingress:提供外部访问和负载均衡。

二、K8s的特性

2.1 弹性伸缩

K8s可以根据负载情况自动调整Pod的数量,实现弹性伸缩。

2.2 自我修复

K8s可以自动检测并修复Pod失败的情况。

2.3 服务发现和负载均衡

K8s提供内置的服务发现和负载均衡功能。

2.4 自动发布(默认滚动发布模式)和回滚

K8s支持自动发布和回滚,确保应用平滑升级。

2.5 集中化配置管理和密钥管理

K8s提供集中化的配置管理和密钥管理功能。

2.6 存储编排

K8s提供存储编排功能,支持多种存储系统。

2.7 任务批处理运行

K8s支持任务批处理运行,适用于批处理作业。

三、Kubernetes的集群架构与组件

3.1 Master 组件

  • kube-apiserver:资源操作的唯一入口。
  • Kube-controller-manager:负责维护集群的状态。
  • Kube-scheduler:负责集群资源调度。

3.2 配置存储中心

  • Etcd:配置存储中心。

3.3 Node 组件

  • Kubelet:负责维护容器的生命周期。
  • Kube-proxy:负责提供集群内部的服务发现和负载均衡。
  • docker/rocket:容器引擎。

四、K8s工作流程

  1. 创建Pod。
  2. Kubelet监听Pod事件。
  3. Kube-scheduler调度Pod到Node。
  4. Kubelet在Node上启动Pod。
  5. Kube-proxy更新服务发现和负载均衡。

五、Kubernetes核心概念

5.1 Pod

Pod是K8s的基本调度单元,可以包含一个或多个容器。

5.2 Pod 控制器

Pod控制器负责管理Pod的生命周期。

5.3 Deployment—无状态应用部署

Deployment是用于部署无状态应用的控制器。

5.4 StatefulSet—有状态应用部署

StatefulSet是用于部署有状态应用的控制器。

5.5 Label-标签

标签是用于选择Pod的标签。

5.6 Label 选择器(Label selector)

Label选择器是用于选择具有特定标签的Pod。

5.7 Service

Service提供负载均衡和服务发现。

5.8 Ingress

Ingress提供外部访问和负载均衡。

5.9 Name

Name是K8s中资源对象的唯一标识。

5.10 Namespace

Namespace是用于隔离资源的命名空间。

六、K8s集群搭建

6.1 部署方式

  • kubeadm:K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
  • 二进制:从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

6.2 了解kubeadm

kubeadm通过执行必要的操作来启动和运行一个最小可用的集群。它被故意设计为只关心启动集群,而不是准备节点环境的工作:

  • kubeadm init:启动一个 Kubernetes 主节点。
  • kubeadm join:启动一个 Kubernetes 工作节点并且将其加入到集群。
  • kubeadm upgrade:更新一个 Kubernetes 集