Kubernetes(k8s)资源管理

文章目录

  • 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: 21address: 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: line1line2     # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格
# 对象
# 形式一(推荐):
wanf:age: 21address: 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: httpdpodnamespace: wanf
spec: containers: - name: httpd-testimage: 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   94sNAME           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   58sNAME           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.hqwc.cn/news/178334.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛选题 深度学习花卉识别 - python 机器视觉 opencv

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &a…

Java 轻松删除PDF指定页、空白页 (免费工具分享)

对PDF页面的增删通常需要借助专门的工具&#xff0c;而这些工具一般需要付费才能使用。那么我们可以通过Java代码免费实现这一功能吗&#xff1f;答案是肯定的。这篇文章就教大家如何使用一个免费的国产Java库来删除PDF中的指定页面或者删除PDF中的空白页。 使用Java快速删除PD…

自动驾驶汽车:人工智能最具挑战性的任务

据说&#xff0c;自动驾驶汽车是汽车行业梦寐以求的状态&#xff0c;将彻底改变交通运输业。就在几年前&#xff0c;对自动驾驶汽车的炒作风靡一时&#xff0c;那么到底发生了什么呢&#xff1f;这么多公司吹嘘到2021年我们将迎来的无人驾驶汽车革命在何处&#xff1f;事实证明…

《洛谷深入浅出进阶篇》 P1496火烧赤壁——初识离散化

上链接&#xff1a; P1496 火烧赤壁 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1496上题干&#xff1a; 有一组序列&#xff0c;[-2^31,2^31] &#xff0c; 现在给你n次操作&#xff0c;每一次操作给出两个整数l&#xff0c;r&#xff…

TikTok与心灵成长:娱乐与启发并重

社交媒体已成为我们生活的一部分&#xff0c;其中TikTok以其短视频内容和创新性而闻名。然而&#xff0c;TikTok不仅仅是一个娱乐平台&#xff0c;它还具有潜力成为心灵成长的有力工具。本文将探讨TikTok如何在娱乐与启发之间取得平衡&#xff0c;以促进心灵成长和积极影响。 娱…

java常用的几个图片处理工具对Tiff文件的支持

ImageMagick 官网 https://imagemagick.org/&#xff0c; 支持多种格式。命令行工具很适合调试。功能很强大. 还有一款工具GraphicsMagick 是从ImageMagick的基础上研发出来的。 OpenCV 官网 https://opencv.org/ &#xff0c; github地址https://github.com/opencv/opencv&…

2024年春季3月退役的大学生士兵免试专升本单独报名的新政策

关于2024年春季3月退役大学生士兵专升本免试单独报名安排的通知 2024年3月退役的符合条件的大学生士兵单独组织一次报名&#xff0c;网上报名时间另行通知&#xff0c;履行网上报名和信息确认手续&#xff0c;根据要求上传本人头像照片、身份证照片&#xff0c;以及《入伍通知书…

第六届浙江省大学生网络与信息安全竞赛 2023年 初赛/决赛 WEB方向 Writeup

-------------------【初赛】------------------- easy php 简单反序列化 __debuginfo()魔术方法打印所需调试信息&#xff0c;反序列化时候执行&#xff01; 链子如下&#xff1a; BBB::__debuginfo()->CCC::__toString()->AAA::__call()EXP&#xff1a; <?php…

如何以编程方式获取Android手机的电话号码?

在创建Android应用程序时,很多时候我们需要通过手机号码进行身份验证。为了增强用户体验,我们可以在移动系统中自动检测手机号码。因此,让我们开始一个android项目吧!我们将创建一个按钮,单击它时将获得一个手机号码并将其显示在 TextView 中。 分步实施 步骤 1:创建新项…

电机应用-控制系统、PID

控制系统 对生产中某些关键性参数进行自动控制&#xff0c;使它们在受到外界干扰&#xff08;扰动&#xff09;的影响而偏离正常状态时&#xff0c;能够被自动地调节而回到工艺所要求地数值范围内。 自动控制系统分为&#xff1a;开环、闭环。 闭环自动控制系统原理 闭环控制是…

ElasticStack日志分析平台-Filebeat与Logstash

一、ELK 1、介绍&#xff1a; ELK 是一个用于日志管理和数据分析的开源工具栈&#xff0c;它由三个主要组件组成&#xff1a; ① Elasticsearch: Elasticsearch 是一个实时分布式搜索和分析引擎&#xff0c;作用是存储和检索大规模数据&#xff0c;Elasticsearch 支持实时索…

03-CSS基础选择器

3.1 CSS基础认知&#x1f34e; 3.1.1 &#x1f441;️‍&#x1f5e8;️CSS概念 CSS&#xff1a;层叠样式表&#xff08;Cascading style sheets)&#xff0c;为网页标签增加样式表现的 语法格式&#xff1a; 选择器{<!-- 属性设置 -->属性名:属性值; <!--每一个…