【Kubernetes】资源管理(命令)总结

news2024/11/27 4:38:20

在这里插入图片描述

kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速 启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的 容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式 找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动 实现请求的负载均衡
  • 版本回退:如果发现新发布的程序版本有问题,可以立即 回退到原来的版本
  • 存储编排:可以根据容器自身的需求 自动创建存储卷

一、资源管理介绍

在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。

  • kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务。所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。
  • kubernetes的 最小管理单元是pod 而不是容器,所以只能将 容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过 PodController 管理
  • Pod可以提供服务之后,就要考虑如何 访问Pod中服务,kubernetes提供了 Service资源 实现这个功能。
  • 当然,如果Pod中程序的数据需要 持久化,kubernetes还提供了 各种存储系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMzkQn5j-1671010223032)(images/2020-04-06_22-53-34627.png)]

学习kubernetes的核心,就是学习如何对集群上的 Pod、Pod控制器、Service、存储 等各种资源进行操作

二、YAML语言概述

YAML是一个类似 XML、JSON 的标记性语言。它强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义比较简单,号称"一种人性化的数据格式语言"。

xml举例:需要加上闭合标签

<heima>
    <age>15</age>
    <address>Beijing</address>
</heima>

yaml举例:相对简洁

heima:
  age: 15
  address: Beijing

语法

  • 大小写敏感
  • 使用 缩进表示层级关系
  • 为了兼容低版本,缩进建议使用空格
  • 缩进的 空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

数据类型

  • 纯量:单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期

    #布尔类型
    c1: true (或者True)
    #整型
    c2: 234
    #浮点型
    c3: 3.14
    #null类型 
    c4: ~
    #日期:必须使用ISO 8601格式,即yyyy-MM-dd
    c5: 2018-02-17
    #时间日期:时间日期使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
    c6: 2018-02-17T15:02:31+08:00
    #字符串类型:如果字符串中间有特殊字符,必须使用双引号或者单引号包裹
    c7: heima
    c8: 'line1
        line2'     # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格
    
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hash) / 字典(dictionary)

    # 形式一(推荐):
    heima:
      age: 15
      address: Beijing
    # 形式二(了解):
    heima: {age: 15,address: Beijing}
    
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

    # 形式一(推荐):
    address:
      - 顺义
      - 昌平  
    # 形式二(了解):
    address: [顺义,昌平]
    

小提示

  • 书写yaml切记 : 后面要加一个空格
  • 如果需要将多段yaml配置放在一个文件中,中间要使用 --- 分隔
  • 下面是一个yaml转json的网站,可以通过它验证yaml是否书写正确:链接

在这里插入图片描述

三、管理方式

  • 命令式对象管理:直接使用命令去操作kubernetes资源

    kubectl run nginx-pod --image=nginx:1.17.1 --port=80
    
  • 命令式对象配置:通过命令配置和 配置文件(提供资源信息) 去操作kubernetes资源

    kubectl create/patch -f nginx-pod.yaml
    
  • 声明式对象配置:通过 apply命令(创建、更新) 和配置文件去操作kubernetes资源

    kubectl apply -f nginx-pod.yaml
    
类型操作对象适用环境优点缺点
命令式对象管理对象测试简单只能操作活动对象,无法审计、跟踪
命令式对象配置文件开发可以审计、跟踪项目大时,配置文件多,操作麻烦
声明式对象配置目录开发支持目录操作意外情况下难以调试

四、命令式对象管理

直接使用命令去操作kubernetes资源

4.1 kubectl 命令介绍

kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:

kubectl [command] [type] [name] [flags]

comand:指定要对资源执行的操作,例如create、get、delete

type:指定资源类型,比如deployment、pod、service

name:指定资源的名称,名称大小写敏感

flags:指定额外的可选参数

# 查看所有pod
kubectl get pod 

# 查看某个pod
kubectl get pod pod_name

# 查看某个pod,以yaml、json、wide格式展示结果
kubectl get pod pod_name -o yaml

4.2 操作命令

