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

k8s 实战入门

k8s 实战入门

一、Namespace(命名空间)

作用
  • 实现多环境资源隔离多租户资源隔离
  • 默认情况下所有 Pod 可互相访问,通过 Namespace 可实现逻辑隔离
  • 可配合 RBAC 和 Resource Quota 实现权限和资源限制
默认命名空间

kubernetes 在集群启动之后,会默认创建几个 namespace

[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   44h		# 所有未指定 Namespace 的对象都会被分配在 default 命名空间
kube-node-lease   Active   44h		# 集群节点之间的心跳维护,v1.13开始引入
kube-public       Active   44h		# 此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system       Active   44h		# 所有由 Kubernetes 系统创建的资源都处于这个命名空间
操作命令
查看所有 ns
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   44h
kube-node-lease   Active   44h
kube-public       Active   44h
kube-system       Active   44h
查看指定 ns
[root@master ~]# kubectl get ns default 
NAME      STATUS   AGE
default   Active   44h
指定输出格式

kubernetes支持的格式有很多,比较常见的是wide、json、yaml

[root@master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: "2025-10-28T10:02:08Z"labels:kubernetes.io/metadata.name: defaultname: defaultresourceVersion: "39"uid: d37dd814-baca-4683-b617-eb77832e6969
spec:finalizers:- kubernetes
status:phase: Active
查看 ns 详情
[root@master ~]# kubectl describe ns default 
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       Active	# Active 命名空间正在使用中  Terminating 正在删除命名空间No resource quota.		# ResourceQuota 针对 namespace 做的资源限制No LimitRange resource.	# LimitRange 针对 namespace 中的每个组件做的资源限制
创建 ns
[root@master ~]# kubectl create ns dev
namespace/dev created
删除 ns
[root@master ~]# kubectl delete ns dev 
namespace "dev" deleted
配置方式
首先准备一个 yaml 文件

官方文档查找模板 https://kubernetes.io/

[root@master ~]# vim ns-dev.yaml
apiVersion: v1
kind: Namespace
metadata:name: dev
然后就可以执行对应的创建和删除命令了
[root@master ~]# kubectl create -f ns-dev.yaml 
namespace/dev created
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   44h
dev               Active   16s
kube-node-lease   Active   44h
kube-public       Active   44h
kube-system       Active   44h
[root@master ~]# kubectl delete -f ns-dev.yaml 
namespace "dev" deleted
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   44h
kube-node-lease   Active   44h
kube-public       Active   44h
kube-system       Active   44h

二、Pod

概念
  • Pod 是 Kubernetes 最小管理单元
  • 一个 Pod 可包含一个或多个容器
  • 系统组件也以 Pod 形式运行在 kube-system 命名空间中
操作命令
查看某个 ns 的 pod
[root@master ~]# kubectl get pod -n kube-system 
NAME                                      READY   STATUS    RESTARTS        AGE
calico-kube-controllers-9d57d8f49-88mgl   1/1     Running   2 (5h34m ago)   44h
calico-node-2vw44                         1/1     Running   2 (5h34m ago)   44h
calico-node-52ms4                         1/1     Running   2 (5h34m ago)   44h
calico-node-7kh9c                         1/1     Running   2 (5h34m ago)   44h
coredns-6554b8b87f-mjx7v                  1/1     Running   2 (5h34m ago)   44h
coredns-6554b8b87f-sz9ft                  1/1     Running   2 (5h34m ago)   44h
etcd-master                               1/1     Running   2 (5h34m ago)   44h
kube-apiserver-master                     1/1     Running   3 (5h33m ago)   44h
kube-controller-manager-master            1/1     Running   2 (5h34m ago)   44h
kube-proxy-dww5p                          1/1     Running   2 (5h34m ago)   44h
kube-proxy-lqh62                          1/1     Running   2 (5h34m ago)   44h
kube-proxy-nmtph                          1/1     Running   2 (5h34m ago)   44h
kube-scheduler-master                     1/1     Running   2 (5h34m ago)   44h
创建并运行 pod

kubernetes 没有提供单独运行 Pod 的命令,都是通过 Pod 控制器来实现的

[root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --namespace dev
pod/nginx created
  • --image 指定Pod的镜像

  • --port 指定端口

  • --namespace 指定namespace

查看 pod 信息
[root@master ~]# kubectl get pods -n dev 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          5m57s
查看 pod 详细信息
[root@master ~]# kubectl describe pod nginx -n dev
Name:             nginx
Namespace:        dev
Priority:         0
Service Account:  default
Node:             node2/192.168.100.30
Start Time:       Thu, 30 Oct 2025 14:37:23 +0800
Labels:           run=nginx
......
获取 pod ip
[root@master ~]# kubectl get pods -n dev -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          6m13s   172.16.104.4   node2   <none>           <none>
访问 pod
[root@master ~]# curl http://172.16.104.4
<!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
[root@master ~]# kubectl delete pod nginx -n dev 
pod "nginx" deleted
[root@master ~]# kubectl get pod -n dev
No resources found in dev namespace.
控制器管理
控制器创建
创建多个 pod
–replicas=个数
[root@master ~]# kubectl create deploy nginx --image=nginx:latest --port=80 --replicas=3 -n dev
deployment.apps/nginx created
查看
[root@master ~]# kubectl get deploy -n dev
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           80s[root@master ~]# kubectl get pods -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7c79c4bf97-4cz44   1/1     Running   0          2m
nginx-7c79c4bf97-k48jj   1/1     Running   0          2m
nginx-7c79c4bf97-zxtw6   1/1     Running   0          2m
删除 pod

显示删除Pod成功,但是再查询,发现又新产生了一个,这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建

[root@master ~]# kubectl delete pod nginx-7c79c4bf97-4cz44 -n dev
pod "nginx-7c79c4bf97-4cz44" deleted
[root@master ~]# kubectl get pods -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7c79c4bf97-k48jj   1/1     Running   0          5m14s
nginx-7c79c4bf97-qlzs6   1/1     Running   0          6s
nginx-7c79c4bf97-zxtw6   1/1     Running   0          5m14s# 此时要想删除Pod,必须删除Pod控制器
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted
[root@master ~]# kubectl get pods -n dev
No resources found in dev namespace.
配置操作
创建一个 pod-nginx.yaml
[root@master ~]# vim pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: dev
spec:containers:- image: nginx:latestname: podports:- name: nginx-portcontainerPort: 80protocol: TCP
然后就可以执行对应的创建和删除命令了
[root@master ~]# kubectl create -f pod-nginx.yaml 
pod/nginx created
[root@master ~]# kubectl get pods -n dev
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          17s
[root@master ~]# kubectl delete -f pod-nginx.yaml 
pod "nginx" deleted
[root@master ~]# kubectl get pods -n dev
No resources found in dev namespace.

三、Label

概念与作用

Label(标签) 是Kubernetes系统中的核心概念之一,其核心作用是为集群中的资源对象(如Pod、Node、Service等)添加可标识的键值对(key/value) 元数据,从而实现资源的灵活区分、选择、分组和管理

主要管理场景包括
  • 资源分配
  • 工作负载调度
  • 服务配置
  • 滚动部署
Label 特点
  • 附加性:以 key=value 的形式附加到各种对象上
  • 多对多:一个资源可以定义任意数量的Label;一个Label也可以被添加到任意数量的资源上。
  • 动态性:通常在资源定义时确定,但也支持在对象创建后动态添加或删除
常用 Label 示例
类别示例
版本标签"version": "release", "version": "stable"
环境标签"environment": "dev", "environment": "test", "environment": "pro"
架构标签"tier": "frontend", "tier": "backend"

Label Selector(标签选择器)

Label用于定义标识,而 Label Selector 用于根据这些标识来查询和筛选资源对象。

基于等式的Selector
表达式说明
name = slave选择所有包含Label中key="name"value="slave"的对象
env != production选择所有包含Label中key="env"value不等于"production"的对象
基于集合的Selector
表达式说明
name in (master, slave)选择value"master""slave"的对象
name not in (frontend)选择value不等于"frontend"的对象
多条件组合

多个选择条件可以使用逗号 , 进行分隔,表示 “AND” 关系。

  • name=slave, env!=production
  • name not in (frontend), env!=production
操作命令
创建 pod 时打标签
[root@master ~]# kubectl run nginx --labels test=1 --image=nginx:latest --port=80 -n dev
pod/nginx created
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          32s   test=1
为 pod 更新标签
[root@master ~]# kubectl label pod nginx test=2 -n dev --overwrite
pod/nginx labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          6m    test=2
为 pod 打标签
[root@master ~]# kubectl label pod nginx app=nginx -n dev
pod/nginx labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME    READY   STATUS    RESTARTS   AGE    LABELS
nginx   1/1     Running   0          7m4s   app=nginx,test=2
查看标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx    1/1     Running   0          8m17s   app=nginx,test=2
nginx1   1/1     Running   0          5s      test=1
筛选标签
[root@master ~]# kubectl get pod -n dev -l test=2 --show-labels
NAME    READY   STATUS    RESTARTS   AGE    LABELS
nginx   1/1     Running   0          9m9s   app=nginx,test=2
删除标签
[root@master ~]# kubectl label pod nginx app- -n dev
pod/nginx unlabeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE    LABELS
nginx    1/1     Running   0          10m    test=2
nginx1   1/1     Running   0          114s   test=1
配置方式
[root@master ~]# vim pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx2namespace: devlabels:test: "3"      app: "nginx"
spec:containers:- image: nginx:latestname: podports:- name: nginx-portcontainerPort: 80protocol: TCP
[root@master ~]# kubectl apply -f pod-nginx.yaml 
pod/nginx2 created
[root@master ~]# kubectl get pod -n dev --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx    1/1     Running   0          13m     test=2
nginx1   1/1     Running   0          5m32s   test=1
nginx2   1/1     Running   0          4s      app=nginx,test=3

四、Deployment

作用
  • 管理 Pod 的生命周期,确保 Pod 数量符合预期
  • 支持滚动更新、回滚、副本扩缩容
操作命令
创建 pod
[root@master ~]# kubectl create deploy nginx --image=nginx:latest --port=80 --replicas=3 -n dev
deployment.apps/nginx created
  • --image 指定pod的镜像

  • --port 指定端口

  • --replicas 指定创建pod数量

  • --namespace 指定namespace

查看 pod
[root@master ~]# kubectl get pods -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7c79c4bf97-87jv7   1/1     Running   0          74s
nginx-7c79c4bf97-qjh4j   1/1     Running   0          74s
nginx-7c79c4bf97-tq5jx   1/1     Running   0          74s
查看 deployment 的信息
[root@master ~]# kubectl get deploy -n dev
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           3m24s[root@master ~]# kubectl get deploy -n dev -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES         SELECTOR
nginx   3/3     3            3           4m51s   nginx        nginx:latest   app=nginx
  • UP-TO-DATE 成功升级的副本数量

  • AVAILABLE 可用副本的数量

查看 deployment 的详细信息
[root@master ~]# kubectl describe deploy -n dev
Name:                   nginx
Namespace:              dev
CreationTimestamp:      Thu, 30 Oct 2025 15:37:56 +0800
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=nginx
......
删除
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted
[root@master ~]# kubectl get deploy -n dev
No resources found in dev namespace.
[root@master ~]# kubectl get pods -n dev
No resources found in dev namespace.
配置操作
[root@master ~]# vim deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxnamespace: dev
spec:replicas: 3selector:matchLabels:run: nginxtemplate:metadata:labels:run: nginxspec:containers:- image: nginx:latestname: nginxports:- containerPort: 80protocol: TCP
[root@master ~]# vim deploy.yaml
[root@master ~]# kubectl apply -f deploy.yaml 
deployment.apps/nginx created
[root@master ~]# kubectl get deploy -n dev
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           13s
[root@master ~]# kubectl get pods -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6c45cbd8c5-4jb54   1/1     Running   0          31s
nginx-6c45cbd8c5-m8s8h   1/1     Running   0          31s
nginx-6c45cbd8c5-vsv72   1/1     Running   0          31s
删除
[root@master ~]# kubectl delete -f deploy.yaml 
deployment.apps "nginx" deleted
[root@master ~]# kubectl get deploy -n dev
No resources found in dev namespace.
[root@master ~]# kubectl get pods -n dev
No resources found in dev namespace.

五、总结

资源类型作用常用操作
Namespace资源隔离create, get, describe, delete
Pod最小部署单元run, get, describe, delete
Label资源标识与选择label, get -l, --show-labels
DeploymentPod 控制器create deploy, get deploy, delete deploy
http://www.dtcms.com/a/550377.html

相关文章:

  • 网站建设与管理报告书先域名 还是先做网站
  • SQL -- GROUP BY 基本语法
  • 简易 建站做外贸自己建网站
  • 带数据库的网站怎么建收到短信说备案被退回但工信部网站上正常啊
  • 莆田专业建站公司手机怎么建立网站
  • 成都的网站建设开发公司如何看网站是谁做的
  • 彩票网站建设哪家公司好贾汪徐州网站开发
  • PyTorch实战:CV模型搭建全指南
  • Spring Boot 常见性能与配置优化
  • 网站广告文案商务网站的建设阶段包括
  • 老显卡老cpu用vllm推理大模型失败Intel(R) Xeon(R) CPU E5-2643 v2
  • wordpress有中文主题吗qq的seo综合查询
  • [人工智能-大模型-117]:模型层 - 用通俗易懂的语言,阐述循环神经网络的结构
  • Vue响应式原理:从数据定义到视图更新全链路解析
  • 周村网站建设广州沙河一起做网站
  • Jenkins Pipeline 快速开始
  • 临淄关键词网站优化培训中心wordpress get_option array
  • 做那事的网站宁波论坛招聘最新消息
  • 凯里专注网站建设报价广州番禺最新发布
  • 车载软件需求开发与管理 --- 一些对软件需求的看法
  • 部分移动(Partial Move)的使用场景:Rust 所有权拆分的精细化实践
  • 建设门户网站所需wordpress个人博客源码
  • 百度 网站添加宝塔配置wordpress主题
  • 2025 年版 Highcharts vs LightningChart JS:科研大数据可视化库的深度对比
  • 上海网站空间租用app开发一般收费
  • 量化指标解码04:解锁MACD的威力|零轴、背离与多周期共振
  • zabbix 监控进程 日志 主从状态和主从延迟
  • xshell连接kali ssh服务拒绝了密码
  • 【MySQL】--- 视图
  • 【大模型:RAG】--CLIP模型实现多模态检索