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

Kubernetes 实战入门内容

Kubernetes 实战入门内容

在这里插入图片描述

一、Namespace(命名空间):实现资源隔离

Namespace 是 Kubernetes 中用于环境隔离多租户资源划分的核心资源,通过逻辑分组避免不同业务/环境的资源冲突,同时支持结合授权、资源配额机制精细化管理资源。

1. 核心作用与默认命名空间

默认命名空间状态核心用途
defaultActive未指定命名空间的资源默认存放位置
kube-node-leaseActive维护集群节点间心跳(v1.13+ 引入)
kube-publicActive资源可被所有用户(含未认证用户)访问
kube-systemActive存放 Kubernetes 系统组件(如 apiserver、coredns)

2. 常用操作(命令式+配置式)

(1)命令式操作
  • 查看

    • 所有命名空间:kubectl get ns

      [root@master01 ~]# kubectl get ns
      NAME              STATUS   AGE
      default           Active   2d1h
      kube-node-lease   Active   2d1h
      kube-public       Active   2d1h
      kube-system       Active   2d1h
    • 指定命名空间详情:kubectl get ns <ns名称> -o yaml(YAML 格式)或 kubectl describe ns <ns名称>(含资源限制信息)

      [root@master01 ~]# kubectl get ns default 
      NAME      STATUS   AGE
      default   Active   2d1h
  • 创建kubectl create ns <ns名称>

    [root@master01 ~]# kubectl create ns zhang3
    namespace/zhang3 created
    [root@master01 ~]# kubectl get ns zhang3 
    NAME     STATUS   AGE
    zhang3   Active   7s
  • 删除kubectl delete ns <ns名称>(删除时会级联删除该命名空间下所有资源)

    [root@master01 ~]# kubectl delete ns zhang3 
    namespace "zhang3" deleted
    [root@master01 ~]# kubectl get ns zhang3 
    Error from server (NotFound): namespaces "zhang3" not found
(2)配置式操作(YAML)
  1. 编写配置文件:
[root@master01 ~]# vim test.yaml
[root@master01 ~]# cat test.yaml 
apiVersion: v1
kind: Namespace
metadata:name: dev
  1. 执行命令:

    • 创建:

      [root@master01 ~]# kubectl create -f test.yaml 
      namespace/dev created
      
    • 删除:

      [root@master01 ~]# kubectl delete -f test.yaml
      namespace "dev" deleted

二、Pod:Kubernetes 最小管理单元

Pod 是 Kubernetes 集群中最小部署与管理单元,本质是容器的封装,一个 Pod 可包含 1 个或多个紧密关联的容器(共享网络、存储),所有容器需通过 Pod 才能在集群中运行。

1. 核心特性

  • 集群组件(如 coredns、kube-proxy)均以 Pod 形式运行,可通过 kubectl get pod -n kube-system 查看
  • 包含基础容器(如 pause 容器,用于维护 Pod 网络命名空间)和用户容器(业务容器)
  • 通常不直接创建 Pod,而是通过控制器(如 Deployment)管理,确保故障自动重建

2. 常用操作(命令式+配置式)

(1)命令式操作(通过控制器创建)
  • 创建并运行kubectl run <pod名称> --image=<镜像> --port=<端口> --namespace=<ns名称>
