深入解析:Kubernetes(K8s)全面解析:核心概念、架构与实践

深入解析:Kubernetes(K8s)全面解析:核心概念、架构与实践

目录

一、K8s 是什么?

二、K8s 的核心优势

三、K8s 的核心概念

1. Pod

2. 控制器(Controller)

3. Service

4. 命名空间(Namespace)

5. 配置与存储

6. 标签与选择器(Label/Selector)

四、K8s 的架构设计

1. 控制平面(Master 节点)

2. 节点(Node 节点)

五、K8s 的基本使用流程

1. 环境部署

2. 核心命令

(1)集群信息查看

(2)资源操作(以 Deployment 为例)

(3)Service 操作

(4)配置与存储操作

3. 资源清单(YAML 文件)

(1)Deployment 清单(nginx-deployment.yaml)

(2)Service 清单(nginx-service.yaml)

六、K8s 的核心功能实践

1. 应用部署与扩缩容

2. 滚动更新与回滚

3. 服务暴露与访问

4. 数据持久化

七、K8s 的生态工具

八、总结

Kubernetes(简称 K8s)是 Google 开源的容器编排平台,旨在自动化容器的部署、扩展、运维和管理,是云原生生态的核心技术。它将零散的容器组织成高可用、可伸缩的应用集群,解决了大规模容器管理的复杂性问题。以下从核心概念、架构设计、核心功能、使用流程等维度,全面拆解 K8s。

一、K8s 是什么?K8s 的名字源于希腊语 “舵手” 或 “飞行员”,寓意为容器集群的 “导航系统”。其核心目标是:让容器化应用在集群中高效、可靠地运行,提供自动化的容器编排能力(如调度、伸缩、自愈、负载均衡)。

简单来说:如果 Docker 是 “集装箱”(封装应用),K8s 就是 “港口调度系统”(管理集装箱的装卸、运输、堆叠)。

二、K8s 的核心优势自动化运维:自动完成容器的部署、重启、扩缩容,减少人工干预。高可用性:节点或容器故障时自动调度到其他节点,保证服务不中断。弹性伸缩:根据 CPU 使用率、QPS 等指标自动增减容器数量。负载均衡:内置服务发现和负载均衡,实现容器间的通信与流量分发。滚动更新与回滚:无停机更新应用版本,更新失败时可快速回滚。跨环境兼容:支持公有云(AWS、Azure)、私有云、混合云,实现 “一次部署,到处运行”。三、K8s 的核心概念1. Pod定义:K8s 的最小部署单元,是一个或多个容器的组合(共享网络、存储)。特性:

容器共享 Pod 的 IP 和端口空间(Pod 内容器可通过localhost通信)。生命周期短暂(被调度到节点后,若节点故障或 Pod 被删除,不会重建,需通过控制器管理)。包含 “基础设施容器”(Pause 容器),用于维持 Pod 的网络命名空间。示例:一个 Web 应用 Pod 可能包含 “应用容器 + 日志收集容器”。2. 控制器(Controller)用于管理 Pod 的生命周期,确保 Pod 按期望状态运行。常见控制器:

Deployment:最常用的控制器,管理无状态应用,支持滚动更新、扩缩容、回滚。StatefulSet:管理有状态应用(如数据库),保证 Pod 的名称、网络标识、存储的唯一性。DaemonSet:在集群每个节点上运行一个 Pod 副本(如日志收集、监控 Agent)。Job/CronJob:运行一次性任务(Job)或定时任务(CronJob)。3. Service定义:为 Pod 提供稳定的网络访问入口,解决 Pod 动态 IP 变化的问题。类型:

ClusterIP:默认类型,仅集群内部可访问(通过虚拟 IP)。NodePort:在每个节点开放一个静态端口,外部可通过 “节点 IP + 端口” 访问。LoadBalancer:结合云服务商的负载均衡器,对外暴露服务(公有云常用)。Ingress:非 Service 类型,通过 Ingress Controller 实现 HTTP/HTTPS 路由(如域名转发)。4. 命名空间(Namespace)定义:用于隔离集群资源(如 Pod、Service、Deployment),实现多租户管理。默认命名空间:

