【Kubernetes】常用命令全解析:从入门到实战(中)

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、什么是k8s

2、K8s的核心功能

二、资源调度与伸缩命令 

1、资源调度与伸缩命令

1.1、Label(标签)

1.2、Selector(选择器)

2、资源配额与限制

2.1、创建资源配额(ResourceQuota)

2.2、查看资源配额

2.3、创建资源限制(Resource Limits)

2.4、查看Pod的资源限制

2.5、删除资源配额与资源限制

三、网络与安全命令

1、创建与管理Network Policies 

1.1、创建 Network Policy

2.2、基本 Network Policy 规则

2.3、管理 Network Policies

2、安全认证与授权

2.1、配置RBAC

2.2、管理Service Accounts


一、引言

1、什么是k8s

K8s(Kubernetes)可以简单理解为一个容器管理系统,它帮助你在多个机器上高效、可靠地运行和管理“应用容器”。

想象一下,容器就像是一个个小盒子,每个盒子里面装着一个独立运行的应用或服务。Kubernetes的作用,就像一个“仓库管理员”,它负责管理这些盒子,确保它们按需部署、能够自动修复故障并高效地工作。

  • 容器:就像是一个小型应用工厂,里面有你需要的一切(代码、依赖、配置等),它可以快速创建、删除和移动。
  • K8s:就像是一个聪明的机器人,能帮你管理这些工厂,确保它们在任何时候都在正常工作,不会发生停工的情况。

举个例子,如果你有一个网站,它需要用到多个“工厂”(比如数据库、前端、后台服务等),K8s会帮你:

  1. 自动部署:把这些工厂(容器)放到服务器上运行。
  2. 负载均衡:分配流量,确保每个工厂都能高效工作,不会因为流量过大崩溃。
  3. 自我修复:如果某个工厂出了问题(比如服务器坏了),K8s会自动替换或重启它,确保不会影响整体服务。

总的来说,K8s就像是一个智能调度员,帮助你自动化地管理应用程序,避免人工干预,提高效率和稳定性。

2、K8s的核心功能

  • 自动化部署和回滚:K8s能够自动部署和更新应用,同时可以在出现问题时进行回滚,恢复到之前的状态。
  • 负载均衡:它能够自动分配流量到各个容器实例,确保应用的高可用性。
  • 自我修复:K8s能够自动检测故障的容器并重新启动、替换或终止它们,保持应用健康运行。
  • 服务发现和负载均衡:它能够自动为容器分配IP地址并将它们链接到服务中,简化微服务架构的部署。
  • 存储编排:支持将本地存储、云存储或分布式存储挂载到容器中。
  • 自动扩展:可以根据负载自动增加或减少容器的实例数量。
  • 密钥和配置管理:允许存储敏感信息(如密码、API密钥等),并将其传递到容器中。

 

二、资源调度与伸缩命令 

1、资源调度与伸缩命令

1.1、Label(标签)

标签是附加到Kubernetes资源(如Pod、Service、Deployment等)上的键值对。它们用于标识和分类这些资源。标签本身并没有任何业务逻辑,但它们为选择和管理资源提供了重要的信息。

举个例子:

  • Pod可以被赋予标签 app=frontend,表示它是“前端”应用的一部分。
  • 另一个Pod可能有标签 app=backend,表示它是“后端”应用的一部分。

标签是动态的,可以随时添加、修改或删除,灵活性非常高。

给 Pod 添加标签
假设你有一个名为 my-pod 的 Pod,想要给它添加标签 app=frontend

kubectl label pod my-pod app=frontend

如果要修改现有的标签,可以使用相同的命令,kubectl 会更新标签:

kubectl label pod my-pod app=backend


给 Deployment 添加标签
你也可以在创建 Deployment 时或之后添加标签。例如,给名为 my-deployment 的 Deployment 添加 env=production 标签:

kubectl label deployment my-deployment env=production


给 Node 添加标签
例如,为名为 node-1 的节点添加标签 zone=us-east1:

kubectl label node node-1 zone=us-east1

 

 

 

1.2、Selector(选择器)

选择器是用来选择一组具有特定标签的资源的方式。它允许Kubernetes根据标签来筛选出你关心的资源。

选择器主要有两种类型:

  • 等于选择器(Equality-Based Selector):选择符合某个标签键值对的资源。
  • 集合选择器(Set-Based Selector):选择符合标签集合条件的资源。

 

