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

devtools/2025/2/15 12:05:36/

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

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

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

目录

一、引言

k8s-toc" style="margin-left:40px;">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


一、引言

k8s">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.ppmy.cn/devtools/159041.html

相关文章

【C++】RBTree(红黑树)模拟实现

文章目录 1.红黑树的概念2.红黑树的性质3.红黑树的结点4.insert函数&#xff08;插入结点&#xff09;5.左旋、右旋6.总代码 后续有时间会增加erase 1.红黑树的概念 红黑树是一种自平衡的二叉搜索树。每个节点额外存储了一个 color 字段 (“RED” or “BLACK”)&#xff0c; …

k8s优雅操作pod容器组

k8s优雅操作pod容器组 回退备份 kubectl get deploy deployName -o yaml>>deployName-bak-date "%Y-%m-%d".yaml获取副本数 replicasecho | kubectl get -o template deploy/deployName --template{{.spec.replicas}}停止容器组 kubectl scale deployment …

第J7周:对于ResNeXt-50算法的思考

目录 FROM思考 FROM &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 &#x1f4cc;你需要解决的疑问&#xff1a;这个代码是否有错&#xff1f;对错与否都请给出你的思考 &#x1f4cc;打卡要求&#xff1a…

XSS 常用标签及绕过姿势总结

XSS 常用标签及绕过姿势总结 一、xss 常见标签语句 0x01. 标签 <a href"javascript:alert(1)">test</a> <a href"x" onfocus"alert(xss);" autofocus"">xss</a> <a href"x" onclickeval(&quo…

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…

浅谈无人机群技术的作战应用与战略意义

近年来&#xff0c;无人机技术在军事领域的应用迅速崛起&#xff0c;成为现代战争中不可或缺的力量倍增器。无人机群技术&#xff0c;即通过集群控制系统使多个无人机在相同或不同任务环境下协同工作&#xff0c;形成一种集体作战、智能化操作的新模式&#xff0c;更是将这一趋…

汽车油箱行业分析

一、行业现状 汽车油箱行业作为汽车产业的重要组成部分&#xff0c;主要负责燃油的储存、转移和使用&#xff0c;是发动机的动力来源。随着汽车市场的不断扩大和消费者对汽车性能要求的提高&#xff0c;汽车油箱行业也在不断创新和升级。目前&#xff0c;汽车油箱行业正朝着轻…

Python的web框架Flask适合哪些具体的应用开发?

Flask 适用的具体应用及实现案例代码 Flask 是一个轻量级的 Web 应用框架,以其简洁性和灵活性而广受欢迎。以下是 Flask 适合的具体应用场景及相关的实现案例代码: 1. 小型网站或博客 由于 Flask 的简洁性和易于使用的特性,它非常适合用来搭建个人博客或者小型的企业网站…