default:未指定命名空间的资源默认放在这里。kube-system:K8s 系统组件所在的命名空间。kube-public:公共资源命名空间(所有用户可读)。5. 配置与存储ConfigMap:存储非敏感配置数据(如环境变量、配置文件),可挂载到 Pod 中。Secret:存储敏感数据(如密码、Token、证书),数据会被 Base64 编码(需加密增强安全性)。Volume:Pod 的持久化存储,支持多种存储类型(如本地存储、NFS、云存储)。PersistentVolume(PV)/PersistentVolumeClaim(PVC):PV 是集群的存储资源,PVC 是 Pod 对存储的申请(类似 “存储租赁”)。6. 标签与选择器(Label/Selector)标签:键值对形式的元数据(如app=nginx、env=prod),用于标识资源。选择器:通过标签筛选资源(如 Deployment 通过selector匹配 Pod 标签),实现资源关联。四、K8s 的架构设计K8s 采用主从架构(Master-Node),分为控制平面(Control Plane)和节点(Node)两部分。

1. 控制平面(Master 节点)负责集群的全局决策(调度、管理),包含以下核心组件:

kube-apiserver:集群的统一入口,所有操作通过 API Server 执行(RESTful API),提供认证、授权、准入控制。etcd:集群的数据库,存储所有集群状态数据(配置、元数据),需保证高可用。kube-scheduler:负责 Pod 的调度(将 Pod 分配到合适的 Node 节点),基于资源需求、节点亲和性等策略。kube-controller-manager:包含多种控制器(节点控制器、副本控制器、Service 控制器等),维护集群状态。cloud-controller-manager:与云服务商集成的控制器(可选),管理云资源(如负载均衡器、云存储)。2. 节点(Node 节点)负责运行容器化应用,包含以下核心组件:

kubelet:Node 节点的代理,与 API Server 通信,管理 Pod 的生命周期(启动、停止容器),确保 Pod 按期望运行。kube-proxy:维护 Node 节点的网络规则,实现 Service 的负载均衡(转发流量到 Pod)。容器运行时(Container Runtime):运行容器的软件,如 containerd、CRI-O(早期用 Docker,需通过 cri-dockerd 适配)。容器网络接口(CNI):实现 Pod 间的网络通信(如 Flannel、Calico、Cilium)。五、K8s 的基本使用流程1. 环境部署K8s 的部署方式有多种,适合不同场景:

Minikube:单机版 K8s,适合开发测试(minikube start一键启动)。kubeadm:官方工具,用于部署生产级集群(需多台服务器)。云服务商托管 K8s:如 AWS EKS、Azure AKS、阿里云 ACK(无需手动维护控制平面)。2. 核心命令K8s 的命令行工具是kubectl,常用命令如下:

(1)集群信息查看bash

运行

# 查看集群节点

kubectl get nodes

# 查看集群信息

kubectl cluster-info

# 查看命名空间

kubectl get namespaces

(2)资源操作(以 Deployment 为例)bash

运行

# 创建Deployment(从YAML文件)

kubectl apply -f nginx-deployment.yaml

# 查看Deployment

kubectl get deployments

# 查看Pod

kubectl get pods

# 查看Pod详情

kubectl describe pod

# 查看Pod日志

kubectl logs

# 进入Pod容器

kubectl exec -it -- /bin/bash

# 扩缩容Deployment

kubectl scale deployment nginx-deployment --replicas=5

# 删除Deployment

kubectl delete deployment nginx-deployment

(3)Service 操作bash

运行

# 创建Service

kubectl apply -f nginx-service.yaml

# 查看Service

kubectl get services

# 查看Service详情

kubectl describe service nginx-service

(4)配置与存储操作bash

运行

# 创建ConfigMap

kubectl create configmap app-config --from-literal=env=prod --from-file=app.conf

# 创建Secret

kubectl create secret generic db-secret --from-literal=username=root --from-literal=password=123456

# 查看ConfigMap/Secret

kubectl get configmaps

kubectl get secrets

3. 资源清单(YAML 文件)K8s 通过 YAML 文件定义资源(声明式 API),以下是一个完整的 Deployment+Service 示例:

(1)Deployment 清单(nginx-deployment.yaml)yaml

apiVersion: apps/v1 # API版本(不同资源版本不同)

kind: Deployment # 资源类型