[root@master01 ~]# kubectl create ns test
namespace/test created
[root@master01 ~]# kubectl create deployment nginx --image=nginx:latest --port 80 -n test 
deployment.apps/nginx created
  • 查看

    • 基本信息:kubectl get pods -n <ns名称>

      [root@master01 ~]# kubectl get pods -n test 
      NAME                     READY   STATUS             RESTARTS   AGE
      nginx-7c79c4bf97-ckmsd   0/1     Running            0          38s
    • 详细信息(含容器日志、调度节点):kubectl describe pod <pod名称> -n <ns名称>

      [root@master01 ~]# kubectl get pods -n test 
      NAME                     READY   STATUS             RESTARTS   AGE
      nginx-7c79c4bf97-ckmsd   0/1     Running            0          38s
      [root@master01 ~]# kubectl describe pod nginx -n test 
      Name:             nginx-7c79c4bf97-ckmsd
      Namespace:        test
      Priority:         0
      Service Account:  default
      Node:             node02/192.168.100.30
      Start Time:       Fri, 31 Oct 2025 03:08:06 +0800
      Labels:           app=nginxpod-template-hash=7c79c4bf97*****省略*****
      
    • 带 IP 与节点信息:kubectl get pods -n <ns名称> -o wide

      [root@master01 ~]# kubectl  get pods -n test -o wide 
      NAME                     READY   STATUS             RESTARTS   AGE     IP              NODE     NOMINATD NODE   READINESS GATES
      nginx-7c79c4bf97-ckmsd   0/1     Running            0          2m41s   172.16.140.73   node02   <none>          <none>
  • 访问:通过 Pod IP 访问服务,如 curl http://<podIP>:<端口>(需先通过 -o wide 获取 IP)

    [root@master01 ~]# curl http://http://172.16.140.73
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html { color-scheme: light dark; }
    body { width: 35em; margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif; }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p><p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    
  • 删除

    • 自主式 Pod(无控制器):kubectl delete pod <pod名称> -n <ns名称>

      [root@master01 ~]#  kubectl delete pod nginx -n test 
      pod "nginx" deleted
    • 控制器管理的 Pod:需先删除控制器,kubectl delete deploy <控制器名称> -n <ns名称>(否则控制器会重建 Pod)

(2)配置式操作(YAML)
  1. 编写配置文件(如 pod-nginx.yaml):
[root@master01 ~]# vim test1.yaml 
[root@master01 ~]# cat test1.yaml apiVersion: v1
kind: Pod
metadata:name: nginx  # Pod 名称namespace: test  # 所属命名空间
spec:containers:  # 容器列表- image: nginx:latest  # 容器镜像name: pod  # 容器名称ports:  # 暴露端口- name: nginx-portcontainerPort: 80  # 容器内部端口protocol: TCP  # 协议类型
  1. 执行命令:

    • 创建:

      [root@master01 ~]# kubectl create -f test1.yaml
      pod/nginx created
    • 删除:

      [root@master01 ~]# kubectl delete -f test1.yaml 
      pod "nginx" deleted
      

      控制器管理的 Pod:需先删除控制器,`kubectl delete deploy <控制器名称> -n <ns名称>`(否则控制器会重建 Pod)

三、Label 与 Label Selector:资源标识与筛选

Label 是附加在资源(Pod、Node、Service 等)上的键值对标识,用于实现资源多维度分组;Label Selector 则是筛选具有特定 Label 的资源工具,是控制器关联 Pod、Service 匹配 Pod 的核心机制。

