文章目录
- 前言
-
- 一、K8s基础入门
-
- [1. 核心概念解析(必懂)](#1. 核心概念解析(必懂))
- [2. 环境搭建(3种方案选型)](#2. 环境搭建(3种方案选型))
- [3. kubectl核心基础命令(必背)](#3. kubectl核心基础命令(必背))
- 二、K8s核心资源操作指南
-
- [1. Pod操作(最小部署单元)](#1. Pod操作(最小部署单元))
- [2. Deployment操作(Pod集群管理)](#2. Deployment操作(Pod集群管理))
- [3. Service操作(服务发现与负载均衡)](#3. Service操作(服务发现与负载均衡))
- [4. 配置管理(ConfigMap+Secret)](#4. 配置管理(ConfigMap+Secret))
前言
若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com
Kubernetes(简称K8s)是容器编排领域的事实标准,能实现容器的自动化部署、扩缩容、负载均衡和高可用管理,是大规模容器化项目的核心基础设施。本文从核心概念、环境搭建到实战部署,覆盖K8s核心操作、资源配置、故障排查等关键场景,结合详细命令表格、YAML配置示例和实战案例,适合开发者、运维工程师快速上手K8s。

一、K8s基础入门
1. 核心概念解析(必懂)
| 概念 | 官方定义 | 通俗类比 | 核心作用 |
|---|---|---|---|
| 集群(Cluster) | 由一组节点(Node)组成的K8s部署环境 | 数据中心服务器集群 | 统一管理所有节点和容器资源 |
| 节点(Node) | 集群中的工作机器(物理机/虚拟机),运行容器 | 单个服务器 | 提供容器运行的硬件资源(CPU/内存/存储) |
| Pod | K8s最小部署单元,包含1个或多个关联容器 | 逻辑主机(共享网络/存储) | 封装容器组,实现容器间紧密协作 |
| Deployment | 声明式管理Pod和ReplicaSet,支持滚动更新 | 容器集群控制器 | 确保指定数量的Pod副本运行,支持版本迭代 |
| Service | 定义Pod的访问入口,提供固定访问地址 | 负载均衡器+固定IP | 解决Pod动态IP问题,实现服务发现和负载均衡 |
| ConfigMap/Secret | 配置存储资源(Secret加密存储敏感信息) | 配置文件/密码箱 | 解耦配置与代码,实现配置统一管理 |
| PV/PVC | 持久化存储资源(PV:集群级存储,PVC:Pod级存储请求) | 共享硬盘/存储申请单 | 实现容器数据持久化,避免Pod删除后数据丢失 |
| Namespace | 集群资源隔离机制 | 独立办公区域 | 隔离不同项目/环境的资源(如开发/测试/生产) |
| ReplicaSet(RS) | 确保Pod副本数量维持在期望状态 | Pod副本监控器 | Deployment的底层依赖,管理Pod生命周期 |
2. 环境搭建(3种方案选型)
(1)本地测试环境(推荐Minikube)
适合初学者快速体验K8s核心功能,无需多节点服务器:
bash
# 1. 安装Minikube(依赖Docker/Docker Desktop)
# Windows/macOS:直接下载安装(https://minikube.sigs.k8s.io/docs/start/)
# Linux:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 2. 启动Minikube集群(指定国内镜像源加速)
minikube start --image-mirror-country=cn --kubernetes-version=v1.28.0
# 3. 验证集群状态
minikube status # 输出Running即成功
kubectl cluster-info # 查看集群信息
(2)生产级集群(Kubeadm部署)
适合多节点生产环境,需至少2台服务器(1主2从推荐):
bash
# 前提:所有节点安装Docker,关闭防火墙/SELinux,配置时间同步
# 主节点初始化(192.168.56.10为master节点IP)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
# 配置kubectl(按初始化输出提示执行)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装网络插件(Calico,必需)
kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml
# 从节点加入集群(替换为master初始化输出的join命令)
sudo kubeadm join 192.168.56.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
(3)云厂商托管集群(推荐生产使用)
无需手动维护集群节点,开箱即用:
- 阿里云ACK:https://www.aliyun.com/product/kubernetes
- 腾讯云EKS:https://cloud.tencent.com/product/eks
- 华为云CCE:https://www.huaweicloud.com/product/cce
3. kubectl核心基础命令(必背)
kubectl是K8s集群的命令行工具,用于操作集群资源:
| 命令 | 功能描述 | 常用参数 | 实操示例 |
|---|---|---|---|
kubectl version |
查看kubectl和K8s集群版本 | --short(简化输出) |
kubectl version --short |
kubectl cluster-info |
查看集群状态信息 | 无 | kubectl cluster-info |
kubectl get nodes |
查看集群所有节点 | -o wide(显示详细信息) |
kubectl get nodes -o wide(查看节点IP、状态) |
kubectl get pods |
查看当前命名空间Pod | -n 命名空间、-o wide、-w(实时监控) |
kubectl get pods -n default -w |
kubectl describe 资源类型 名称 |
查看资源详细信息 | -n 命名空间 |
kubectl describe pod my-pod(查看Pod事件、容器信息) |
kubectl apply -f 配置文件.yml |
创建/更新资源 | 无 | kubectl apply -f deployment.yml |
kubectl delete 资源类型 名称 |
删除资源 | -n 命名空间、-f 配置文件.yml |
kubectl delete pod my-pod、kubectl delete -f deployment.yml |
kubectl logs Pod名称 |
查看Pod日志 | -f(实时跟踪)、--tail N(最后N行) |
kubectl logs -f my-pod --tail 100 |
kubectl exec -it Pod名称 -- 命令 |
进入Pod容器终端 | -it(交互式终端)、-c 容器名(多容器指定容器) |
kubectl exec -it my-pod -- /bin/bash |
二、K8s核心资源操作指南
1. Pod操作(最小部署单元)
(1)Pod核心命令
| 操作 | 命令 | 实操示例 |
|---|---|---|
| 创建Pod(命令行) | kubectl run Pod名 --image=镜像名:标签 |
kubectl run nginx-pod --image=nginx:1.25(创建Nginx Pod) |
| 创建Pod(配置文件) | kubectl apply -f pod.yml |
配置文件见下文示例 |
| 查看Pod详情 | kubectl describe pod Pod名 |
kubectl describe pod nginx-pod |
| 进入Pod容器 | kubectl exec -it Pod名 -- 终端命令 |
kubectl exec -it nginx-pod -- /bin/bash |
| 端口转发(本地访问Pod) | kubectl port-forward pod/Pod名 本地端口:容器端口 |
kubectl port-forward pod/nginx-pod 8080:80(本地8080访问Pod 80端口) |
| 删除Pod | kubectl delete pod Pod名 |
kubectl delete pod nginx-pod |
(2)Pod配置文件示例(pod.yml)
yaml
apiVersion: v1 # API版本(必需)
kind: Pod # 资源类型(必需)
metadata:
name: nginx-pod # Pod名称(必需)
labels: # 标签(用于Service关联)
app: nginx
spec:
containers: # 容器列表(必需)
- name: nginx # 容器名称
image: nginx:1.25 # 容器镜像
ports:
- containerPort: 80 # 容器暴露端口(仅声明)
resources: # 资源限制(可选)
requests: # 最小资源需求
cpu: "100m" # 100毫核(0.1CPU)
memory: "128Mi"
limits: # 最大资源限制
cpu: "500m"
memory: "256Mi"
env: # 环境变量(可选)
- name: APP_ENV
value: "production"
2. Deployment操作(Pod集群管理)
Deployment是管理Pod的推荐方式,支持自动扩缩容、滚动更新、回滚等功能:
(1)Deployment核心命令
| 操作 | 命令 | 实操示例 |
|---|---|---|
| 创建Deployment | kubectl create deployment 名称 --image=镜像名 |
kubectl create deployment nginx-deploy --image=nginx:1.25 |
| 查看Deployment | kubectl get deployments |
kubectl get deployments -o wide |
| 扩容/缩容 | kubectl scale deployment 名称 --replicas=副本数 |
kubectl scale deployment nginx-deploy --replicas=3(扩缩为3个Pod) |
| 滚动更新镜像 | kubectl set image deployment/名称 容器名=新镜像:标签 |
kubectl set image deployment/nginx-deploy nginx=nginx:1.26 |
| 查看更新状态 | kubectl rollout status deployment 名称 |
kubectl rollout status deployment nginx-deploy |
| 回滚到上一版本 | kubectl rollout undo deployment 名称 |
kubectl rollout undo deployment nginx-deploy |
| 查看更新历史 | kubectl rollout history deployment 名称 |
kubectl rollout history deployment nginx-deploy |
(2)Deployment配置文件示例(deployment.yml)
yaml
apiVersion: apps/v1 # API版本(apps/v1为稳定版)
kind: Deployment
metadata:
name: nginx-deploy
labels:
app: nginx
spec:
replicas: 3 # 期望Pod副本数(默认1)
selector: # 标签选择器(匹配Pod标签)
matchLabels:
app: nginx
strategy: # 更新策略(可选)
rollingUpdate: # 滚动更新(默认)
maxSurge: 1 # 最多可额外创建1个Pod
maxUnavailable: 1 # 最多不可用1个Pod
template: # Pod模板(与Pod配置一致)
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
livenessProbe: # 存活探针(检测容器是否运行)
httpGet:
path: /
port: 80
initialDelaySeconds: 30 # 启动30秒后开始探测
periodSeconds: 10 # 每10秒探测一次
readinessProbe: # 就绪探针(检测容器是否可用)
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
3. Service操作(服务发现与负载均衡)
Service为Pod提供固定访问地址,解决Pod动态IP问题:
(1)Service核心类型与命令
| Service类型 | 核心特点 | 适用场景 |
|---|---|---|
| ClusterIP | 集群内部访问(默认类型),仅集群内Pod可访问 | 内部服务通信(如后端API供前端调用) |
| NodePort | 暴露端口到所有节点,外部通过节点IP:NodePort访问 |
开发/测试环境外部访问 |
| LoadBalancer | 结合云厂商负载均衡器,提供公网访问地址 | 生产环境公网访问 |
| ExternalName | 映射到外部域名,无需Pod后端 | 访问集群外部服务(如第三方API) |
(2)Service核心命令
| 操作 | 命令 | 实操示例 |
|---|---|---|
| 创建Service(NodePort) | kubectl expose deployment 名称 --type=NodePort --port=端口 --target-port=容器端口 |
kubectl expose deployment nginx-deploy --type=NodePort --port=80 --target-port=80 |
| 查看Service | kubectl get services 或 kubectl get svc |
kubectl get svc -o wide(查看端口映射) |
| 查看Service详情 | kubectl describe svc 名称 |
kubectl describe svc nginx-deploy |
| 删除Service | kubectl delete svc 名称 |
kubectl delete svc nginx-deploy |
(3)Service配置文件示例(service.yml)
yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort # Service类型
selector:
app: nginx # 关联标签为app=nginx的Pod
ports:
- port: 80 # Service暴露端口(集群内访问端口)
targetPort: 80 # 容器端口(与Pod容器端口一致)
nodePort: 30080 # 节点端口(可选,范围30000-32767)
4. 配置管理(ConfigMap+Secret)
(1)ConfigMap(存储非敏感配置)
bash
# 1. 命令行创建ConfigMap
kubectl create configmap app-config --from-literal=APP_PORT=8080 --from-literal=DB_HOST=mysql-svc
# 2. 从配置文件创建(configmap.yml)
kubectl apply -f configmap.yml
# 3. 查看ConfigMap
kubectl get configmaps
kubectl describe configmap app-config
配置文件示例(configmap.yml):
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_PORT: "8080"
DB_HOST: "mysql-svc"
DB_PORT: "3306"
app.conf: | # 存储完整配置文件
log_level: info