k8s管理
一、kubectl 核心命令详解
kubectl是 k8s 集群的命令行管理工具,按功能分为多类,包含基础使用、资源操作、故障排查等核心能力,部分命令含实操示例:
1. 命令分类与核心功能
| 命令类别 | 核心命令 | 功能描述 | 实操示例 |
|---|---|---|---|
| 基础命令 | create | 通过文件 / 标准输入创建资源 | kubectl create -f pod.yaml(从文件创建 Pod) |
| run | 在集群中运行指定镜像 | kubectl run nginx --image=nginx:1.21(创建 Nginx Pod) |
|
| get | 查看资源状态 | kubectl get pods -n kube-system(查看 kube-system 命名空间下的 Pod) |
|
| delete | 删除资源 | 常规删除:kubectl delete pod metrics-server-xxx -n kube-system强制删除:kubectl delete pod metrics-server-xxx -n kube-system --grace-period=0 --force |
|
| 部署命令 | scale | 扩容 / 缩容 Pod 数量 | kubectl scale deployment nginx-deploy --replicas=3(扩容为 3 个副本) |
| autoscale | 自动扩缩容 | kubectl autoscale deployment nginx-deploy --min=2 --max=5(最小 2 副本,最大 5 副本) |
|
| 集群管理 | cluster-info | 显示集群信息 | kubectl cluster-info(输出控制平面、CoreDNS 地址) |
| top | 查看资源(CPU / 内存)使用 | 查看 Pod 资源:kubectl top pod kube-apiserver-master -n kube-system查看节点资源:kubectl top node node1 |
|
| cordon/uncordon | 标记节点不可调度 / 可调度 | kubectl cordon node2(标记 node2 不可调度) |
|
| 故障排查 | logs | 查看 Pod 容器日志 | kubectl logs nginx-pod(查看 Nginx Pod 日志,单容器可省略容器名) |
| exec | 在容器中执行命令 | kubectl exec -it nginx-pod -- /bin/bash(进入 Nginx 容器交互终端) |
|
| describe | 查看资源详细信息 | kubectl describe pod metrics-server-xxx -n kube-system(查看 Pod 启动详情) |
|
| 高级命令 | apply | 应用配置文件(创建 / 更新资源) | kubectl apply -f metrics-server-components.yaml(部署 metrics-server) |
| 其他命令 | api-versions | 查看支持的 API 版本 | kubectl api-versions(输出如 apps/v1、v1 等版本) |
| version | 查看客户端 / 服务端版本 | kubectl version(输出 Client Version: v1.28.0、Server Version: v1.28.0) |
2. 关键插件:metrics-server 部署(资源监控必备)
用于采集节点 / 容器的 CPU、内存监控数据,部署步骤如下:
yaml
# 1. 下载配置文件
[root@master ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml
# 2. 修改镜像地址(国内环境适配)
[root@master ~]# sed -i 's/registry.k8s.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml
# 3. 编辑配置文件,添加--kubelet-insecure-tls(v0.8.0+版本必需)
[root@master ~]# vim metrics-server-components.yaml
...
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=15s
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metricsserver:v0.8.0
...
# 4. 应用配置
[root@master ~]# kubectl apply -f metrics-server-components.yaml

二、集群节点管理
涵盖节点信息查看、跨节点管理配置(master 节点授权 node 节点管理集群):
1. 节点信息查看
| 操作目的 | 命令示例 | 输出说明 |
|---|---|---|
| 查看节点列表 | kubectl get nodes |
显示节点名称、状态、角色、版本 |
| 查看节点详细信息(含 IP、系统信息) | kubectl get nodes -o wide |
输出节点内网 IP、OS 镜像、容器运行时版本 |
| 查看节点资源与 Pod 分布 | kubectl describe node master |
显示节点 CPU / 内存容量、已分配资源、运行中的 Pod |
2. Node 节点授权管理(master→node 节点权限同步)
默认 node 节点无法执行kubectl命令,需复制 master 的配置文件:
yaml
# 1. 在node节点创建.kube目录
[root@master ~]# mkdir /root/.kube
# 2. 从master节点复制admin.conf到node节点
[root@master ~]# scp /etc/kubernetes/admin.conf node1:/root/.kube/config (node1为目标节点 hostname/IP)
# 3. 验证:在node1节点执行
[root@master ~]# kubectl get nodes (成功显示集群所有节点,说明授权生效)
三、Dashboard 可视化部署
Kubernetes Dashboard 是 Web 管理界面,支持通过 Token 登录,部署步骤含配置示例:
1. 部署流程
yaml
# 1. 下载配置文件
[root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
# 2. 修改配置,暴露NodePort端口(便于外部访问)
[root@master ~]# vim recommended.yaml
# 在Service部分添加nodePort和type: NodePort
spec:
type: NodePort # 新增
ports:
- port: 443
targetPort: 8443
nodePort: 30001 # 新增,端口范围30000-32767
selector:
k8s-app: kubernetes-dashboard
# 3. 应用配置
[root@master ~]# kubectl apply -f recommended.yaml
# 4. 查看部署状态
[root@master ~]# kubectl get pods -n kubernetes-dashboard (确保2个Pod均为Running状态)
[root@master ~]# kubectl get svc -n kubernetes-dashboard (验证443端口映射为30001)

2. 创建访问令牌(Token)
需配置管理员账户授权,步骤如下:
yaml
# 1. 创建rbac.yaml文件,定义管理员权限
vim rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
# 2. 应用配置
[root@master ~]# kubectl apply -f rbac.yaml
# 3. 生成Token(有效期1小时,每次执行生成新Token)
[root@master ~]# kubectl create token dashboard-admin --namespace kube-system

3. 访问 Dashboard
- 浏览器输入:
https://<节点IP>:30001(如https://192.168.100.128:30001,需用 HTTPS) - 粘贴上述生成的 Token 登录,即可可视化管理集群资源。


四、节点标签(Label)管理
标签是 k8s 中资源筛选、调度的核心机制,支持多维度标记和灵活筛选,实操示例如下:
1. 标签操作命令
| 操作目的 | 命令示例 | 说明 |
|---|---|---|
| 查看节点标签 | kubectl get nodes --show-labels |
显示所有节点的键值对标签 |
| 添加标签 | 单标签:kubectl label node node2 region=nanjing多标签:kubectl label node node1 region=hefei zone=south env=test bussiness=AI |
为 node1 添加地域、机房、环境、业务标签 |
| 筛选标签 | 等值筛选:kubectl get nodes -l zone=south(查询 zone=south 的节点)集合筛选:kubectl get nodes -l "env in(test1,test2)"(查询 env 为 test1 或 test2 的节点)排除筛选:kubectl get nodes -l env!=test1(排除 env=test1 的节点) |
|
| 修改标签 | kubectl label node node1 zone=west --overwrite=true |
覆盖 node1 的 zone 标签为 west |
| 删除标签 | kubectl label node node1 env- |
删除 node1 的 env 标签(键名后加减号) |
五、YAML 声明式配置
YAML 是 k8s 资源定义的标准格式,通过文件描述资源期望状态,支持创建 Pod、Deployment、Service 等所有资源。
1. YAML 基本语法
-
缩进:仅支持空格(不支持 Tab),相同层级左对齐
-
注释:
#开头,直至行尾 -
数据结构:支持对象(键值对)、数组(
-开头)、纯量(字符串、数字等)
yaml# 示例:对象+数组结构 metadata: name: nginx-pod spec: containers: - name: nginx image: nginx:1.21 ports: - containerPort: 80
2. 核心资源 YAML 示例(Tomcat 部署 + Service 暴露)
该示例创建 2 个 Tomcat Pod 副本,通过 NodePort 暴露 30080 端口供外部访问:
yaml
# 1. 配置文件(tomcat.yaml)
apiVersion: v1
kind: ConfigMap # 存储静态页面内容
metadata:
name: tomcat-web-content
data:
index.html: |
<html><body>Hello Tomcat</body></html>
---
apiVersion: apps/v1
kind: Deployment # 部署Pod副本
metadata:
name: tomcat-test
spec:
replicas: 2 # 2个副本
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:9.0.85-jdk11
ports:
- containerPort: 8080
volumeMounts: # 挂载ConfigMap中的静态页面
- name: web-content
mountPath: /usr/local/tomcat/webapps/ROOT/index.html
subPath: index.html
volumes:
- name: web-content
configMap:
name: tomcat-web-content
---
apiVersion: v1
kind: Service # 暴露服务
metadata:
name: tomcat-service
spec:
type: NodePort # NodePort类型,便于外部访问
selector:
app: tomcat # 匹配Deployment的Pod标签
ports:
- port: 80 # 服务端口
targetPort: 8080 # Pod容器端口
nodePort: 30080 # 主机映射端口
3. 应用 YAML 文件
[root@master ~]# vim tomcat.yaml
[root@master ~]# kubectl apply -f tomcat.yaml
[root@master ~]# kubectl get svc | grep tomcat
tomcat-service NodePort 10.105.92.63 <none> 80:30080/TCP 16s
访问方式:http://<节点IP>:30080(如http://192.168.100.128:30080),页面显示 "Hello Tomcat"。

六、命名空间(Namespace)管理
命名空间用于隔离集群资源(如 Pod、Service),默认包含 default、kube-system 等系统命名空间,支持自定义创建和删除:
1. 核心操作命令
| 操作目的 | 命令示例 | 说明 |
|---|---|---|
| 查看命名空间 | kubectl get namespaces(简写kubectl get ns) |
显示所有命名空间的状态和存活时间 |
| 查看命名空间下的资源 | kubectl get all --namespace=kube-system |
查看 kube-system 下的所有资源(Pod、Service、Deployment 等) |
| 创建命名空间 | 命令创建:kubectl create namespace web1YAML 创建:编写 create_web2.yaml 后执行kubectl apply -f create_web2.yaml |
YAML 文件内容:apiVersion: v1``kind: Namespace``metadata: name: web2 |
| 删除命名空间 | 命令删除:kubectl delete namespace web1YAML 删除:kubectl delete -f create_web2.yaml |
删除命名空间会自动删除其下所有资源,系统命名空间(default、kube-system 等)不可删除 |
七、核心补充说明
- 版本兼容:文档中 k8s 版本为 v1.28.0,metrics-server 使用 v0.8.0,部分配置(如
--kubelet-insecure-tls)需适配对应版本; - 网络访问:Dashboard、Service 暴露需确保节点端口(如 30001、30080)未被占用,且客户端能访问节点 IP;
- 权限控制:通过 RBAC(Role-Based Access Control)实现权限管理,如 Dashboard 管理员账户绑定
cluster-admin角色获取全权限。