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

Kubernetes对象基础操作

基础操作

文章目录

  • 基础操作
    • 一、创建Kubernetes对象
      • 1.使用指令式命令创建Deployment
      • 2.使用指令式对象配置创建Deployment
      • 3.使用声明式对象配置创建Deployment
    • 二、操作对象的标签
      • 1.为对象添加标签
      • 2.修改对象的标签
      • 3.删除对象标签
      • 4.操作具有指定标签的对象
    • 三、操作名称空间
    • 四、kubectl常用命令

一、创建Kubernetes对象

在master节点操作

1.使用指令式命令创建Deployment

kubectl create deployment nginx --image nginx:1.14.2
 	//基于nginx镜像创建deployment
kubectl get deployment	//查看该deployment是否创建成功,可以发现存在了一个副本
kubectl get pod		//查看pod进行验证


kubectl delete deployment nginx		//删除对象
kubectl get deployment		//再次验证
 kubectl get pod

在这里插入图片描述

为什么创建deployment后会默认生成pod

因为当你创建一个Deployment时,实际上是告诉Kubernetes(一个容器编排平台)你需要运行多少个实例(副本)的应用程序
k8s为了去运行应用程序 会默认生成pod以运行

2.使用指令式对象配置创建Deployment

vi nginx-deployment.yaml

# 必需字段,声明对象使用的API版本
apiVersion: apps/v1
# 必需字段,声明要创建的对象的类别
kind: Deployment
# 必需字段,定义对象的元信息,包括对象名称、使用的标签等
metadata:
  name: nginx-deployment
# 必需字段,声明对象的期望状态,如使用的镜像、副本数等
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3    # 运行3个与该模板匹配的Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        
 kubectl create -f nginx-deployment.yaml //基于yaml配置文件创建Deployment
 kubectl get deployment		//按照yaml文件的定义,创建了3个副本的deployment和pod
 kubectl get pod		

 kubectl delete -f nginx-deployment.yaml 	//基于配置文件删除deployment
 kubectl get deployment
 kubectl get pod

在这里插入图片描述

可以看到在我删除deployment后 pod不会马上被删除 
这是因为 Pod 的生命周期中,Kubernetes 会先发送一个 SIGTERM 信号给 Pod 中的容器,通知它们开始优雅地退出,然后等待一段时间,最后才会发送 SIGKILL 信号强制销毁 Pod

3.使用声明式对象配置创建Deployment

vi nginx-deployment.yaml 

# 必需字段,声明对象使用的API版本
apiVersion: apps/v1
# 必需字段,声明要创建的对象的类别
kind: Deployment
# 必需字段,定义对象的元信息,包括对象名称、使用的标签等
metadata:
  name: nginx-deployment
# 必需字段,声明对象的期望状态,如使用的镜像、副本数等
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 4    # 运行4个与该模板匹配的Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
 kubectl apply -f nginx-deployment.yaml 	//应用修改后的配置
 kubectl get deployment
 kubectl get pod

 kubectl delete -f nginx-deployment.yaml 
 kubectl get deployment
 kubectl get pod

在这里插入图片描述
在这里插入图片描述

kubectl create即(指令式命令)和kubectl apply(声明式命令)的区别在于前者只能创建对象,而后者可以创建和更新对象。如果对象已经启动并运行,并且在yaml配置文件中做了更改,此时使用kubectl create命令将失败,但使用kubectl apply命令则会更新对象。kubectl apply只能创建或更新对象,不能删除对象,删除对象使用kubectl delete。

二、操作对象的标签

1.为对象添加标签

kubectl run nginx-a --image=nginx -l app=nginx	//创建名为nginx-a的Pod并为其添加标签app=nginx

 vi nginx-label.yaml 	//编写Pod配置文件nginx-label.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-b
  labels:                 # 为Pod设置两个Label    
    app: nginx    
    env: prod
spec:
  containers:
  - name: nginx          
    image: nginx
