Kubernetes(k8s)资源管理

news2024/11/15 20:08:50

文章目录

  • Kubernetes资源管理
    • 1.资源管理介绍
    • 2.YAML语言介绍
    • 3.资源管理方式
      • 命令式对象管理
      • 命令式对象配置
      • 声明式对象配置
    • 扩展:配置kubectl命令可以在node节点上运行

Kubernetes资源管理

1.资源管理介绍

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

Kubernetes提供了一组核心概念和功能来管理资源,包括:

  1. Pod:是Kubernetes中最小的可调度单位,它可以包含一个或多个容器。Pod代表应用程序的一个实例,包含了共享的网络和存储资源。Pod可以动态地进行伸缩,并且可以在不同的节点之间迁移。
  2. Deployment:用于定义和管理应用程序的部署。Deployment描述了应用程序的期望状态,并负责在集群中创建和更新Pod。它支持滚动更新、回滚和扩缩容等操作。
  3. Service:用于暴露应用程序内部的Pod给外部访问。Service为Pod提供了一个稳定的网络地址,并通过负载均衡将流量分发到后端的Pod。
  4. Namespace:用于将集群划分为多个虚拟集群,以便不同的团队或项目可以在同一个集群上独立地工作。每个Namespace可以拥有自己的Pod、Service和其他资源。
  5. PersistentVolume:用于在容器之间持久化存储数据的抽象。PersistentVolume是集群中的一个存储资源,可以被动态地绑定到Pod中的Volume,以提供持久化的存储。
  6. StatefulSet:用于管理有状态应用程序的部署。StatefulSet确保每个Pod都具有稳定的网络标识和持久化存储,并且它们按照一定的顺序进行创建和更新。

以上仅是Kubernetes资源管理的一些基本概念和功能。Kubernetes还提供了许多其他资源,如ConfigMap、Secret、Ingress等,以帮助用户更好地管理容器化应用程序。


kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。

kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。

Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了Service资源实现这个功能。

当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系统。


在这里插入图片描述


2.YAML语言介绍

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

//json写法
<wanf>
    <age>21</age>
    <address>Wuhan</address>
</wanf>

//上面写法转化为yaml后
wanf:
  age: 21
  address: Wuhan

YAML的语法比较简单,主要有下面几个:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格( 低版本限制 )
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

YAML支持以下几种数据类型:

  • 纯量:单个的、不可再分的值
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hash) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
# 纯量, 就是指的一个简单的值,字符串、布尔值、整数、浮点数、Null、时间、日期
# 1 布尔类型
c1: true (或者True)
# 2 整型
c2: 234
# 3 浮点型
c3: 3.14
# 4 null类型 
c4: ~  # 使用~表示null
# 5 日期类型
c5: 2023-11-15    # 日期必须使用ISO 8601格式,即yyyy-MM-dd
# 6 时间类型
c6: 2023-11-15T15:41:31+08:00  # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
# 7 字符串类型
c7: wanf     # 简单写法,直接写值 , 如果字符串中间有特殊字符,必须使用双引号或者单引号包裹 
c8: line1
    line2     # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格
# 对象
# 形式一(推荐):
wanf:
  age: 21
  address: Wuhan
# 形式二(了解):
wanf: {age: 21,address: Wuhan}
# 数组
# 形式一(推荐):
address:
  - 武昌
  - 江夏  
# 形式二(了解):
address: [武昌,江夏]

小提示:

1 书写yaml切记: 后面要加一个空格

2 如果需要将多段yaml配置放在一个文件中,中间要使用---分隔

3 下面是一个yaml转json的网站,可以通过它验证yaml是否书写正确

https://www.json2yaml.com/convert-yaml-to-json


3.资源管理方式

  • 命令式对象管理:直接使用命令去操作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

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

命令式对象管理

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格式展示结果
kubectl get pod pod_name -o yaml

资源类型

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配置

操作

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

kubectl --help

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

命令分类命令翻译命令作用
基本命令create创建创建一个资源
edit编辑编辑一个资源
get获取获取一个资源
patch更新更新一个资源
delete删除删除一个资源
explain解释展示资源文档
运行和调试run运行在集群中运行一个指定的镜像
expose暴露暴露资源为Service
describe描述显示资源内部信息
logs日志输出容器在 pod 中的日志输出容器在 pod 中的日志
attach缠绕进入运行中的容器进入运行中的容器
exec执行容器中的一个命令执行容器中的一个命令
cp复制在Pod内外复制文件
rollout首次展示管理资源的发布
scale规模扩(缩)容Pod的数量
autoscale自动调整自动调整Pod的数量
高级命令applyrc通过文件对资源进行配置
label标签更新资源上的标签
其他命令cluster-info集群信息显示集群信息
version版本显示当前Server和Client的版本

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