使用 Label Selector 选择 Pods
我们可以通过 kubectl get 命令使用标签选择器来选择特定标签的资源。例如,选择所有标签为 app=frontend 的 Pod:

kubectl get pods -l app=frontend

这将列出所有具有标签 app=frontend 的 Pod。

使用多个标签进行选择
如果你想选择多个标签条件,可以使用逗号分隔多个条件。例如,选择 app=frontendenv=production 的 Pod:

kubectl get pods -l app=frontend,env=production


使用集合选择器
Kubernetes支持集合选择器,允许你使用 In、NotIn、ExistsDoesNotExist 等操作符。例如,选择 env 标签值为 production staging 的 Pod:

kubectl get pods -l 'env in (production,staging)'


或者,选择 env 标签存在但不等于 development 的 Pod:

kubectl get pods -l 'env notin (development)'

2、资源配额与限制

2.1、创建资源配额(ResourceQuota)

资源配额(ResourceQuota)用于限制特定命名空间内可使用的资源总量。可以通过以下步骤在命令行中创建资源配额:

创建资源配额
例如,创建一个资源配额 my-quota,限制命名空间 my-namespace 中的资源使用:

apiVersion: v1
kind: ResourceQuota
metadata:name: my-quotanamespace: my-namespace
spec:hard:requests.cpu: "4"          # 最大请求CPU为4个核心requests.memory: "8Gi"     # 最大请求内存为8Gilimits.cpu: "8"            # 最大限制CPU为8个核心limits.memory: "16Gi"      # 最大限制内存为16Gipods: "10"                 # 最多创建10个Pod

将上面的内容保存为 resource-quota.yaml,然后使用以下命令应用:

kubectl apply -f resource-quota.yaml


通过命令行直接创建资源配额
我们也可以通过命令行直接创建资源配额。以下是一个限制 CPU 和内存请求、限制以及 Pod 数量的资源配额示例:

kubectl create quota my-quota \--namespace=my-namespace \--hard=requests.cpu=4 \--hard=requests.memory=8Gi \--hard=limits.cpu=8 \--hard=limits.memory=16Gi \--hard=pods=10

这个命令会创建一个名为 my-quota 的资源配额,并为命名空间 my-namespace 限制资源使用。

2.2、查看资源配额

查看指定命名空间的资源配额使用情况:

kubectl get resourcequota -n my-namespace

该命令将显示 my-namespace 中的所有资源配额及其当前使用情况。输出会显示每种资源(如 CPU、内存、Pod 数量)的请求和限制的使用量。

查看特定资源配额的详细信息:

kubectl describe resourcequota my-quota -n my-namespace


2.3、创建资源限制(Resource Limits)

资源限制(如 CPU 和内存)通常是为单个 Pod 或容器设置的。你可以在 Pod 的定义文件中为容器指定 requestslimits 来设置资源限制。

在Pod的YAML中配置资源限制

apiVersion: v1
kind: Pod
metadata:name: my-app
spec:containers:- name: my-app-containerimage: my-app-imageresources:requests:memory: "64Mi"     # 请求64MB内存cpu: "250m"        # 请求250m CPU(0.25个CPU核心)limits:memory: "128Mi"    # 限制最多使用128MB内存cpu: "500m"        # 限制最多使用500m CPU(0.5个CPU核心)

将此内容保存为 pod.yaml,并使用以下命令应用:

kubectl apply -f pod.yaml

通过命令行直接设置资源限制
你可以通过 kubectl set resources 命令为现有的 Pod 或 Deployment 设置资源限制。例如,给名为 my-deployment Deployment 设置资源请求和限制:

kubectl set resources deployment my-deployment \--limits=cpu=500m,memory=128Mi \--requests=cpu=250m,memory=64Mi

这个命令会为 my-deployment 中的所有容器设置资源限制。

2.4、查看Pod的资源限制

要查看 Pod 或容器的资源请求和限制,可以使用以下命令:

kubectl describe pod my-app

输出中会包含每个容器的资源请求和限制。

2.5、删除资源配额与资源限制

删除资源配额
如果你不再需要资源配额,可以通过以下命令删除:

kubectl delete resourcequota my-quota -n my-namespace


删除Pod的资源限制
如果你要删除已设置的资源限制,可以使用以下命令:

kubectl set resources pod my-app --limits=cpu=0,memory=0 --requests=cpu=0,memory=0

这个命令将 my-app Pod 中的所有容器的资源限制和请求设置为 0,相当于删除资源限制。

三、网络与安全命令

1、创建与管理Network Policies 

1.1、创建 Network Policy