//此配置文件定义名为nginx-b的Pod并为其添加两个标签app=nginx、env=pod。

 kubectl create -f nginx-label.yaml 	//基于配置文件创建pod
 kubectl get pod --show-labels	//添加标签后,查看pod的标签带上选项,可以发现标签
 kubectl label pod nginx-a env=test version=0.9	//对于现有的pod,可以直接使用kubectl label添加标签
 kubectl get pod -L env,version		//可以通过-L选项来查询指定键的标签

在这里插入图片描述

在这里插入图片描述

2.修改对象的标签

对于对象的现有标签,使用kubectl label命令加上–overwrite选项即可修改
kubectl label pod nginx-a env=debug --overwrite
kubectl get pod nginx-a --show-labels

在这里插入图片描述

3.删除对象标签

使用kubectl label命令时在标签键后面加一个减号即可删除对象的指定标签
 kubectl label pod nginx-a version-
 kubectl get pod nginx-a --show-labels

在这里插入图片描述

4.操作具有指定标签的对象

可以通过-l选项来筛选具有指定标签的对象
 kubectl delete pod -l app=nginx
 kubectl get pod 

在这里插入图片描述

三、操作名称空间

名称空间是什么:
名称空间(Namespace)用于将集群中的资源划分为逻辑组,以便更好地管理和隔离不同的项目 
例如,你可以在一个名称空间中有一个名为 "my-app" 的服务,而在另一个名称空间中也有一个名为 "my-app" 的服务,它们可以独立运行,不会相互干扰。
kubectl get namespaces	//查看集群中所有名称空间列表
NAME              STATUS   AGE
default           Active   54m		//默认名称空间
kube-node-lease   Active   54m		//用于与各节点相关的租约对象
kube-public       Active   54m		//主要由集群使用
kube-system       Active   54m		//系统创建对象所用的名称空间
 

vi test-ns.yaml	//可以通过编写配置文件创建名称空间
apiVersion: v1 
kind: Namespace 
metadata: 
  name: test-ns  
  
kubectl create -f test-ns.yaml 		//执行基于yaml文件创建名称空间

在这里插入图片描述

 kubectl create namespace test2		//也可以通过命令直接创建名称空间
 kubectl get namespaces

在这里插入图片描述

//如果不明确指定,将操作默认的名称空间default。需要在特定的名称空间操作时,可以在kubectl命令中通过-n(或--namespace)选项指定。

 kubectl create -f nginx-deployment.yaml -n test1	//基于nginx的yaml文件在test1中创建
 kubectl get deployment -n test1	//查看该deployment及其关联的pod
 kubectl delete -f nginx-deployment.yaml -n test1	//删除也需要指定名称空间

在这里插入图片描述

四、kubectl常用命令

1. 查询资源
(1) 通用查询
kubectl get [type] [name] [flags]
示例:
列出所有 Pod:
kubectl get pods

查看某个命名空间的所有 Pod:
kubectl get pods -n <namespace>

查看所有命名空间的 Pod:
kubectl get pods --all-namespaces

查看某个 Deployment:
kubectl get deployment <deployment-name>

(2) 详细描述资源
kubectl describe [type] [name]
示例:
查看 Pod 的详细信息:
kubectl describe pod <pod-name>

(3) 使用 JSONPath 查询特定字段
kubectl get [type] -o jsonpath='{path}'
示例:
获取某命名空间的服务列表:
kubectl get service -n my-namespace -o jsonpath='{.items[*].metadata.name}'

2. 创建资源
(1) 从 YAML 文件创建
kubectl create -f [filename]
示例:
从 nginx-deployment.yaml 文件创建资源:
kubectl create -f nginx-deployment.yaml

(2) 直接在命令行创建
kubectl create [type] [name]
创建单个 Pod:
kubectl create deployment nginx --image=nginx

(3) 使用自动扩容
kubectl autoscale deployment <deployment-name> --min=<min> --max=<max>
自动扩展 Deployment 名为 foo,最小 2,最大 10:
kubectl autoscale deployment foo --min=2 --max=10