1. Label 核心特性

  • 一个资源可添加多个 Label,一个 Label 可附加到多个资源
  • 支持创建后动态添加/删除/更新(需加 --overwrite 参数)
  • 常用场景:版本分组(version: stable)、环境区分(environment: dev)、架构分层(tier: frontend

2. Label Selector 类型

筛选类型语法示例作用
基于等式name=slaveenv!=production筛选 key=name 且 value=slave 的资源;筛选 key=env 且 value≠production 的资源
基于集合name in (master, slave)name not in (frontend)筛选 key=name 且 value 为 master/slave 的资源;筛选 key=name 且 value≠frontend 的资源
多条件组合name=slave, env!=production同时满足多个筛选条件(逗号分隔)

3. 常用操作(命令式+配置式)

(1)命令式操作
  • 为已存在pod资源添加标签kubectl label pod <pod名称> <key>=<value> -n <ns名称>

    [root@master01 ~]# kubectl run nginx --image=nginx:latest --port=80 -n test 
    pod/nginx created
    [root@master01 ~]#  kubectl get pod -n test --show-labels
    NAME                     READY   STATUS             RESTARTS   AGE   LABELS
    nginx                    0/1     Running       0          22s   run=nginx
    [root@master01 ~]# kubectl label pod nginx version=1.0 -n test 
    pod/nginx labeled
    [root@master01 ~]#  kubectl get pod -n test --show-labels
    NAME                     READY   STATUS             RESTARTS   AGE   LABELS
    nginx                    0/1     Running   0          37s   run=nginx,version=1.0
  • 更新标签kubectl label pod <pod名称> <key>=<新value> -n <ns名称> --overwrite(如 version=2.0

    [root@master01 ~]#  kubectl get pod -n test --show-labels
    NAME                     READY   STATUS             RESTARTS   AGE     LABELS
    nginx                    0/1     Running   0          2m50s   run=nginx,version=2.0
  • 查看标签kubectl get pod <pod名称> -n <ns名称> --show-labels

  • 筛选标签kubectl get pod -n <ns名称> -l <筛选条件> --show-labels

    [root@master01 ~]# kubectl get pod -n test -l version=2.0
    NAME    READY   STATUS             RESTARTS   AGE
    nginx   0/1     Running            0          4m24s
    
  • 删除标签kubectl label pod <pod名称> <key>- -n <ns名称>(如 kubectl label pod nginx-pod version- -n dev

    [root@master01 ~]# kubectl label pod nginx version- -n test 
    pod/nginx unlabeled
    [root@master01 ~]#  kubectl get pod -n test --show-labels
    NAME                     READY   STATUS             RESTARTS   AGE     LABELS
    nginx                    0/1     Running            0          5m17s   run=nginx
    
(2)配置式操作(YAML)

在 Pod 配置中直接定义 Label:

[root@master01 ~]# vim label.yaml
[root@master01 ~]# cat label.yaml 
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: testlabels:  # 直接定义 Labelversion: "3.0"env: "test"
spec:containers:- image: nginx:latestname: podports:- name: nginx-portcontainerPort: 80protocol: TCP

执行更新:

[root@master01 ~]# kubectl apply -f label.yaml 
Warning: resource pods/nginx is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
The Pod "nginx" is invalid: spec.containers: Forbidden: pod updates may not add or remove containers

四、Deployment:Pod 控制器(无状态服务管理)

Deployment 是最常用的 Pod 控制器,用于管理无状态服务,核心功能是确保 Pod 数量符合预期(故障自动重建)、支持滚动升级、版本回退,通过 Label Selector 关联并管理 Pod。

1. 核心作用

  • 维持指定数量的 Pod 副本(replicas
  • 监控 Pod 状态,故障时自动重启/重建
  • 支持滚动更新(默认策略),避免服务中断
  • 通过 kubectl get deploy 查看控制器状态

2. 常用操作(命令式+配置式)

(1)命令式操作
  • 创建kubectl create deploy <控制器名称> --image=<镜像> --port=<端口> --replicas=<副本数> --namespace=<ns名称>

    [root@master01 ~]# kubectl create deploy test1 --image=nginx:latest --port=80 --replicas=3 -n test 
    deployment.apps/test1 created
    
  • 查看

    • 控制器基本信息:kubectl get deploy -n <ns名称>(含 UP-TO-DATE 升级副本数、AVAILABLE 可用副本数)

      [root@master01 ~]# kubectl get deploy -n test 
      NAME    READY   UP-TO-DATE   AVAILABLE   AGE
      nginx   0/1     1            0           84m
      test1   0/3     3            0           36s
    • 控制器详情(含更新策略、Pod 模板):kubectl describe deploy <控制器名称> -n <ns名称>

      [root@master01 ~]# kubectl describe deploy test1 -n test
      Name:                   test1
      Namespace:              test
      CreationTimestamp:      Fri, 31 Oct 2025 04:31:27 +0800
      Labels:                 app=test1
      Annotations:            deployment.kubernetes.io/revision: 1
      Selector:               app=test1
      Replicas:               3 desired | 3 updated | 3 total | 0 available | 3 unavailable
      StrategyType:           RollingUpdate
      MinReadySeconds:        0
      RollingUpdateStrategy:  25% max unavailable, 25% max surge
      Pod Template:Labels:  app=test1Containers:nginx:Image:        nginx:latestPort:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>
      Conditions:Type           Status  Reason----           ------  ------Available      False   MinimumReplicasUnavailableProgressing    True    ReplicaSetUpdated
      OldReplicaSets:  <none>
      NewReplicaSet:   test1-64ff644858 (3/3 replicas created)
      Events:Type    Reason             Age    From                   Message----    ------             ----   ----                   -------Normal  ScalingReplicaSet  2m48s  deployment-controller  Scaled up replica set test1-64ff644858 to 3
  • 删除kubectl delete deploy <控制器名称> -n <ns名称>(级联删除关联的 Pod)

    [root@master01 ~]#  kubectl delete deploy test1 -n test
    deployment.apps "test1" deleted
(2)配置式操作(YAML)
  1. 编写配置文件(如 deploy-nginx.yaml):
[root@master01 ~]# vim deploy-nginx.yaml
[root@master01 ~]# cat deploy-nginx.yaml 
apiVersion: apps/v1  # Deployment 对应 API 版本
kind: Deployment
metadata:name: nginx1  # 控制器名称namespace: test  # 所属命名空间
spec:replicas: 3  # 期望 Pod 副本数selector:  # Label Selector,匹配 Pod 标签matchLabels:run: nginxtemplate:  # Pod 模板(定义 Pod 规格)metadata:labels:  # Pod 标签,需与 selector 匹配run: nginxspec:containers:- image: nginx:latest  # 容器镜像name: nginx  # 容器名称ports:- containerPort: 80  # 容器端口protocol: TCP
  1. 执行命令:

    • 创建:

      [root@master01 ~]# kubectl create -f deploy-nginx.yaml
      deployment.apps/nginx1 created
    • 删除:

      [root@master01 ~]# kubectl delete -f deploy-nginx.yaml
      deployment.apps "nginx1" deleted

五、核心关联逻辑

  1. Namespace 与资源:所有资源(Pod、Deployment)需归属指定命名空间,实现环境隔离
  2. Deployment 与 Pod:Deployment 通过 selector 匹配具有指定 Label 的 Pod,管理其生命周期(创建、重建、升级)
  3. Label 与筛选:Label 是资源关联的“桥梁”,Deployment 关联 Pod、Service 匹配 Pod 均依赖 Label Selector

通过以上资源的操作与关联,可完成 Kubernetes 无状态服务的基础部署与管理,后续可结合 Service 实现服务暴露、Ingress 实现域名路由等进阶功能。

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

相关文章:

  • 变量声明与可变性
  • 前端生产部署完全指南:从零到精通
  • 做外贸的人常用的网站wordpress视频站模板下载
  • Oracle数据库安装(Windows)
  • 跳转指令介绍
  • 关于网站制作的论文个人网页效果图
  • 评估agent能力benchmark收集汇总
  • 番禺五屏网站建设西安网站建设xs029
  • 深入剖析 Rust `HashMap`:安全哈希 (SipHash) 与高性能冲突处理 (Swiss Table)
  • 一款漏洞库批量下载更新工具,便于在离线情况下漏洞的访问检索
  • 做任务的网站源码活动线报资源网
  • 【Oceanbase】OceanBase批量写入性能优化实战:转储、日志归档、多并发
  • 企业网站制作要求免费的企业网站
  • 9-SpringCloud-服务网关 Gateway-高级特性之 Filter-1
  • 服务器数据恢复—重装导致reiserfs中损坏数据如何复活?
  • RabbitMQ实现原理深度解析:从AMQP协议到高可用集群
  • ceph mgr 开启 telegraf 模块监控(influxdb+telegraf)
  • (107页PPT)园区大数据治理解决方案(附下载方式)
  • 59一起做网站备案通过 网站打不开
  • 上海团购网站建设北京网站优化企业
  • 基础算法精讲 08|前后指针|链表
  • 16.零基础入门——关于ArcCatalog基本内容介绍
  • 嵌入式 Linux 开发核心流程(含应用运行、联网、内核移植与编译,向内核添加新文件)
  • C#面试题及详细答案120道(41-50)-- 异常处理
  • Shell实用实例1000例3
  • 定制型网站一般价格水利厅网站集约化建设
  • 基于SpringBoot+Vue的助农扶贫平台(AI问答、WebSocket实时聊天、快递物流API、协同过滤算法、Echarts图形化分析、分享链接到微博)
  • 5-27 WPS JS宏数组元素添加删除应用2
  • 网站字体样式wordpress iis伪静态
  • YouBallin:重塑去中心化创作者平台的声誉体系