K8S的资源管理

管理K8S资源的三种基本方法:

  • 陈述式资源管理方法-使用cli工具进行管理。
  • 声明式资源管理方式-主要依耐资源配置清单。
  • GUI式资源管理方法-主要依耐图形界面。

陈述式资源管理方法

1.1 查看名称空间

kubectl get namespace
kubectl get ns # 查看名称空间中的所有资源,不带-n默认就是查询default中的资源
kubectl get all -n default

1.2 创建名称空间

kubectl create namespace app

1.3 删除名称空间

# 删除名称空间会删除里面的所有资源

kubectl delete namespace app

app 名称空间名称

管理Deployment资源

Replica Set ------------------------------ 副本集

Deployment为PodReplica Set(升级版的 Replication Controller)提供声明式更新。

你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

注意:您不该手动管理由 Deployment 创建的 Replica Set,否则您就篡越了 Deployment controller 的职责!下文罗列了 Deployment 对象中已经覆盖了所有的用例。如果未有覆盖您所有需要的用例,请直接在 Kubernetes 的代码库中提 issue。

典型的用例如下:

  • 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
  • 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
  • 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
  • 扩容Deployment以满足更高的负载。
  • 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
  • 根据Deployment 的状态判断上线是否hang住了。
  • 清除旧的不必要的 ReplicaSet。

2.1 创建deployment

kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.17.9 -n kube-public

nginx-dp    # 创建的名字
--image # 需要镜像
-n # 创建在那个名称空间 kubectl get pods -n kube-public -o wide -o wide # 以扩展的方式查看

2.2 查看deployment

kubectl get deployment

kubectl get deployment -n kube-public

-o wide    # 查看扩展信息

2.3 删除deployment

kubectl delete deployment nginx-dp -n kube-public

2.4 删除pod资源~重启

kubectl delete pod <pod-name> -n namespace

kubectl delete deploy nginx-dp -n kube-public
# 如果删除了pod,没有删除控制器,控制器会让pod达到一个预设置的状态,所以pod会自动的拉起来。这也是重启pod的一种方法。 # 强制删除
kubectl delete pod nginx-ds-trrwk --grace-period=0 --force

强制删除

kubectl delete pod nginx-ds-trrwk --grace-period=0 --force

管理service资源

1.现在可以看到创建的pod IP是172.7.22.3

2.当我们使用 kubectl delete pod nginx-dp -n kube-public 命令,删除pod之后再次查看,发现pod已经重新调度到了新的节点上面,而且pod的IP也更改了。

      在实际应用中如果是pod挂了,IP地址发生了改变,这样就会影响业务。所以`service`资源就是来解决这个问题的。

3.1 创建service资源

# 创建一个service资源,暴露一个端口。提供固定的业务访问接口。
kubectl expose deployment nginx-dp --port=80 -n kube-public #把nginx-dp的副本数改为2
kubectl scale deployment nginx-dp --replicas=2 -n kube-public scale # Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job
# 设置一个新的deployment、副本数、Replication Controller。

更改为了两个pod

创建的service资源,并且提供了一个CLUSTER-IP ----------192.168.145.91,这样不管是pod的IP怎么变化始终service提供的接口IP是不会变化的。

底层原理,通过LVS进行转发,同时还起到了负载均衡的效果。

3.2 查看svc

kubectl describe service -n kube-public

kubectl describe svc -n kube-public

describe    # 显示详细的信息

总结

陈述式资源管理方法可以满足90%以上的资源管理需求,但它的缺点也很明显:

  • 命令冗长
  • 特定场景下,无法实现需求
  • 对资源增、删、查操作比较容易,改的话就非常不方便。

声明式资源管理方法

声明式资源管理方法,使用-----资源配置清单(yaml\json)

获取资源配置请单

[root@hdss7-21 ~]# kubectl get svc nginx-dp -n kube-public -o yaml

apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2021-04-13T07:21:39Z"
labels:
app: nginx-dp
name: nginx-dp
namespace: kube-public
resourceVersion: "40542"
selfLink: /api/v1/namespaces/kube-public/services/nginx-dp
uid: 92efaf9c-0af4-4576-ad03-12cec6fdfb35
spec:
clusterIP: 192.168.145.91
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-dp
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {} # 必须要有的三个段
apiVersion:
kind:
metadata:
spec: # 查看帮助文档
kubectl explain deployment.kind

使用资源配置清单暴露service接口

cat>>nginx-ds-svc.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ds
name: nginx-ds
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
type: ClusterIP
EOF # 应用资源配置清单
kubectl apply -f nginx-ds-svc.yaml # 查看资源
kubectl get svc nginx-ds -o wide

离线更改service暴露的端口

vi nginx-ds-svc.yaml

apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ds
name: nginx-ds
namespace: default
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
type: ClusterIP [root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml
service/nginx-ds configured

在线更改

kubectl edit svc nginx-ds

删除资源配置

陈述式删除

kubectl delete svc nginx-ds

声明式

kubectl delete -f nginx-ds-svc.yaml

K8S的资源管理的更多相关文章

  1. k8s学习-资源管理

    在云计算领域,资源可被分为计算资源.网络资源.存储资源三大类,也可被分别称作为计算云.网络云.存储云.在以容器为核心的云平台上,应用容器镜像也是一种资源. 一.计算资源管理 计算资源在云平台上主要指应 ...

  2. K8S集群技术

    1.快速部署K8S环境 k8s-m :10.0.0.11   k8s-n1 :10.0.0.12   k8s-n2 :10.0.0.13 2.所有节点安装docker环境及依赖 2.1 上传docke ...

  3. linux 部署

    一.d2 安装之后的配置 centos系统安装后的基本配置: .常用软件安装: yum install -y bash-completion vim lrzsz wget expect net-too ...

  4. 轻松加愉快的 Kubernetes 安装教程

    轻松加愉快的 Kubernetes 安装教程 马哥Linux运维 2 days ago 作者:无聊的学习者 来源:见文末 在国内安装 K8S,一直是大家很头痛的问题,各种麻烦,关键是还不知道需要下载什 ...

  5. 二进制部署kubernetes集群(下篇)

    1.k8S核心资源管理方法 1.1.陈述式资源管理方法 1.1.1.管理名称空间资源 1.1.1.1.查看名称空间 [root@hdss7-21 ~]# kubectl get namespace N ...

  6. 多云容器编排 Karmada-Operator 实践

    作者:vivo 互联网服务器团队-Zhang Rong Karmada作为开源的云原生多云容器编排项目,吸引了众多企业共同参与项目开发,并运行于生产环境中.同时多云也逐步成为数据中心建设的基础架构,多 ...

  7. 2.K8S的核心资源管理方法

    目录 1.1陈述式资源管理方法 1.1.1.管理名称空间资源 1.1.2.管理Deployment资源 1.1.3.管理Service资源 1.1.4.kubectl用法总结 1.2.声明式资源管理方 ...

  8. k8s入坑之路(13)kubernetes重要资源(namespace隔离 resources资源管理 label)

    Namespace --- 集群的共享与隔离 语言中namespace概念 namespace核心作用隔离 以上是隔离的代码.namespace隔离的是: 1.资源对象的隔离:Service.Depl ...

  9. 从零开始入门 K8s | Kubernetes 调度和资源管理

    作者 | 子誉  蚂蚁金服高级技术专家 关注"阿里巴巴云原生"公众号,回复关键词"入门",即可下载从零入门 K8s 系列文章 PPT. Kubernetes 调 ...

随机推荐

  1. MindSpore函数拟合

    技术背景 在前面一篇博客中我们介绍过基于docker的mindspore编程环境配置,这里我们基于这个环境,使用mindspore来拟合一个线性的函数,演示一下mindspore的基本用法. 环境准备 ...

  2. Leedcode算法专题训练(贪心)

    1. 分配饼干 455. 分发饼干 题目描述:每个孩子都有一个满足度 grid,每个饼干都有一个大小 size,只有饼干的大小大于等于一个孩子的满足度,该孩子才会获得满足.求解最多可以获得满足的孩子数 ...

  3. Spring (三)SpringAoP

    1.Spring 的 AOP 简介 1.1 什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能 ...

  4. python基础(补充):递归的深度

    我们在正经人谁用递归呀一节中,简单的讨论了python中的递归 相信用过python递归的朋友可能都碰到过: RecursionError: maximum recursion depth excee ...

  5. 如何查看spark版本

    使用spark-shell命令进入shell模式

  6. Salesforce学习之路(一)几个简单概念

    Salesforce是一款非常强大的CRM(Customer Relationship Management)系统,国外企业使用十分频繁,而国内目前仅有几家在使用(当然,国内外企使用的依旧较多),因此 ...

  7. C语言-字符串函数的实现(二)之strcpy

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  8. ASP.NET CORE使用WebUploader对大文件分片上传,并通过ASP.NET CORE SignalR实时反馈后台处理进度给前端展示

    本次,我们来实现一个单个大文件上传,并且把后台对上传文件的处理进度通过ASP.NET CORE SignalR反馈给前端展示,比如上传一个大的zip压缩包文件,后台进行解压缩,并且对压缩包中的文件进行 ...

  9. 2020北航OO第二单元总结

    2020北航OO第二单元总结 前言 本单元考察基于多线程的电梯调度问题,成功让我从一个多线程小白到了基本掌握了使用锁来控制线程安全的能力,收获颇多(充分体验了迷茫地de一个又一个死锁bug的痛苦). ...

  10. linux删除文件空间不释放问题解决

    目录 场景描述 原因 解决方法 在线清空文件 场景描述 某天,收到Prometheus报警,生产中某台机器出现磁盘空间不足报警,该台服务器是mysql其中一台从库,远程登录到该服务后,排查磁盘空间的原 ...