3. 更新资源
(1) 使用 YAML 文件更新
kubectl apply -f [filename]
示例:
更新 Deployment:
kubectl apply -f deployment.yaml

(2) 滚动更新镜像版本
kubectl set image deployment/<deployment-name> <container-name>=<new-image>
示例:
更新 Deployment 的镜像:
kubectl set image deployment/frontend www=image:v2

(3) 强制替换资源
kubectl replace --force -f [filename]
示例:
强制替换 Pod 资源:
kubectl replace --force -f ./pod.json

4. 删除资源
kubectl delete [type] [name] [flags]

示例:
删除某个命名空间的 Pod:
kubectl delete pod <pod-name> -n <namespace>

立即强制删除 Pod:
kubectl delete pod <pod-name> --grace-period=0 --force

5. 与运行时交互
(1) 查看日志
kubectl logs [pod-name] [-c container-name] [--previous]
示例:
查看某个 Pod 的日志:
kubectl logs my-pod

(2) 执行命令
kubectl exec [pod-name] [-c container-name] -- [command]
示例:
在容器内执行 ls 命令:
kubectl exec my-pod -c my-container -- ls /

(3) 转发端口
kubectl port-forward [pod-name] [local-port]:[remote-port]
示例:
将本地端口 5000 转发到 Pod 的端口 6000:
kubectl port-forward my-pod 5000:6000

6. 其他常用操作
(1) 进入上下文或命名空间
kubectl config use-context <context-name>
kubectl config set-context --current --namespace=<namespace>
示例:
切换到默认命名空间 default:
kubectl config set-context --current --namespace=default

(2) 查看集群信息
kubectl cluster-info
kubectl top pod
kubectl top node
示例:
查看集群节点的资源使用情况:
kubectl top node

(3) 探索 API 资源
kubectl api-resources
示例:
列出所有支持的资源类型:
kubectl api-resources
http://www.dtcms.com/a/98264.html

相关文章:

  • 现代几何风海报标签徽标logo设计psai衬线英文字体安装包 Myfonts – Nexa Serif Font Family
  • 精通React JS中的API调用:示例指南
  • RAG基建之PDF解析的“无OCR”魔法之旅
  • ESP-01模块连接手机热点问题及解决方法
  • nacos 外置mysql数据库操作(docker 环境)
  • 如何迁移AxureCloud到新服务器?
  • Jenkins插件安装失败如何解决
  • 惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”
  • Vue 中render函数的作用,如何使用它进行更灵活的组件渲染?
  • 代码随想录算法训练营第四十六天|回文子串专题: 647. 回文子串、516.最长回文子序列
  • DSP+AI综合应用案例1——三种波形识别(预告)
  • java网盘项目 目前 文件有分享表 文件夹也要创建分享表吗
  • 伯恩茅斯 vs 曼城
  • Java 输入流到输出流
  • 开发过程中需要安装的浏览器插件
  • 【学Rust写CAD】17 通用2D仿射变换矩阵结构体(matrix/generic.rs)
  • keil中文注释出现乱码怎么解决
  • Selenium自动化测试中常见报错类型及解决方案
  • 【Qt】三种操作sqlite3的方式及其三种多表连接
  • 总结PostgreSQL创建数据库失败的解决办法
  • SQL语句及其应用(中)(DQL语句之单表查询)
  • 机器学习的一百个概念(1)单位归一化
  • java项目之基于ssm的乡镇自来水收费系统(源码+文档)
  • 签名计算:对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)【java版本、JS(Vue)、iOS版本的实现】
  • LocalDateTime序列化总结
  • 接龙数列(最长上升 动规)
  • 第十六章 常用算法
  • 自动化与智能化的认知差异
  • 【即插即用涨点模块-卷积】SPDConv空间深度卷积,助力小目标与低分辨有效涨点【附源码+注释】
  • 28_跨域