kubernetes允许对资源进行多种操作,可以通过–help查看详细的操作命令

kubectl --help

经常使用的操作有下面这些:

命令分类命令翻译命令作用
基本命令create创建:–record创建一个资源
run运行:–image、–port、–replicas、–requests=cpu=100m在集群中运行一个指定的镜像
expose暴露:–name、–type=NodePort、–port=80、–target-port、暴露资源为Service
edit编辑编辑一个资源
get获取:-o、-w、–show-labels获取一个资源
patch更新更新一个资源
delete删除:–force、–grace-period=0删除一个资源
explain解释展示资源文档
set修改在对象上设置特定功能
部署命令rollout首次展示管理资源的发布
scale规模:–replicas=3命令方式扩(缩)容Pod的数量
autoscale自动调整自动调整Pod的数量
集群管理命令cluster-info集群信息显示集群信息
certificate修改证书资源
top显示资源(CPU/内存/存储)使用情况
cordon将节点标记为不可调度
uncordon将节点标记为可调度
drain为维护做准备时排空节点
taint污点更新一个或多个节点上的污点
故障排除和调试命令describe描述显示资源内部信息
logs日志:-f volume-emptydir、-c busybox查看容器在 pod 中的标准输出
attach缠绕进入运行中的容器进入运行中的容器
exec执行容器中的一个命令执行容器中的一个命令
cp复制在Pod内外复制文件
port-forward将一个或多个本地端口转发到pod
proxy运行Kubernetes API服务器的代理
auth检查授权
高级命令applyrc通过文件对资源进行配置
label标签:–overwrite更新资源上的标签
diff将实时版本与将要应用的版本进行比较
replace用文件名或标准输入替换资源
wait实验性:等待一个或多个资源上的特定条件
convert在不同API版本之间转换配置文件
kustomize从目录或远程url构建一个目标库
annotate更新资源上的注释
completion输出指定shell (bash或zsh)的shell完成代码
其他命令version版本显示当前Server和Client的版本
api-resources打印服务器上支持的API资源
api-versions以“组/版本”的形式打印服务器上支持的API版本
config修改kubeconfig文件
plugin提供与插件交互的实用程序

4.3 资源类型

kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:

kubectl api-resources

经常使用的资源有下面这些:

资源分类资源名称缩写资源作用
集群级别资源nodesno集群组成部分
namespacesns隔离Pod
pod资源podspo装载容器
pod资源控制器replicationcontrollersrc控制pod资源
replicasetsrs控制pod资源
deploymentsdeploy控制pod资源
daemonsetsds控制pod资源
jobs控制pod资源
cronjobscj控制pod资源
horizontalpodautoscalershpa控制pod资源
statefulsetssts控制pod资源
服务发现资源servicessvc统一pod对外接口
ingressing统一pod对外接口
存储资源volumeattachments存储
persistentvolumespv存储
persistentvolumeclaimspvc存储
配置存储资源configmapscm配置
secrets配置

4.4 命令参数

通过下面的命令查看全局命令行选项列表(适用于所有命令)