metadata:

name: nginx-deployment # 资源名称

namespace: default # 命名空间

spec:

replicas: 3 # 副本数

selector:

matchLabels:

app: nginx # 匹配Pod标签

template:

metadata:

labels:

app: nginx # Pod标签

spec:

containers:

- name: nginx # 容器名称

image: nginx:1.25 # 容器镜像

ports:

- containerPort: 80 # 容器端口

resources: # 资源限制

limits:

cpu: "1"

memory: "1Gi"

requests:

cpu: "0.5"

memory: "512Mi"

env: # 环境变量(从ConfigMap/Secret注入)

- name: ENV

valueFrom:

configMapKeyRef:

name: app-config

key: env

- name: DB_PASSWORD

valueFrom:

secretKeyRef:

name: db-secret

key: password

(2)Service 清单(nginx-service.yaml)yaml

apiVersion: v1

kind: Service

metadata:

name: nginx-service

spec:

type: NodePort # Service类型

selector:

app: nginx # 匹配Pod标签

ports:

- port: 80 # Service端口

targetPort: 80 # Pod端口

nodePort: 30080 # 节点端口(范围30000-32767)

六、K8s 的核心功能实践1. 应用部署与扩缩容部署应用:kubectl apply -f nginx-deployment.yaml手动扩缩容:kubectl scale deployment nginx-deployment --replicas=5自动扩缩容:通过 HPA(Horizontal Pod Autoscaler)基于 CPU 使用率自动扩缩容: bash

运行

kubectl autoscale deployment nginx-deployment --min=2 --max=10 --cpu-percent=50 2. 滚动更新与回滚更新镜像版本: bash

运行

kubectl set image deployment/nginx-deployment nginx=nginx:1.26 查看更新状态:kubectl rollout status deployment/nginx-deployment回滚到上一版本:kubectl rollout undo deployment/nginx-deployment3. 服务暴露与访问NodePort 访问:通过节点IP:30080访问服务。Ingress 访问:配置 Ingress 实现域名访问(需先部署 Ingress Controller,如 Nginx Ingress): yaml

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

name: nginx-ingress

spec:

rules:

- host: nginx.example.com

http:

paths:

- path: /

pathType: Prefix

backend:

service:

name: nginx-service

port:

number: 80 4. 数据持久化通过 PV/PVC 实现 Pod 数据持久化:

yaml

# PV清单

apiVersion: v1

kind: PersistentVolume

metadata:

name: nginx-pv

spec:

capacity:

storage: 10Gi

accessModes:

- ReadWriteOnce

hostPath:

path: /data/nginx-pv # 本地存储路径

# PVC清单

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: nginx-pvc

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 5Gi

# Deployment挂载PVC

spec:

containers:

- name: nginx

volumeMounts:

- name: nginx-storage

mountPath: /usr/share/nginx/html

volumes:

- name: nginx-storage

persistentVolumeClaim:

claimName: nginx-pvc

七、K8s 的生态工具监控与日志:Prometheus(监控)+ Grafana(可视化)、ELK Stack(日志收集分析)、Loki(轻量级日志系统)。服务网格:Istio(流量管理、安全、可观测性)、Linkerd(轻量级服务网格)。CI/CD 集成:Jenkins、GitLab CI、ArgoCD(GitOps 工具)。容器镜像仓库:Harbor(私有仓库)、Docker Hub(公有仓库)。集群管理工具:KubeSphere(可视化管理平台)、Rancher(多集群管理)。八、总结Kubernetes 是容器编排领域的事实标准,通过抽象化的资源定义和自动化的管理能力,解决了大规模容器集群的运维复杂性。掌握 K8s 的核心概念(Pod、Deployment、Service)、架构设计和实践操作,是云原生开发和运维的必备技能。后续可深入学习 K8s 的高级特性(如调度策略、安全机制、集群联邦),以及云原生生态的其他技术(如 Service Mesh、Serverless)。

清芳推荐

秃鹰的英文翻译
沙巴体育365体育网站

秃鹰的英文翻译

📅 08-05 👀 7036
女足世界杯:周五早澳洲队对阵巴西队有多少胜算?
LOL:上单诺手了解血怒机制,快速打血怒。这是最后一句话。