Kubernetes 管理实战手册
文章目录
- Kubernetes 管理实战手册
- 前言
- 一、kubectl 命令大全(从基础到进阶)
- 1.1 命令帮助与基础认知
- 1.2 基础命令(Beginner/Intermediate)
- 1.3 部署命令(Deploy Commands)
- 1.4 集群管理命令(Cluster Management)
- 1.5 故障诊断命令(Troubleshooting)
- 二、Metrics Server 部署与问题解决
- 2.1 部署前准备
- 2.2 部署步骤
- 2.3 常见问题解决
- (1)ImagePullBackOff:镜像拉取失败
- (2)CrashLoopBackOff:容器反复重启
- (3)删除异常 Pod
- 三、Node 节点管理(配置与权限)
- 3.1 节点基础信息查看
- 3.2 节点标签管理(Label)
- 3.3 Node 节点配置 kubectl 权限
- 四、Kubernetes Dashboard 可视化配置
- 4.1 下载与修改配置文件
- 4.2 部署 Dashboard
- 4.3 访问 Dashboard 与获取 Token
- 五、YAML 语法与资源清单详解
- 5.1 YAML 基础语法
- 5.2 K8s 资源清单核心字段
- 5.3 常用资源配置示例
- (1)创建命名空间(Namespace)
- (2)Deployment+Service 部署 Tomcat
- 六、命名空间(Namespace)管理
- 6.1 命名空间作用
- 6.2 命名空间操作命令
- 结语
Kubernetes 管理实战手册
前言
本文整理自 Kubernetes 管理核心文档,涵盖kubectl命令使用、Metrics Server部署、节点标签管理、Dashboard可视化配置、YAML语法详解等核心内容,所有操作均附实际命令和配置示例,适合 K8s 初学者入门及运维人员参考。
一、kubectl 命令大全(从基础到进阶)
1.1 命令帮助与基础认知
kubectl是 Kubernetes 集群管理的核心命令行工具,可通过以下命令查看帮助文档:
[root@master ~]# kubectl -h
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/
1.2 基础命令(Beginner/Intermediate)
| 命令 | 描述 |
|---|---|
| create | 通过文件名或标准输入创建资源(如 Pod、Service) |
| expose | 将 Replication Controller、Pod 等资源公开为新的 Kubernetes Service |
| run | 在集群中运行特定镜像(快速创建 Pod) |
| set | 为对象设置指定特性(如资源限制、标签) |
| get | 显示一个或多个资源(如 Pod、Node、Service),支持多种输出格式 |
| explain | 获取资源的文档参考资料(如kubectl explain pod.spec查看 Pod 配置详情) |
| edit | 使用默认编辑器编辑服务器上的资源(如kubectl edit pod <pod-name>) |
| delete | 通过文件名、资源名称或标签选择器删除资源(如kubectl delete pod <name>) |
示例:查看节点信息
# 查看节点列表
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 17d v1.28.0
node1 Ready <none> 17d v1.28.0
node2 Ready <none> 17d v1.28.0# 查看节点详细信息(含IP、系统版本)
[root@master ~]# kubectl get nodes -o wide
1.3 部署命令(Deploy Commands)
用于管理应用部署、扩容缩容及自动伸缩:
| 命令 | 描述 |
|---|---|
| rollout | 管理资源的发布(如回滚 Deployment:kubectl rollout undo deployment <name>) |
| scale | 为 Deployment、ReplicaSet 等设置新的副本数量(如kubectl scale deployment <name> --replicas=3) |
| autoscale | 为资源配置自动伸缩(如kubectl autoscale deployment <name> --min=2 --max=5) |
1.4 集群管理命令(Cluster Management)
核心用于集群节点维护和资源监控:
| 命令 | 描述 |
|---|---|
| cluster-info | 显示集群信息(如 API Server、CoreDNS 地址) |
| top | 显示资源(CPU / 内存 / 存储)使用情况(需 Metrics Server 支持) |
| cordon | 标记节点为不可调度(禁止新 Pod 调度到该节点) |
| uncordon | 取消节点不可调度标记(恢复 Pod 调度) |
| drain | 清空节点(驱逐已有 Pod,准备维护) |
| taint | 更新节点污点(控制 Pod 调度策略,如kubectl taint node node1 key=value:NoSchedule) |
示例:查看集群信息与资源使用
# 查看集群核心组件地址
[root@master ~]# kubectl cluster-info
Kubernetes control plane is running at https://192.168.100.136:6443
CoreDNS is running at https://192.168.100.136:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy# 查看Pod资源使用(需Metrics Server)
[root@master ~]# kubectl top pod -n kube-system
NAME CPU(cores) MEMORY(bytes)
calico-kube-controllers-658d97c59c-8nnql 1m 23Mi
calico-node-5t2r8 52m 136Mi
1.5 故障诊断命令(Troubleshooting)
用于定位 Pod、节点故障,核心命令如下:
| 命令 | 描述 |
|---|---|
| describe | 显示资源详细信息(含事件日志,如kubectl describe pod <pod-name>) |
| logs | 打印 Pod 中容器的日志(如kubectl logs <pod-name> -c <container-name>) |
| exec | 在容器中执行命令(如kubectl exec -it <pod-name> -- /bin/bash) |
| port-forward | 将本地端口转发到 Pod(如kubectl port-forward <pod-name> 8080:80) |
| cp | 在本地与容器间拷贝文件(如kubectl cp <local-file> <pod-name>:/path) |
示例:排查 Pod 启动失败
# 查看Pod详细事件(定位ImagePullBackOff、CrashLoopBackOff原因)
[root@master ~]# kubectl describe pod metrics-server-xxxx -n kube-system
二、Metrics Server 部署与问题解决
Metrics Server 是 K8s 资源监控的核心组件,支持kubectl top命令,部署步骤如下:
2.1 部署前准备
- 集群版本≥1.19,节点网络互通
- 需配置
--kubelet-insecure-tls(v0.8.0 + 版本安全要求)
2.2 部署步骤
-
下载官方配置文件
[root@master ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml -
修改配置(解决镜像拉取与安全配置)
- 替换为国内镜像(阿里云),避免公网拉取失败
- 添加
--kubelet-insecure-tls参数,允许非加密访问 Kubelet
# 替换镜像仓库 [root@master ~]# sed -i 's/registry.k8s.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml# 编辑配置文件,添加--kubelet-insecure-tls [root@master ~]# vim metrics-server-components.yaml # 在containers.args中添加: containers: - args:- --cert-dir=/tmp- --secure-port=10250- --kubelet-insecure-tls # 新增该行- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution=15simage: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.8.0 -
应用配置并部署
[root@master ~]# kubectl apply -f metrics-server-components.yaml -
验证部署结果
# 查看Pod状态(需等待1-2分钟) [root@master ~]# kubectl get pods -n kube-system | grep metrics-server metrics-server-57999c5cf7-ppvqq 1/1 Running 0 176m# 测试资源监控(成功则返回节点CPU/内存使用) [root@master ~]# kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% master 78m 3% 384Mi 10% node1 137m 6% 1178Mi 32% node2 100m 5% 1202Mi 32%
2.3 常见问题解决
(1)ImagePullBackOff:镜像拉取失败
- 原因:镜像地址错误、仓库不可访问、私有仓库无认证
- 解决:
- 确认镜像名称 / 标签正确(如
v0.8.0而非latest) - 替换为国内镜像(参考 2.2 步骤 2)
- 若私有仓库,添加
imagePullSecrets(需提前创建 Secret)
- 确认镜像名称 / 标签正确(如
(2)CrashLoopBackOff:容器反复重启
- 原因:缺少
--kubelet-insecure-tls参数,无法访问 Kubelet - 解决:编辑 Deployment,在
args中添加--kubelet-insecure-tls(参考 2.2 步骤 2)
(3)删除异常 Pod
若 Pod 处于Terminating或异常状态,可强制删除:
# 常规删除
[root@master ~]# kubectl delete pod metrics-server-xxxx -n kube-system# 强制删除(无等待时间)
[root@master ~]# kubectl delete pod metrics-server-xxxx -n kube-system --grace-period=0 --force
三、Node 节点管理(配置与权限)
3.1 节点基础信息查看
# 查看节点标签(--show-labels)
[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready control-plane 17d v1.28.0 beta.kubernetes.io/arch=amd64,kubernetes.io/hostname=master...
node1 Ready <none> 17d v1.28.0 beta.kubernetes.io/arch=amd64,kubernetes.io/hostname=node1...# 查看节点详细描述(含资源分配、事件)
[root@master ~]# kubectl describe node master
3.2 节点标签管理(Label)
通过标签实现 Pod 调度筛选、资源分组,核心操作如下:
-
添加标签
# 为node2添加标签:region=nanjing [root@master ~]# kubectl label node node2 region=nanjing node/node2 labeled# 为node1添加多维度标签:region=hefei,zone=south,env=test [root@master ~]# kubectl label node node1 region=hefei zone=south env=test -
查看标签
# 查看指定标签(-L 标签名) [root@master ~]# kubectl get nodes -L region,zone NAME STATUS ROLES AGE VERSION REGION ZONE master Ready control-plane 17d v1.28.0 node1 Ready <none> 17d v1.28.0 hefei south node2 Ready <none> 17d v1.28.0 nanjing -
修改标签(–overwrite)
# 将node1的zone标签从south改为west [root@master ~]# kubectl label node node1 zone=west --overwrite=true -
删除标签(标签名后加 -)
# 删除node1的env标签 [root@master ~]# kubectl label node node1 env- -
按标签筛选节点
# 筛选zone=south的节点 [root@master ~]# kubectl get nodes -l zone=south# 筛选env不等于test1的节点 [root@master ~]# kubectl get nodes -l env!=test1
3.3 Node 节点配置 kubectl 权限
默认情况下,Worker 节点(如 node1、node2)无kubectl操作权限,需复制 Master 节点的admin.conf配置文件:
-
在 Worker 节点创建.kube 目录
[root@node1 ~]# mkdir /root/.kube -
从 Master 复制配置文件到 Worker
# 在Master节点执行,将admin.conf复制到node1 [root@master ~]# scp /etc/kubernetes/admin.conf node1:/root/.kube/config # 输入node1的root密码(示例:123123) root@node1's password: -
验证权限
# 在node1执行,查看节点列表(成功则权限配置完成) [root@node1 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready control-plane 17d v1.28.0 node1 Ready <none> 17d v1.28.0 node2 Ready <none> 17d v1.28.0
四、Kubernetes Dashboard 可视化配置
Dashboard 是 K8s 官方 Web 界面,支持 Pod 管理、资源查看、日志查询,部署步骤如下:
4.1 下载与修改配置文件
-
下载官方配置
[root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml -
修改 Service 为 NodePort 类型(便于外部访问)
[root@master ~]# vim recommended.yaml # 找到Service配置部分,添加nodePort和type: NodePort kind: Service apiVersion: v1 metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard spec:ports:- port: 443targetPort: 8443nodePort: 30001 # 新增:外部访问端口selector:k8s-app: kubernetes-dashboardtype: NodePort # 新增:改为NodePort类型
4.2 部署 Dashboard
# 应用配置
[root@master ~]# kubectl apply -f recommended.yaml# 查看Pod状态(确保Running)
[root@master ~]# kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-5657497c4c-jpc9d 1/1 Running 0 2m29s
kubernetes-dashboard-746fbfd67c-nm5c7 1/1 Running 0 2m29s# 查看Service端口(确认30001端口已暴露)
[root@master ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.110.180.64 <none> 8000/TCP 3m25s
kubernetes-dashboard NodePort 10.111.182.77 <none> 443:30001/TCP 3m25s
4.3 访问 Dashboard 与获取 Token
-
浏览器访问
- 地址:
https://<节点IP>:30001(如https://192.168.100.128:30001) - 提示 “不安全连接”:忽略警告,继续访问(浏览器选择 “高级”→“继续访问”)
- 地址:
-
创建管理员账户与 Token
-
创建 vim rbac.yaml
配置文件:
apiVersion: v1 kind: ServiceAccount metadata:name: dashboard-adminnamespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:name: dashboard-admin roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin subjects: - kind: ServiceAccountname: dashboard-adminnamespace: kube-system -
应用配置并获取 Token:
# 应用RBAC配置 [root@master ~]# kubectl apply -f rbac.yaml# 生成Token(有效期1小时,每次执行生成新Token) [root@master ~]# kubectl create token dashboard-admin --namespace kube-system # 输出示例(需复制该Token用于登录): eyJhbGciOiJSUzI1NiIsImtpZCI6IklFQUdhejk2MXdicVZ1b1NpblpBZko2WEJqWDFSdUYtWTFwLUpWZFdfS0EifQ...
-
-
登录 Dashboard
- 选择 “Token” 登录方式,粘贴上述 Token,点击 “登录”
- 成功后可查看集群资源、Pod 日志、部署应用等
五、YAML 语法与资源清单详解
5.1 YAML 基础语法
YAML 是 K8s 资源配置的标准格式,核心语法规则:
- 缩进:仅允许空格(不支持 Tab),相同层级缩进一致
- 注释:
#开头,注释内容到行尾 - 数据结构:
- 对象:键值对(如
name: Tom),行内写法{name: Tom, age: 20} - 数组:
-开头(如- java - python - go),行内写法[java, python, go] - 纯量:单个值(字符串、数字、布尔值,如
number: 3.14、isSet: true)
- 对象:键值对(如
示例:复合结构(对象 + 数组)
languages:- java- python- go
websites:YAML: yaml.orgRuby: ruby-lang.org
5.2 K8s 资源清单核心字段
K8s 资源(Pod、Deployment、Service 等)的 YAML 配置需包含以下核心字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| apiVersion | String | K8s API 版本(如v1、apps/v1,可通过kubectl api-versions查询) |
| kind | String | 资源类型(如Pod、Deployment、Service) |
| metadata | Object | 资源元数据(名称、命名空间、标签等) |
| metadata.name | String | 资源名称(同一命名空间下唯一) |
| metadata.namespace | String | 资源所属命名空间(默认default) |
| spec | Object | 资源详细配置(核心字段,随资源类型变化) |
示例:Pod 资源清单关键配置
apiVersion: v1
kind: Pod
metadata:name: tomcat-podnamespace: defaultlabels:app: tomcat
spec:containers:- name: tomcatimage: tomcat:9.0.85-jdk11 # 镜像地址ports:- containerPort: 8080 # 容器内部端口resources: # 资源限制limits:cpu: "1"memory: "1Gi"requests:cpu: "500m"memory: "512Mi"restartPolicy: Always # 重启策略(Always/OnFailure/Never)
5.3 常用资源配置示例
(1)创建命名空间(Namespace)
# create_web2.yaml
apiVersion: v1
kind: Namespace
metadata:name: web2 # 命名空间名称
应用配置:kubectl apply -f create_web2.yaml
(2)Deployment+Service 部署 Tomcat
# tomcat.yaml(含ConfigMap、Deployment、Service)
apiVersion: v1
kind: ConfigMap
metadata:name: tomcat-web-content
data:index.html: |<html><body>Hello Tomcat</body></html>
---
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcat-test
spec:replicas: 2 # 2个副本selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:containers:- name: tomcatimage: tomcat:9.0.85-jdk11ports:- containerPort: 8080volumeMounts:- name: web-contentmountPath: /usr/local/tomcat/webapps/ROOT/index.htmlsubPath: index.htmlvolumes:- name: web-contentconfigMap:name: tomcat-web-content
---
apiVersion: v1
kind: Service
metadata:name: tomcat-service
spec:type: NodePort # NodePort类型,外部可访问selector:app: tomcatports:- port: 80 # Service端口targetPort: 8080 # 容器端口nodePort: 30080 # 外部访问端口
应用配置后访问:http://<节点IP>:30080(如http://192.168.100.128:30080)
六、命名空间(Namespace)管理
6.1 命名空间作用
- 资源隔离:不同命名空间的资源(Pod、Service)相互独立
- 权限控制:可按命名空间配置 RBAC 权限
- 资源配额:限制命名空间的 CPU、内存使用上限
注意:Node、PersistentVolume 等资源不属于任何命名空间。
6.2 命名空间操作命令
-
查看命名空间
# 简写:kubectl get ns [root@master ~]# kubectl get namespaces NAME STATUS AGE default Active 19d kube-node-lease Active 19d kube-public Active 19d kube-system Active 19d kubernetes-dashboard Active 47h -
创建命名空间
- 命令创建:
kubectl create namespace web1 - YAML 创建:参考 5.3 节 “创建命名空间” 示例
- 命令创建:
-
查看命名空间下的资源
# 查看kube-system命名空间下的所有资源 [root@master ~]# kubectl get all --namespace=kube-system# 查看所有命名空间的Pod(-A=--all-namespaces) [root@master ~]# kubectl get pods -A -
删除命名空间
# 命令删除(会自动删除该命名空间下所有资源) [root@master ~]# kubectl delete namespace web1# YAML删除(需指定创建时的YAML文件) [root@master ~]# kubectl delete -f create_web2.yaml
注意:default、kube-system、kube-public为系统命名空间,不可删除。
结语
本文涵盖 Kubernetes 管理的核心操作,从kubectl命令到 Metrics Server、Dashboard 部署,再到 YAML 配置与命名空间管理,所有步骤均经过实操验证。建议初学者按 “命令熟悉→组件部署→资源配置” 的顺序学习,遇到问题可通过kubectl describe、kubectl logs等命令排查。后续可深入学习 HPA 自动伸缩、StatefulSet 有状态应用等进阶内容。
