【 Kubernetes(K8s)完全指南】从入门到实战(含命令+配置+表格对比)

文章目录

前言

若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱: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)云厂商托管集群(推荐生产使用)

无需手动维护集群节点,开箱即用:

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-podkubectl 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 serviceskubectl 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
   
相关推荐
__beginner__1 小时前
docker安装influxdb
运维·docker·容器
阿里云云原生2 小时前
从“看曲线”到“懂问题”:MetricSet Explorer 如何重构指标分析体验
云原生
Token_w2 小时前
我的openEuler云原生与AI开发现实际体验
人工智能·云原生
Empty_7773 小时前
K8S-daemonset控制器
云原生·容器·kubernetes
阿里云云原生3 小时前
一步到位!阿里云云原生 API 网关,助力 Nginx Ingress 用户实现高效、安全迁移
云原生
todoitbo3 小时前
openEuler 云原生实战:Docker Compose 部署 Nextcloud 企业级私有云
docker·云原生·容器·openeuler
一条懒鱼6664 小时前
K8S-daemonset控制器
云原生·容器·kubernetes
米花町的小侦探5 小时前
Rocky安装k8s
kubernetes