Kubernetes 核心命令与配置详解
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 支持三种主要数据结构:
- 对象(Map):键值对集合,例如:
app: nginx version: 1.18 - 数组(List):有序列表,例如:
- frontend - backend - cache - 标量:不可再分的基本值,包括字符串、布尔值、数字、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 允许相应端口通信。