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=nginx
                        pod-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-port
      containerPort: 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: nginx
  namespace: test
  labels:  # 直接定义 Label
    version: "3.0"
    env: "test"
spec:
  containers:
  - image: nginx:latest
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: 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=test1
        Containers:
         nginx:
          Image:        nginx:latest
          Port:         80/TCP
          Host Port:    0/TCP
          Environment:  <none>
          Mounts:       <none>
        Volumes:        <none>
      Conditions:
        Type           Status  Reason
        ----           ------  ------
        Available      False   MinimumReplicasUnavailable
        Progressing    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: nginx
  template:  # Pod 模板(定义 Pod 规格)
    metadata:
      labels:  # Pod 标签,需与 selector 匹配
        run: nginx
    spec:
      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 实现域名路由等进阶功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值