kubectl options
选项是否使用过作用
–add-dir-header=false如果为true,则将文件目录添加到头部
–alsologtostderr=false记录标准错误和文件
–as=‘’为操作模拟的用户名
–as-group=[]为操作模拟的组,该标志可以重复指定 多组
–cache-dir=‘/root/.kube/http-cache’默认HTTP缓存目录
–certificate-authority=‘’证书颁发机构的证书文件的路径
–client-certificate=‘’TLS的客户端证书文件的路径
–client-key=‘’TLS的客户端密钥文件的路径
–cluster=‘’要使用的kubeconfig集群的名称
–context=‘’要使用的kubeconfig上下文的名称
–insecure-skip-tls-verify=false如果为true,将不检查服务器的证书有效性。这将使你的HTTPS连接不安全
–kubeconfig=‘’用于CLI请求的kubeconfig文件的路径
–log-backtrace-at=:0当日志记录命中行file:N时,发出堆栈跟踪
–log-dir=‘’如果非空,将日志文件写入此目录
–log-file=‘’如果非空,则使用此日志文件
–log-file-max-size=1800定义日志文件可以增长到的最大大小。单位是兆字节。 如果该值为0,则最大文件大小不受限制。
–log-flush-frequency=5s日志刷新之间的最大秒数
–logtostderr=true记录标准错误而不是文件
–match-server-version=false要求服务器版本与客户端版本相匹配
-n, --namespace=‘’如果存在,此CLI请求该命名空间范围
–password=‘’API服务器基本身份验证的密码
–profile=‘none’要捕获的配置文件的名称。 (无| cpu |堆| goroutine |线程创建|块|互斥体)之一
–profile-output=‘profile.pprof’要写入配置文件的文件的名称
–request-timeout=‘0’在放弃单个服务器请求之前等待的时间长度。 非零值应包含相应的时间单位(如1s、2m、3h)。零值意味着不要让请求超时。
-s, --server=‘’Kubernetes API服务器的地址和端口
–skip-headers=false如果为真,请避免在日志消息中使用标头前缀
–skip-log-headers=false如果为true,则在打开日志文件时避免标题
–stderrthreshold=2等于或高于此阈值的日志将转至stderr
–token=‘’用于对API服务器进行身份验证的不记名令牌
–user=‘’要使用的kubeconfig用户的名称
–username=‘’对API服务器进行基本身份验证的用户名
-v, --v=0日志级别详细程度的数字
–vmodule=文件过滤日志记录的pattern=N设置的逗号分隔列表

4.5 操作案例

下面以一个namespace / pod的创建和删除简单演示下命令的使用:

  1. 创建一个 namespace

    [root@master ~]# kubectl create namespace test
    

    在这里插入图片描述

  2. 获取 namespace

    [root@master ~]# kubectl get namespace
    

    在这里插入图片描述

  3. 在此namespace下创建并运行一个nginx的 Pod

    [root@master ~]# kubectl run pod --image=nginx -n test
    

    在这里插入图片描述

  4. 查看新创建的pod。注意:默认命名空间为 default

    [root@master ~]# kubectl get pods -n test
    

    在这里插入图片描述

  5. 查看pod的内部信息

    [root@master ~]# kubectl describe pod pod-864f9875b9-mq2jl -n test
    

    在这里插入图片描述

    在这里插入图片描述

  6. 删除指定的pod。注意:默认命名空间为 default

    [root@master ~]# kubectl delete pod pod-864f9875b9-mq2jl -n test
    

    在这里插入图片描述

  7. 删除指定的namespace

    [root@master ~]# kubectl delete namespace test
    

    在这里插入图片描述

五、命令式对象配置

通过 命令 和 配置文件(提供资源信息) 操作kubernetes资源

  1. 创建一个nginxpod.yaml,内容如下:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: dev
    
    ---
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginxpod
      namespace: dev
    spec:
      containers:
      - name: nginx-containers
        image: nginx:latest
    
  2. 执行create命令,创建资源

    [root@master ~]# kubectl create -f nginxpod.yaml
    namespace/dev created
    pod/nginxpod created
    

    在这里插入图片描述

  3. 执行get命令,查看资源

    [root@master ~]# kubectl get -f nginxpod.yaml
    

    在这里插入图片描述

  4. 执行delete命令,删除资源

    [root@master ~]# kubectl delete -f nginxpod.yaml
    

    在这里插入图片描述

六、声明式对象配置

通过 apply命令(创建、更新) 和 配置文件 操作kubernetes资源

其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)

  • 如果资源不存在:创建,相当于 kubectl create
  • 如果资源已存在:更新,相当于 kubectl patch

操作案例

  1. 还是使用 nginxpod.yaml配置文件 创建资源

    [root@master ~]# kubectl apply -f nginxpod.yaml
    

    在这里插入图片描述

  2. 更新资源失败

    [root@master ~]# kubectl apply -f nginxpod.yaml
    

    在这里插入图片描述

  3. 更新资源成功:将 nginx的镜像从 latest 改为 1.17.1

    [root@master ~]# kubectl apply -f nginxpod.yaml
    

    在这里插入图片描述

    在这里插入图片描述