Network Policy 是一个基于 YAML 文件的资源,通常通过定义一组 ingress(入站) egress(出站)规则来描述。每个规则会指定允许或拒绝的通信流。

创建 Network Policy 示例
以下是一个基本的示例,表示只允许来自特定Pod的流量进入目标Pod:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-frontendnamespace: default
spec:podSelector:matchLabels:app: backend   # 仅作用于标签为 app=backend 的Podingress:- from:- podSelector:matchLabels:app: frontend   # 允许来自标签为 app=frontend 的Pod的流量policyTypes:- Ingress

这个示例中:

  • podSelector 用来选择目标Pod(在此例中,选择标签为 app=backend 的Pod)。
  • ingress 规则限制只有标签为 app=frontend 的Pod才能访问 app=backend 的Pod。
  • policyTypes 声明了该Policy只作用于入站流量(Ingress)。

将此文件保存为 network-policy.yaml 后,可以通过命令行应用:

kubectl apply -f network-policy.yaml

  

2.2、基本 Network Policy 规则

Network Policies 支持以下几种规则:

  • Ingress(入站流量):指定哪些Pod可以向目标Pod发送流量。
  • Egress(出站流量):指定目标Pod可以向哪些外部地址或Pod发送流量。

完整的示例:允许来自特定IP的流量,并允许Pod向外部特定IP地址发送流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-ipnamespace: default
spec:podSelector:matchLabels:app: backend   # 仅作用于标签为 app=backend 的Podingress:- from:- ipBlock:cidr: 192.168.1.0/24  # 允许来自此IP范围的流量egress:- to:- ipBlock:cidr: 203.0.113.0/24  # 允许向此IP范围发送流量policyTypes:- Ingress- Egress

此规则允许:

  • backend 应用接受来自 192.168.1.0/24 网络的流量。
  • backend 应用能够向 203.0.113.0/24 网络发出流量。

2.3、管理 Network Policies

查看所有 Network Policy
要查看当前命名空间中的所有 Network Policy,可以使用:

kubectl get networkpolicy -n <namespace>

例如,查看 default 命名空间中的所有 Network Policies:

kubectl get networkpolicy -n default

查看特定 Network Policy 的详细信息
要查看某个特定 Network Policy 的详细信息,可以使用:

kubectl describe networkpolicy <network-policy-name> -n <namespace>

例如,查看 allow-frontend 的详细信息:

kubectl describe networkpolicy allow-frontend -n default


删除 Network Policy
如果你不再需要某个 Network Policy,可以通过以下命令删除:

kubectl delete networkpolicy <network-policy-name> -n <namespace>

例如,删除 allow-frontend Network Policy:

kubectl delete networkpolicy allow-frontend -n default

  

2、安全认证与授权

2.1、配置RBAC

创建 Role 和 RoleBinding(命名空间级别)
假设你需要授予用户 jane 在 default 命名空间内查看 Pod 列表的权限。

创建 Role
Role 定义了用户在某个命名空间中对资源的权限。例如,授予查看 Pod 的权限。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list"]

保存为 role-pod-reader.yaml 后,使用以下命令创建角色:

kubectl apply -f role-pod-reader.yaml

创建 RoleBinding
将 Role 绑定到用户 jane 上,允许其访问 default 命名空间中的 Pods。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-podsnamespace: default
subjects:
- kind: Username: "jane"  # 绑定到用户 janeapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io

保存为 rolebinding-pod-reader.yaml 后,使用以下命令创建角色绑定:

kubectl apply -f rolebinding-pod-reader.yaml

此时,用户 jane 就能查看 default 命名空间中的 Pods。

  

创建 ClusterRole 和 ClusterRoleBinding(集群级别)
如果你需要在集群范围内授予某些权限,可以使用 ClusterRole 和 ClusterRoleBinding。

创建 ClusterRole
例如,你可以创建一个 ClusterRole,授予用户在整个集群中列出所有命名空间的 Pods 的权限:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: cluster-pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "list"]

保存为 clusterrole-pod-reader.yaml 后,使用以下命令创建 ClusterRole:

kubectl apply -f clusterrole-pod-reader.yaml


创建 ClusterRoleBinding
将 ClusterRole 绑定到用户 jane,使其可以在整个集群范围内列出 Pods:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: bind-cluster-pod-reader
subjects:
- kind: Username: "jane"  # 绑定到用户 janeapiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: cluster-pod-readerapiGroup: rbac.authorization.k8s.io

