当前位置: 首页 > news >正文

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 部署步骤

  1. 下载官方配置文件

    [root@master ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml
    
  2. 修改配置(解决镜像拉取与安全配置)

    • 替换为国内镜像(阿里云),避免公网拉取失败
    • 添加--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
    
  3. 应用配置并部署

    [root@master ~]# kubectl apply -f metrics-server-components.yaml
    
  4. 验证部署结果

    # 查看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:镜像拉取失败
  • 原因:镜像地址错误、仓库不可访问、私有仓库无认证
  • 解决:
    1. 确认镜像名称 / 标签正确(如v0.8.0而非latest
    2. 替换为国内镜像(参考 2.2 步骤 2)
    3. 若私有仓库,添加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 调度筛选、资源分组,核心操作如下:

  1. 添加标签

    # 为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
    
  2. 查看标签

    # 查看指定标签(-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   
    
  3. 修改标签(–overwrite)

    # 将node1的zone标签从south改为west
    [root@master ~]# kubectl label node node1 zone=west --overwrite=true
    
  4. 删除标签(标签名后加 -)

    # 删除node1的env标签
    [root@master ~]# kubectl label node node1 env-
    
  5. 按标签筛选节点

    # 筛选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配置文件:

  1. 在 Worker 节点创建.kube 目录

    [root@node1 ~]# mkdir /root/.kube
    
  2. 从 Master 复制配置文件到 Worker

    # 在Master节点执行,将admin.conf复制到node1
    [root@master ~]# scp /etc/kubernetes/admin.conf node1:/root/.kube/config
    # 输入node1的root密码(示例:123123)
    root@node1's password: 
    
  3. 验证权限

    # 在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 下载与修改配置文件

  1. 下载官方配置

    [root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
    
  2. 修改 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

  1. 浏览器访问

    • 地址:https://<节点IP>:30001(如https://192.168.100.128:30001
    • 提示 “不安全连接”:忽略警告,继续访问(浏览器选择 “高级”→“继续访问”)
  2. 创建管理员账户与 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...
      
  3. 登录 Dashboard

    • 选择 “Token” 登录方式,粘贴上述 Token,点击 “登录”
    • 成功后可查看集群资源、Pod 日志、部署应用等

五、YAML 语法与资源清单详解

5.1 YAML 基础语法

YAML 是 K8s 资源配置的标准格式,核心语法规则:

  1. 缩进:仅允许空格(不支持 Tab),相同层级缩进一致
  2. 注释#开头,注释内容到行尾
  3. 数据结构:
    • 对象:键值对(如name: Tom),行内写法{name: Tom, age: 20}
    • 数组:-开头(如- java - python - go),行内写法[java, python, go]
    • 纯量:单个值(字符串、数字、布尔值,如number: 3.14isSet: true

示例:复合结构(对象 + 数组)

languages:- java- python- go
websites:YAML: yaml.orgRuby: ruby-lang.org

5.2 K8s 资源清单核心字段

K8s 资源(Pod、Deployment、Service 等)的 YAML 配置需包含以下核心字段:

字段类型说明
apiVersionStringK8s API 版本(如v1apps/v1,可通过kubectl api-versions查询)
kindString资源类型(如PodDeploymentService
metadataObject资源元数据(名称、命名空间、标签等)
metadata.nameString资源名称(同一命名空间下唯一)
metadata.namespaceString资源所属命名空间(默认default
specObject资源详细配置(核心字段,随资源类型变化)

示例: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 命名空间操作命令

  1. 查看命名空间

    # 简写: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
    
  2. 创建命名空间

    • 命令创建:kubectl create namespace web1
    • YAML 创建:参考 5.3 节 “创建命名空间” 示例
  3. 查看命名空间下的资源

    # 查看kube-system命名空间下的所有资源
    [root@master ~]# kubectl get all --namespace=kube-system# 查看所有命名空间的Pod(-A=--all-namespaces)
    [root@master ~]# kubectl get pods -A
    
  4. 删除命名空间

    # 命令删除(会自动删除该命名空间下所有资源)
    [root@master ~]# kubectl delete namespace web1# YAML删除(需指定创建时的YAML文件)
    [root@master ~]# kubectl delete -f create_web2.yaml
    

注意defaultkube-systemkube-public为系统命名空间,不可删除。

结语

本文涵盖 Kubernetes 管理的核心操作,从kubectl命令到 Metrics Server、Dashboard 部署,再到 YAML 配置与命名空间管理,所有步骤均经过实操验证。建议初学者按 “命令熟悉→组件部署→资源配置” 的顺序学习,遇到问题可通过kubectl describekubectl logs等命令排查。后续可深入学习 HPA 自动伸缩、StatefulSet 有状态应用等进阶内容。

http://www.dtcms.com/a/610784.html

相关文章:

  • ECharts 配置语法
  • 宁波市省网站建设wordpress 附件上传插件
  • 凌源网站优化网站架构包括
  • LeetCode 子矩阵元素加1
  • OpenWrt系统上配置batman-adv快速开始与配置详解
  • 西宁网站制作哪里好哪个网站做母婴用品好
  • DataWhale-HelloAgents(第四章:智能体经典范式构建)
  • C语言编译器的工作原理与使用技巧
  • 【RPA典型应用-注册及登录发布信息自动化项目】
  • ajax瀑布流网站模板西双版纳
  • 国外无版权图片网站用vs2010做网站论文
  • C++零基础通关教程第二课
  • 福建网站建建设山东省临沂建设局网站
  • 大模型应用python+Java后端+Vue前端的整合
  • Doxygen使用教程(下载链接,配置过程,语法)
  • Spring Boot Admin 踩坑
  • 企业网站广告周浦网站建设公司
  • 大模型Agent能力增强技术全景
  • 深度智能体-长短期记忆
  • dfs|bfs|定长栈|栈+双指针
  • flutter实践:DropdownButton2使用示例
  • 电商网站订烟平台官网wordpress dux1.4
  • 【信创】软硬件概览
  • 论述网站建设过程中应注意的问题电脑和手机都能浏览的网站开发
  • 扬州市住房和城乡建设网站学科分类目录
  • springboot、Mybatis-plus工程多数据源字段映射不生效
  • 大模型应用开发5-SpringAIalibaba实战
  • 网站子站怎么做的外贸网站建设的好处
  • Go语言包管理/模块管理
  • 写出电子商务网站的建设流程wordpress配置文件是