k8s管理

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 等)不可删除

七、核心补充说明

  1. 版本兼容:文档中 k8s 版本为 v1.28.0,metrics-server 使用 v0.8.0,部分配置(如--kubelet-insecure-tls)需适配对应版本;
  2. 网络访问:Dashboard、Service 暴露需确保节点端口(如 30001、30080)未被占用,且客户端能访问节点 IP;
  3. 权限控制:通过 RBAC(Role-Based Access Control)实现权限管理,如 Dashboard 管理员账户绑定cluster-admin角色获取全权限。
相关推荐
礼拜天没时间.16 小时前
自定义镜像制作——从Dockerfile到镜像
linux·docker·容器·centos·bash
luffy545916 小时前
windows下通过docker-desktop创建redis实例
windows·redis·docker·容器
weixin_4046793116 小时前
docker部署ollama
运维·docker·容器
Hi2024021717 小时前
在Docker容器中安全运行OpenClaw:无需虚拟机,体验AI助手
人工智能·安全·docker·openclaw
江湖有缘17 小时前
Docker部署music-tag-web音乐标签编辑器
前端·docker·编辑器
计算机小手17 小时前
Docker 部署 OpenClaw 汉化版,畅玩个人 AI 智能代理
经验分享·docker·aigc·开源软件
金刚猿1 天前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
JH_Kong1 天前
解决 WSL 中 Docker 权限问题:从踩坑到完整修复
docker·容器
忆~遂愿1 天前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
陈桴浮海1 天前
Kustomize实战:从0到1实现K8s多环境配置管理与资源部署
云原生·容器·kubernetes