保存为 clusterrolebinding-pod-reader.yaml 后,使用以下命令创建 ClusterRoleBinding:

kubectl apply -f clusterrolebinding-pod-reader.yaml

此时,用户 jane 将能够在集群内查看所有命名空间的 Pods。

  

2.2、管理Service Accounts

创建 Service Account
通过 kubectl 命令可以创建一个 Service Account。在 Kubernetes 中,Service Account 通常是与命名空间相关的。以下是如何在某个命名空间中创建一个 Service Account。

kubectl create serviceaccount <service-account-name> -n <namespace>

例如,在 default 命名空间中创建一个名为 my-service-account 的 Service Account:

kubectl create serviceaccount my-service-account -n default


查看 Service Account
要查看某个命名空间中的所有 Service Accounts,可以使用以下命令:

kubectl get serviceaccounts -n <namespace>

例如,查看 default 命名空间中的所有 Service Accounts:

kubectl get serviceaccounts -n default

要查看某个特定 Service Account 的详细信息:

kubectl describe serviceaccount <service-account-name> -n <namespace>

例如,查看 my-service-account 的详细信息:

kubectl describe serviceaccount my-service-account -n default


删除 Service Account
要删除某个 Service Account,可以使用以下命令:

kubectl delete serviceaccount <service-account-name> -n <namespace>

例如,删除 my-service-account:

kubectl delete serviceaccount my-service-account -n default

  

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18045.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ComfyUI]腾讯开源黑科技Sonic,插件更新,更加可控啦

一、Sonic更新介绍 大家还记得我前分享过腾讯开源的Sonic这个项目吧&#xff0c;通过照片声音就可以生成非常不错的数字人开口说话的视频。 当时我就挺满意的&#xff0c;不过那时候输出还只能输出正方形的视频&#xff0c;这点就让我留有遗憾。 今天我再去翻作者的项目官网…

设计模式Python版 命令模式(上)

文章目录 前言一、命令模式二、命令模式示例 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对象之间的组合&…

微服技术栈之Spring could gateway

0 前言 之前使用到的gateway技术栈 &#xff0c;光靠记忆可能没有记住那么多的&#xff0c;gateway当今比较主流的网关技术栈了。说到gateway&#xff0c;不得不提及Zuul&#xff0c;而Zuul已经被淘汰了。 1 概述 Could全家桶有个很重要的组件就是网关&#xff0c;在1.X版本…

上课啦 | 2月17日软考高项【5月备考班】

相关文章推荐 福利&#xff1a;【软考-电子书】赠送 | 信息系统项目管理师教程 软考证书以考代评评定的职称是什么&#xff1f;聘任步骤&#xff1f; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 软考 高 项 课程&#xff1a;2月17日开课 | 软考-高…

小米 R3G 路由器刷机教程(Pandavan)

小米 R3G 路由器刷机教程&#xff08;Pandavan&#xff09; 一、前言 小米 R3G 路由器以其高性价比和稳定的性能备受用户青睐。然而&#xff0c;原厂固件的功能相对有限&#xff0c;难以满足高级用户的个性化需求。刷机不仅可以解锁路由器的潜能&#xff0c;还能通过第三方固…

【电脑】u盘重装win7

u盘必须8GB以上 1. CPU型号 首先查看CPU的型号看看到底能不能装win7 2. 下载光盘映像文件 网址 看电脑是多少位的机器(32位下载x86 64位下载x64) 一共是这么多个版本按需下载对应的版本 电脑小白推荐无脑下载旗舰版 将链接复制到迅雷进行下载 3. 下载软碟通 网址 下…

wps或office的word接入豆包API(VBA版本)

直接上代码&#xff0c;由于时间匆忙&#xff0c;以后写个详细的教程 #If VBA7 ThenPrivate Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As…

Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)

#想cry 好想cry 目录 1 全局唯一id 1.1 自增ID存在的问题 1.2 分布式ID的需求 1.3 分布式ID的实现方式 1.4 自定义分布式ID生成器&#xff08;示例&#xff09; 1.5 总结 2 优惠券秒杀接口实现 3 单体系统下一人多单超卖问题及解决方案 3.1 问题背景 3.2 超卖问题的…

USB Flash闪存驱动器安全分析(第一部分)

翻译原文链接&#xff1a;Hacking Some More Secure USB Flash Drives (Part I) | SySS Tech Blog 文章翻译总结&#xff1a;文章对一些具有AES硬件加密的USB闪存驱动器的网络安全分析研究。研究由SySS的IT安全专家Matthias Deeg进行&#xff0c;他在2022年初发现了几个安全漏…

