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. 结对作业-stage_2

    见队友博客:结对编程-stage_2

  2. 面试官:Java中线程是按什么顺序执行的?

    摘要:Java中多线程并发的执行顺序历来是面试中的重点,掌握Java中线程的执行顺序不仅能够在面试中让你脱颖而出,更能够让你在平时的工作中,迅速定位由于多线程并发问题导致的"诡异" ...

  3. 美团点评技术专家 帮你快速上手跨平台开发框架Flutter

    Flutter并没有开创新的概念,它背后的框架原理和底层设计思想,与原生Android/iOS开发并没有本质区别,甚至从React.Native中吸收了不少优秀的设计理念. Flutter是Googl ...

  4. MySQL数据库高级一:架构介绍

    两天半就可以 严禁使用 精通 在简历上 了解的越多,越比他人有优势 linux的mysql需要使用中文字符集那么就要修改配置文件 1.mysql的linux版 安装和卸载不说了 2.逻辑架构 总体概况 ...

  5. 深入剖析共识性算法 Raft

    一. Raft简介 1.1 Raft简介 Raft 是一种为了管理日志复制的分布式一致性算法.Raft 出现之前,Paxos 一直是分布式一致性算法的标准.Paxos 难以理解,更难以实现.Raft ...

  6. DevEco Device Tool 2.1 Beta1 的Hi3861在Windows平台的编译体验

    DevEco Device Tool迎来了2.1 Beta1,其中的亮点之一是:支持Hi3861开发板的源码在Windows平台编译.带着浓厚的兴趣,第一时间做了一次体验. 首先在官网下载" ...

  7. JavaScript 简写技巧

    1. 声明变量 //普通写法 let x; let y = 20; //简写 let x, y = 20; 2. 给多个变量赋值 //普通写法 let a, b, c; a = 5; b = 8; c ...

  8. python 函数基本内容

    1.什么是函数? 函数就是盛放代码的容器,把实现某一功能的一组代码丢到一个函数中就做成了一个小工具具备某一功能的工具->函数事先准备工具的过程->函数的定义遇到应用场景拿来就用->函 ...

  9. 在Bootstrap开发框架基础上增加WebApi+Vue&Element的前端

    基于Metronic的Bootstrap开发框架是我们稍早一点的框架产品,界面部分采用较新的Bootstrap技术,框架后台数据库支持Oracle.SqlServer.MySql.PostgreSQL ...

  10. Java双刃剑之Unsafe类详解

    前一段时间在研究juc源码的时候,发现在很多工具类中都调用了一个Unsafe类中的方法,出于好奇就想要研究一下这个类到底有什么作用,于是先查阅了一些资料,一查不要紧,很多资料中对Unsafe的态度都是 ...