当前位置:首页 > 技术 > 正文内容

Kubernetes 核心命令与配置详解

访客 技术 2026年6月20日 1

kubectl 工具概述

kubectl 是 Kubernetes 集群的命令行管理工具,用于部署、管理和监控容器化应用。通过该工具可以对集群资源执行创建、查询、更新和删除等操作。

命令语法结构

基本语法格式如下:

kubectl [command] [resource-type] [resource-name] [options]
  • command:操作类型,如 get、create、delete 等。
  • resource-type:资源种类,不区分大小写,支持单数、复数或缩写(如 pod/pods、deploy/deployment)。
  • resource-name:资源名称,区分大小写;若省略则作用于所有同类资源。
  • options:可选参数,用于覆盖默认设置。

推荐使用 YAML 文件进行复杂资源配置,因其结构清晰且易于维护。更多信息请参考官方文档:kubectl 概述

YAML 配置基础

YAML 是 Kubernetes 中最常用的配置格式,文件扩展名为 .yaml 或 .yml。其语法规则如下:

  • 严格区分大小写
  • 使用空格缩进表示层级关系(禁止使用 Tab)
  • 同级元素需左对齐
  • # 开头为注释
  • - 表示列表项,: 分隔键值对

数据类型

YAML 支持三种主要数据结构:

  1. 对象(Map):键值对集合,例如:
    app: nginx
    version: 1.18
    
  2. 数组(List):有序列表,例如:
    - frontend
    - backend
    - cache
    
  3. 标量:不可再分的基本值,包括字符串、布尔值、数字、null 等。
    enabled: true
    count: 100
    price: 3.14
    name: "Kubernetes"
    launchDate: 2023-05-01
    

引用与合并

使用 & 定义别名,* 引用内容,<< 实现字段合并:

defaults: &base-config
  env: production
  replicas: 3

frontend:
  <<: *base-config
  app: web-ui

backend:
  <<: *base-config
  app: api-server

常用 kubectl 命令实践

启动应用实例

使用 run 命令快速部署一个 Nginx 服务:

kubectl run my-nginx --image=nginx:latest --port=80 --replicas=1

此命令会自动生成 Deployment 和 Pod 资源。Deployment 负责声明期望状态并确保副本数量一致。

查看资源信息

获取当前命名空间下所有资源类型:

kubectl api-resources

查看特定资源详情:

kubectl get pods
kubectl get deployments
kubectl get services

详细描述某个资源:

kubectl describe pod my-nginx-7c6b5f9f8d-abcde

日志与调试

查看容器输出日志:

kubectl logs my-nginx-7c6b5f9f8d-abcde

进入容器执行命令:

kubectl exec -it my-nginx-7c6b5f9f8d-abcde -- sh

实时追踪日志输出:

kubectl attach my-nginx-7c6b5f9f8d-abcde

文件传输

在本地与容器间复制文件(需容器内安装 tar):

kubectl cp /local/path/file.txt my-pod:/remote/path/
kubectl cp my-pod:/remote/log.txt /local/logs/

基于配置文件管理资源

创建 mysql-deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: db
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "securePass123"
        ports:
        - containerPort: 3306

应用配置:

kubectl create -f mysql-deploy.yaml

删除资源:

kubectl delete -f mysql-deploy.yaml

服务暴露与网络访问

创建 NodePort 类型的服务以供外部访问:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 31000

应用后可通过任意节点 IP 加端口 31000 访问服务。

动态更新策略

  • edit:在线编辑运行中的资源
    kubectl edit svc nginx-service
    
  • patch:局部更新字段
    kubectl patch deployment/my-app -p '{"spec":{"replicas":2}}'
    
  • replace:完全替换资源定义
    kubectl get svc old-svc -o yaml > svc.yaml
    # 修改后替换
    kubectl replace -f svc.yaml
    
  • apply:声明式配置管理,推荐用于生产环境
    kubectl apply -f config.yaml
    

弹性伸缩

手动扩容至 5 个副本:

kubectl scale deployment/my-app --replicas=5

启用自动伸缩(HPA):

kubectl autoscale deployment/my-app --min=2 --max=10 --cpu-percent=80

节点维护

标记节点不可调度:

kubectl cordon node-01

驱逐节点上所有工作负载(用于维护):

kubectl drain node-01 --ignore-daemonsets

恢复节点调度能力:

kubectl uncordon node-01

核心资源配置模板

Pod 模板结构

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  labels:
    role: backend
spec:
  containers:
  - name: app-container
    image: nginx:alpine
    ports:
    - containerPort: 80
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  restartPolicy: Always

Service 模板结构

apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

注意:使用 NodePort 时需确保主机防火墙和 iptables 允许相应端口通信。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。