//创建一个叫wanf的名称空间(名称空间=namespace)
[root@master ~]# kubectl create namespace wanf
namespace/wanf created

//查看所有的名称空间
[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   47h
kube-flannel      Active   46h
kube-node-lease   Active   47h
kube-public       Active   47h
kube-system       Active   47h
wanf              Active   2m3s		//刚刚创建的名称空间
[root@master ~]# 

----------

//在此namespace下创建并运行一个httpd的Pod
[root@master ~]# kubectl run httpd --image=lcwanf/httpd:v0.2 -n wanf
pod/httpd created

//查看名称空间wanf里面的pod
[root@master ~]# kubectl get pods -n wanf
NAME    READY   STATUS    RESTARTS   AGE
httpd   1/1     Running   0          3m2s		//创建成功,running状态
[root@master ~]# 

//查看容器的IP,在内部访问试试
[root@master ~]# kubectl get pods -n wanf -o wide
NAME    READY   STATUS    RESTARTS      AGE     IP           NODE    NOMINATED NODE   READINESS GATES
httpd   1/1     Running   1 (41s ago)   5m38s   10.244.1.5   node1   <none>           <none>
--访问成功
[root@master ~]# curl 10.244.1.5
<html><body><h1>nice moon!</h1></body></html>


//删除指定的pod
[root@master ~]# kubectl delete pod httpd -n wanf
pod "httpd" deleted
--名称空间wanf里面的叫httpd的pod已经被删除了
[root@master ~]# kubectl get pods -n wanf 
No resources found in wanf namespace.
[root@master ~]# 

//删除指定的名称空间
[root@master ~]# kubectl delete namespace wanf
namespace "wanf" deleted
--名称空间wanf已经被删除了
[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   47h
kube-flannel      Active   47h
kube-node-lease   Active   47h
kube-public       Active   47h
kube-system       Active   47h
[root@master ~]# 

命令式对象配置

命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。

1.写一个httpdpod.yaml,内容如下:

[root@master ~]# vim httpdpod.yaml
[root@master ~]# cat httpdpod.yaml 
apiVersion: v1
kind: Namespace
metadata: 
  name: wanf

---

apiVersion: v1
kind: Pod
metadata:
  name: httpdpod
  namespace: wanf
spec: 
  containers: 
  - name: httpd-test
    image: lcwanf/httpd:v0.2
[root@master ~]# 

2.执行create命令,创建资源

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

3.执行get命令,查看根据yaml文件创建的资源

//创建了一个叫wanf的名称空间,在wanf名称空间里面创建了一个叫httpdpod的pod
[root@master ~]# kubectl get -f httpdpod.yaml 
NAME             STATUS   AGE
namespace/wanf   Active   94s

NAME           READY   STATUS    RESTARTS   AGE
pod/httpdpod   1/1     Running   0          94s
[root@master ~]# 

4.执行delete命令,删除根据yaml文件创建的资源:

//删除资源
[root@master ~]# kubectl delete -f httpdpod.yaml 
namespace "wanf" deleted
pod "httpdpod" deleted
[root@master ~]# 

//查看,资源已经被删除;名称空间都被删除了,名称空间里面的pod更不用说了
[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   2d
kube-flannel      Active   47h
kube-node-lease   Active   2d
kube-public       Active   2d
kube-system       Active   2d
[root@master ~]# 

声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。

与命令式配置不同,声明式配置描述了集群中期望的状态(最终状态),而不是每个对象的创建步骤。

//第一次执行apply,反馈为created,意思已经发生改变
[root@master ~]# kubectl apply -f httpdpod.yaml 
namespace/wanf created
pod/httpdpod created
--对应的资源也创建出来了
[root@master ~]# kubectl get -f httpdpod.yaml 
NAME             STATUS   AGE
namespace/wanf   Active   58s

NAME           READY   STATUS    RESTARTS   AGE
pod/httpdpod   1/1     Running   0          58s
[root@master ~]# 

//再次执行apply,由于资源已经存在了,所以这次的apply不会有任何改变,反馈为unchanged
[root@master ~]# kubectl apply -f httpdpod.yaml 
namespace/wanf unchanged
pod/httpdpod unchanged

//修改yaml文件里面的内容
[root@master ~]# vim httpdpod.yaml 
(省略)
image: lcwanf/nginx:v10.0   //修改了此行,把镜像从httpd换成了nginx

--执行apply,由于只改了pod,没有改名称空间,所以反馈一个是unchanged(没有改变),另一个是configured
[root@master ~]# kubectl apply -f httpdpod.yaml 
namespace/wanf unchanged
pod/httpdpod configured
总结:
    其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
    使用apply操作资源:
        如果资源不存在,就创建,相当于 kubectl create
        如果资源已存在,就更新,相当于 kubectl patch

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

创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml

删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml

查询资源 使用命令式对象管理 kubectl get(describe) 资源名称


扩展:配置kubectl命令可以在node节点上运行

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

  • 1.在node节点(工作节点)上创建一个用户
  • 2.在该用户的家目录中创建一个隐藏目录 .kube
  • 3.将控制节点上的/etc/kubernetes/admin.conf通过scp发送到node节点里上一步创建的目录中并命名为config
  • 4.在node节点修改config文的属主属组为第1步创建的用户

演示:

//在node节点上创建用户并设置密码
[root@node1 ~]# useradd k8s
[root@node1 ~]# echo "1"  | passwd --stdin k8s 
Changing password for user k8s.
passwd: all authentication tokens updated successfully.
[root@node1 ~]# 

//在node节点上创建隐藏目录
[root@node1 ~]# mkdir -p /home/k8s/.kube

//在控制节点上发送文件
[root@master ~]# scp /etc/kubernetes/admin.conf node1:/home/k8s/.kube/config
admin.conf                                 100% 5646     3.3MB/s   00:00    
[root@master ~]# 

//在node节点上修改/home/k8s/.kube/config的属主属组
[root@node1 ~]# chown k8s:k8s /home/k8s/.kube/config
[root@node1 ~]# ll /home/k8s/.kube/config
-rw------- 1 k8s k8s 5646 Nov 15 17:07 /home/k8s/.kube/config
[root@node1 ~]# 

//切换到第1步创建的用户,测试
[k8s@node1 ~]$ kubectl get namespace
NAME              STATUS   AGE
default           Active   2d
kube-flannel      Active   2d
kube-node-lease   Active   2d
kube-public       Active   2d
kube-system       Active   2d
wanf              Active   21m
[k8s@node1 ~]$ 
--可以使用

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

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

相关文章

MongoDB(一):CentOS7离线安装MongoDB单机版与简单使用

CentOS7离线安装MongoDB单机版与简单使用 1、概述2、安装社区版2.1、前置条件2.2、下载.tgz文件2.3、解压文件2.4、安装MongoDB Shell 3、运行MongoDB服务端3.1、关于ulimit3.2、目录设置3.3、创建mongod.conf3.4、运行MongoDB3.5、检查MongoDB是否已运行 4、使用MongoDB4.1、操…

Clear recent project list 清理Idea的最近项目列表

Clear recent project list 清理Idea的最近项目列表 Idea打开过好多项目清理方式mac文件地址Windows文件地址linux 文件地址 Idea打开过好多项目 很多项目都已经从磁盘删除了&#xff0c;但是还在最近的项目中能看到&#xff0c;偶尔点击到&#xff0c;会提示已经不存在。很头…

webstorm基础配置

设置左侧菜单栏文字大小 开启鼠标滚轮控制文字大小 配置自定义注释 设置左侧菜单栏文字大小&#xff1a;file》settings》Appearance&Behavior》Appearance 开启鼠标滚轮控制主界面文字大小&#xff1a;file》settings》Editor》General 配置自定义注释&#xff1a;fi…

【文件包含】phpmyadmin 文件包含(CVE-2014-8959)

1.1漏洞描述 漏洞编号CVE-2014-8959漏洞类型文件包含漏洞等级高危漏洞环境Windows漏洞名称phpmyadmin 文件包含&#xff08;CVE-2014-8959&#xff09; 描述: phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其index.php中存在一处文件包含逻辑&#xff0c;通过二次编…

一键将CSDN博客文章如何转为Markdown

文章目录 1.在CSDN博文页面点击右键&#xff0c;选择“检查”&#xff08;Google浏览器为例&#xff09;。2.在查看器中搜索article_content&#xff0c;找到对应内容&#xff0c;点击…复制为outerHTML。3.打开网址https://tool.lu/markdown/&#xff0c;点击HTML2MD&#xff…

【数据结构】希尔排序(最小增量排序)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…

【C++面向对象】11. 数据抽象*

文章目录 【 1. 访问标签强制抽象 】【 2. 设计策略 】 数据抽象 是指只向外界提供关键信息&#xff0c;并隐藏其后台的实现细节&#xff0c;即只表现必要的信息而不呈现细节。数据抽象是一种依赖于接口和实现分离的编程&#xff08;设计&#xff09;技术。数据抽象的好处&…

【面试经典150 | 位运算】数字范围按位与

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;公共前缀方法二&#xff1a;n & (n-1) 写在最后 Tag 【位运算】 题目来源 201. 数字范围按位与 题目解读 计算给定区间内所有整数的按位与的结果。 解题思路 本题朴素的方法是直接将区间内的所有整数按位与&…

FindMy技术定位身份证

身份证是我们日常生活中不可缺少的重要证件。无论是购买房产、车辆&#xff0c;还是乘坐飞机、火车、汽车等交通工具&#xff0c;甚至是办理银行业务等&#xff0c;都需要提供身份证原件。因此&#xff0c;身份证对于我们来说&#xff0c;其重要性不言而喻&#xff0c;一旦丢失…

Python如何使用Pyecharts+TextRank生成词云图?

Python如何使用PyechartsTextRank生成词云图&#xff1f; 1 应用场景2 关于Pyecharts2.1 Pyecharts简介2.2 Pyecharts安装2.3 Pyecharts支持的图形2.4 Pyecharts的一个示例 3 关于TextRank3.1 TextRank简介3.2 TextRank安装 4 词云图的生成过程4.1 导入需要的包4.2 目标文件4.3…

2023.11.16 hivesql之条件函数,case when then

目录 一.Conditional Functions条件函数 二.空值相关函数 三&#xff1a;使用注意事项 3.1 then后面不能接子查询 3.2 then后面只能是结果值 3.3 then后面能不能接两列 四.用于建表新增字段使用场景 一.Conditional Functions条件函数 -- 演示条件函数 -- if(条件判断,t…

【软考篇】中级软件设计师 第三部分(一)

中级软件设计师 第三部分&#xff08;一&#xff09; 十七. I/O管理软件十八. 输入/输出技术十九. 总线系统二十. 磁盘管理20.1 移臂调度算法20.2 缓冲区 二十一. 操作系统二十二. 数据库22.1 三级模式-两级映射22.2 数据库设计22.3 规范化理论22.4 范式判断22.5 模式分解 十七…

探索arkui(1)--- 布局(线性/层叠/弹性)

前端开发布局是指前端开发人员宣布他们开发的新网站或应用程序正式上线的活动。在前端开发布局中&#xff0c;开发人员通常会展示新网站或应用程序的设计、功能和用户体验&#xff0c;并向公众宣传新产品的特点和优势。前端开发布局通常是前端开发领域的重要事件&#xff0c;吸…

如何用SaleSmartly集成WhatsApp账号(内含WhatsApp个人号、商业号、API号对比图)

用SaleSmartly集成WhatsApp账号 如果企业有多个WhatsApp账号&#xff0c;无论是个人账号还是工作账号&#xff0c;员工操作起来可能会觉得难以管理和切换。SaleSmartly就可以解决这个问题&#xff0c;让员工在一个平台上同时使用多个WhatsApp账号&#xff0c;不需要频繁地登录和…

C++初阶,详解类和对象(2)

详解类和对象&#xff08;2&#xff09; 一&#xff0c;前言二&#xff0c;构造函数2.1构造函数概念2.2构造函数特性 三&#xff0c;析构函数3.1析构函数概念3.2析构函数特性 一&#xff0c;前言 上一篇我们讲了类的大体框架&#xff0c;这篇内容我们要重点来说一说类的几个默…

iis特殊字符的轉義問題解決

今天發現有個問題&#xff0c;部分圖片的靜態資源帶有號&#xff0c;導致無法直接在瀏覽器獲取圖片&#xff0c;百度了一下&#xff0c;修改了注冊表&#xff0c;發現沒什麽軟用&#xff0c;最後找到一篇博客&#xff0c;解決了 解決

k8s的error: metrics not available yet问题处理

kubectl top node报错处理 解决步骤环境说明问题现象初次排查问题解决版本兼容性metric-server.yaml 问题验证 解决步骤 因项目要求&#xff0c;需在k8s集群中使用 kubectl top node命令&#xff0c;但是一直报error: metrics not available yet错误。为了更好的复现问题&…

【知识增强】A Survey of Knowledge-Enhanced Pre-trained LM 论文笔记

A Survey of Knowledge-Enhanced Pre-trained Language Models Linmei Hu, Zeyi Liu, Ziwang Zhao, Lei Hou, Liqiang Nie, Senior Member, IEEE and Juanzi Li 2023年8月的一篇关于知识增强预训练模型的文献综述 论文思维导图 思维导图网页上看不清的话&#xff0c;可以存…

如果使用Vue要做根据已有的图形填入到指定的单元格中,你会怎么做?

这里写自定义目录标题 如果使用Vue要做根据已有的图形填入到指定的单元格中&#xff0c;你会怎么做&#xff1f;先看效果图上代码 如果使用Vue要做根据已有的图形填入到指定的单元格中&#xff0c;你会怎么做&#xff1f; 先看效果图 上代码 <template><div class&q…

算法--搜索与图

这里写目录标题 主要内容DFS思想 BFS思想 DFS与BFS的比较一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 主要内容 DFS 思想 会优先向深处搜索 一旦到达最深处 那么会回溯 但是在回溯的过程中 会边回溯边观察是否有能继…