一、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工作流程
- 创建Pod。
- Kubelet监听Pod事件。
- Kube-scheduler调度Pod到Node。
- Kubelet在Node上启动Pod。
- 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 集