Kubernetes 实战入门内容
Kubernetes 实战入门内容

一、Namespace(命名空间):实现资源隔离
Namespace 是 Kubernetes 中用于环境隔离或多租户资源划分的核心资源,通过逻辑分组避免不同业务/环境的资源冲突,同时支持结合授权、资源配额机制精细化管理资源。
1. 核心作用与默认命名空间
| 默认命名空间 | 状态 | 核心用途 |
|---|---|---|
default | Active | 未指定命名空间的资源默认存放位置 |
kube-node-lease | Active | 维护集群节点间心跳(v1.13+ 引入) |
kube-public | Active | 资源可被所有用户(含未认证用户)访问 |
kube-system | Active | 存放 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)
- 编写配置文件:
[root@master01 ~]# vim test.yaml
[root@master01 ~]# cat test.yaml
apiVersion: v1
kind: Namespace
metadata:name: dev
-
执行命令:
-
创建:
[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)
- 编写配置文件(如
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 # 协议类型
-
执行命令:
-
创建:
[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=slave、env!=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)
- 编写配置文件(如
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
-
执行命令:
-
创建:
[root@master01 ~]# kubectl create -f deploy-nginx.yaml deployment.apps/nginx1 created -
删除:
[root@master01 ~]# kubectl delete -f deploy-nginx.yaml deployment.apps "nginx1" deleted
-
五、核心关联逻辑
- Namespace 与资源:所有资源(Pod、Deployment)需归属指定命名空间,实现环境隔离
- Deployment 与 Pod:Deployment 通过
selector匹配具有指定 Label 的 Pod,管理其生命周期(创建、重建、升级) - Label 与筛选:Label 是资源关联的“桥梁”,Deployment 关联 Pod、Service 匹配 Pod 均依赖 Label Selector
通过以上资源的操作与关联,可完成 Kubernetes 无状态服务的基础部署与管理,后续可结合 Service 实现服务暴露、Ingress 实现域名路由等进阶功能。