七、小结与扩展

使用推荐: 三种方式应该怎么用 ?

  • 查询资源:使用命令式对象管理 kubectl get(describe) 资源名称
  • 删除资源:使用命令式对象配置 kubectl delete -f XXX.yaml
  • 创建/更新资源:使用声明式对象配置 kubectl apply -f XXX.yaml

扩展:kubectl可以在node节点上运行吗 ?

kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:

[root@master ~]# scp  -r  ~/.kube   node1:~/

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java+Swing图书管理系统2.0

JavaSwing图书管理系统2.0一、系统介绍二、功能展示1.用户登陆页面2.首页3.图书查询4.图书入库&#xff08;管理员&#xff09;5.图书借还情况&#xff08;管理员&#xff09;6.图书证管理&#xff08;管理员&#xff09;7.借书&#xff08;学生、老师&#xff09;8.还书&#…

pikahcu靶场-12 目录遍历,敏感信息泄露,不安全的URL跳转

目录遍历&#xff0c;敏感信息泄露&#xff0c;不安全的URL跳转 目录遍历漏洞 概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称…

Netflix:用神经网络改善视频质量

点击上方“LiveVideoStack”关注我们▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息编者按Editors note眼看用户视频的增长将超过服务器的算力上限&#xff0c;既没有额外的服务器来支持&#xff0c;也不能对用户体验造成大的冲击&#xff0c;Instagram的工程师找…

C罗轮播图(HTML+CSS+JS)

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;前端案例分…

RFM 模型

RFM 模型顾客价值分析顾客价值分析 由于激烈的市场竞争&#xff0c;各个公司相继推出了多样灵活的优惠方式来吸引更多的客户。 对一个没有购买力的顾客&#xff0c;你打电话推销优惠活动毫无作用&#xff0c;可一个高价值顾客&#xff0c;会说有优惠活动怎么不通知我呢&#…

交叉梯度函数的MATLAB实现及代码分享02

交叉梯度函数的MATLAB实现及代码分享02 交叉梯度函数可用于反演成像中。作为一个连接不同物性参数的桥梁&#xff0c;交叉梯度函数可以实现不同物性参数的联合反演成像。 本文是对上一个博文的补充&#xff0c;详见交叉梯度函数的MATLAB实现及代码分享01&#xff0c;上一篇博…

人工智能导论课堂笔记

人工智能导论时间&#xff1a;2022年10月19日下午 班级&#xff1a;2022级人工智能应用技术1班 作业问题&#xff1a; Python安装注意事项 1.下载Python3.X的版本&#xff0c;如&#xff1a;3.10, 3.9&#xff0c; 3.8&#xff0c;不推荐下载2.7版本&#xff08;已经不使用&…

【Mysql】慢sql分析优化案例汇总

【Mysql】慢sql分析优化案例汇总&#xff08;一&#xff09;案例一&#xff1a;阿里云慢sql挑战赛实战&#xff08;一&#xff09;案例一&#xff1a;阿里云慢sql挑战赛实战 190毫秒干到2毫秒 【1】表结构 【2】待优化sql 【3】第一次explain分析 【4】选取驱动表 优先选择…

java项目_第174期ssm高校信息资源共享平台_ssm毕业设计

java项目_第174期ssm高校信息资源共享平台_ssm毕业设计 【源码请到下载专栏下载】 今天分享的项目是《ssm高校信息资源共享平台》 该项目分为3个角色&#xff0c;管理员、学生、教师角色。 学生可以浏览前台,包含功能有&#xff1a; 首页、课程信息、教学资源、新闻资讯。 教师…

Linux Kernel 6.0 CXL Core pci.c 详解