[前端] axios网络请求二次封装

一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用&#xff0c;提高可维护性。 —这个有两个方案&#xff1a;一个是二次封装一个是实例化。&#xff08;设置一些公共的参数&#xff0c;然后进行请求&#xff09; 为什么可以解决代码的复用&#xff1a; 这是…

DeepSeek助力:打造属于你的GPTs智能AI助手

文章目录 一、环境准备1.安装必要的工具和库2. 选择合适的开发语言 二、核心技术选型1. 选择适合的AI框架 三、功能实现1. 文本生成与对话交互2. 代码生成与自动补全3. 数据分析与报告生成 四、案例实战1. 搭建一个简单的聊天机器人2. 创建一个代码生成器 五、总结与展望1. 当前…

网络基础 【UDP、TCP】

1.UDP 首先我们学习UDP和TCP协议 要从这三个问题入手 1.报头和有效载荷如何分离、有效载荷如何交付给上一层的协议&#xff1f;2.认识报头3.学习该协议周边的问题 UDP报头 UDP我们先从示意图来讲解&#xff0c;认识报头。 UDP协议首部有16位源端口号&#xff0c;16位目的端…

推荐的、好用的线性稳压器

前言 内容来自B站up主-工科男孙老师的视频 视频内容&#xff1a;测评网友推荐的线性稳压器&#xff0c;以及这些线性稳压器的应用场景。视频链接&#xff1a;除了1117&#xff0c;还有哪些更好用的线性稳压器&#xff1f; 1、1117的缺点 体积太大&#xff0c;浪费主板的空间不…

2025最新出炉--前端面试题九

文章目录 1. Vue 和 React 的使用经验对比2. vue 的 computed 和 watch 有什么区别3. v-model 平时你都怎么使用4. import 和 require 之间什么区别5. 说一下 vue 的缓存组件6. vue3.0 为什么使用 proxy 拦截数据7. 能讲讲 vuex 吗, 刷新页面会怎样8. http1.1 和 http2.0 之间什…

rancher on k3s

本次部署采用3节点的etcd服务2master节点的k3s使用helm部署的ranchervip(keepalived) 一、安装etcd服务 # 准备 3 个节点部署 etcd cd /hskj/tmp wget https://github.com/etcd-io/etcd/releases/download/v3.3.15/etcd-v3.3.15-linux-amd64.tar.gz tar xzvf etcd-v3.3.15-…

NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略

作者&#xff1a;来自 vivo 互联网算法团队- Huang Minghui 本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略。首先介绍了 NLLB-200 的背景、数据、分词器和模型&#xff0c;以及其与 LLM&#xff08;Large Language Model&#xff09;的异同和协同关系。接着…

无人机图像拼接数据的可视化与制图技术:以植被监测为例

无人机技术在生态环境监测中的应用越来越广泛&#xff0c;尤其是在植被监测领域。通过无人机获取的高分辨率影像数据&#xff0c;结合GIS技术&#xff0c;可以实现对植被覆盖、生长状况等的精确监测与分析。本文将通过一个实际案例&#xff0c;详细讲解无人机图像拼接数据的可视…

ONES 功能上新|ONES Copilot、ONES TestCase、ONES Wiki 新功能一览

ONES Copilot 支持基于当前查看的工作项相关信息&#xff0c;利用 AI 模型&#xff0c;在系统中进行相似工作项的查找&#xff0c;包括基于已关联工作项的相似数据查找。 应用场景&#xff1a; 在查看工作项时&#xff0c;可利用 AI 模型&#xff0c;基于语义相似度&#xff0c…

基于带通滤波的camera脏污检测算法可以完全替代imatest

1.概要 脏污检测算法&#xff0c;基于opencv c实现&#xff0c;便于模组厂快速集成到软件工具中&#xff0c;适用于camera模组厂脏污拦截&#xff0c;特别是对浅脏污具备很好的定位效果&#xff1b;便于画质评价工程师了解camera模组制程的问题提出改善方向。 2.技术介绍 下图…

后勤数据源定制主控室

场景&#xff1a;在学习了解后勤数据源过程中&#xff0c;看到觉得有用的note&#xff0c;分享给大家。 1779063 - 常见问题&#xff1a;关于 LO 数据提取 - 定制主控室&#xff08;事务 LBWE&#xff09; 1.问题&#xff1a; 是否需要为每个应用程序组件下的每个数据源添加池…