文章目录前言相关链接Ref正文前言 CXL 是一个比较新的技术&#xff0c;所以我研究的内核源码是选了当前比较新的内核版本 linux 6.0。打算将内核关于 CXL 的驱动进行解析一遍&#xff0c;一步一步慢慢来。 在阅读之前&#xff0c;希望读者能有一定的 PCIe 基础知识&#xff0…

java计算机毕业设计ssm智能线上教育mo0l5(附源码、数据库)

java计算机毕业设计ssm智能线上教育mo0l5&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

性能测试知识之三大模型

今天的这篇文章我会聊聊在实际工作中开展性能测试&#xff0c;前期最核心的工作。即业务模型、流量模型和数据模型这三大模型&#xff0c;该如何评估和建立。在性能测试工作中&#xff0c;业务模型、流量模型和数据模型是至关重要且必须在项目中构建的&#xff0c;否则很可能导…

【算法分析与设计】【期中(末)复习题】【2022秋】

文章目录一. 单选题二. 填空题三. 判断题四. 多选题一. 单选题 1.按照渐近阶从低到高的顺序排列下列表达式&#xff1a; 30n&#xff0c;2logn&#xff0c;4&#xff0c;n! A. 4<30n<2logn<n! B. 30n<4<2logn<n! C. n!<4<2logn<30n D. 4<2logn&…

YOLO算法改进之结合GradCAM可视化热力图(附详细教程)

🎄🎄YOLOv5/v7改进之结合GradCAM可视化热力图(附详细教程)🎄🎄 🚀🚀🚀NEW!!!魔改YOLOv5/v7目标检测算法来啦 ~ 🐱‍🏍 计算机视觉 —— 致力于目标检测领域科研Tricks改进与推荐 | 主要包括主干网络改进、轻量化网络、注意力机制、检测头部改进、空间金…

主数据管理(MDM),数据中台,国内有哪些知名供应商呢?

当企业的信息化、数据化发展到一定阶段的时候&#xff0c;大部分企业都会对主数据管理产生需求。为帮助企业加速数字化建设步伐&#xff0c;亿信华辰凭借多年在行业领域内积累的丰富经验并结合相关大数据技术成功打造了一款主数据管理产品&#xff0c;覆盖主数据标准、主数据质…

019 | 探究布衣上的刺绣图腾文化功能——以贵州册亨县布依族刺绣为例 | 大学生创新训练项目申请书 | 极致技术工厂

研究目的 当今我国社会的主要矛盾是人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾。但经济增长过快所带来的联动效应&#xff0c;导致人们一定程度上只注重金钱、利益&#xff0c;从而忽视了培养高尚的理想信念和增强民族精神的重要性。社会要保持平衡性&#xff…

基于低代码平台设计的订单管理系统,助力家具行业信息化建设

编者按&#xff1a;随着信息化的高速发展&#xff0c;传统的人工订单管理模式已经不适合现在企业发展的需求&#xff0c;一个成熟的订单管理系统可以帮助企业解决订单管理混乱的问题。本文介绍了低代码平台在订单管理系统实现方面的优势&#xff0c;并展示了相关案例。 关键词…

PE文件详解

字节存放顺序是小尾存储&#xff0c;高位保存高字节、低位保存低字节&#xff0c;因此是两位两位倒着读 1、DOS头&#xff1a;包括MZ头和DOS存根&#xff0c;指向DOS可执行程序部分 &#xff08;1&#xff09;MZ头&#xff1a;长度 40H&#xff0c;即4行乘16位&#xff0c; e_…

mmap

文章目录使用示例函数原型mmapmunmap传统读写文件mmap 原理eager实现lazy实现缺点使用示例 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h>int main(i…

高并发编程之阻塞队列

9 阻塞队列 9.1 BlockingQueue 简介 Concurrent 包中&#xff0c;BlockingQueue 很好的解决了多线程中&#xff0c;如何高效安全 “传输”数据的问题。通过这些高效并且线程安全的队列类&#xff0c;为我们快速搭建 高质量的多线程程序带来极大的便利。本文详细介绍了 Bloc…