[云原生2.] Kurbernetes资源管理 ---- (陈述式资源管理方式)
文章目录
- 1. K8s管理资源的方法类别
- 1.1 陈述式资源管理方式
- 1.2 声明式资源管理方式
- 1.3 GUI式资源管理方法
- 2. 陈述式资源管理方式
- 2.1 命令行工具 ---- Kubelet
- 2.1.1 简介
- 2.1.2 特性
- 2.1.3 kubelet拓展命令
- 2.1.4 kubectl基本语法
- 2.1.5 Kubectl工具的自动补全
- 2.2 k8s Service 的类型
- 2.2.1 NodePort
- 2.2.2 ClusterIP
- 2.2.3 LoadBalancer
- 2.2.4 ExternalName
- 2.3 k8s Service 的端点类型
- 2.3.1 Port
- 2.3.2 NodePort
- 2.3.3 TargetPort
- 2.3.4 ContainerPort
- 3. 陈述式资源管理方式的基础命令
- 3.1 创建
- 3.1.1 创建命名空间
- 3.1.2 create子命令
- 3.1.3 run子命令
- 3.2 get ---- 查看基本信息
- 3.2.1 Kubernetes 集群组件的状态
- 3.2.2 命名空间
- 3.2.3 Service(服务)
- 3.2.4 pod信息
- 3.2.5 Node(节点)列表
- 3.3 describe ---- 查看资源详细信息
- 3.4 logs ---- 查看日志
- 3.5 delete ---- 删除指定的资源
- 3.6 exec ---- 跨主机登录容器
- 3.7 scale ---- replicas(副本数)
- 4. 项目的生命周期
- 4.1 创建-----kubectl create命令
- 4.2 发布-----kubectl expose命令
- 4.3 更新 ----- kubectl set命令
- 4.4 回滚 ----- kubectl rollout 命令
1. K8s管理资源的方法类别
1.1 陈述式资源管理方式
主要依赖命令行工具kubectl
进行管理
可理解为使用一条命令和参数选项来实现资源的管理操作
1.2 声明式资源管理方式
主要依赖统一资源配置清单进行管理
可以理解为使用yaml配置文件的定义来实现资源的管理操作
1.3 GUI式资源管理方法
主要依赖图形化操作界面进行管理
2. 陈述式资源管理方式
k8s中文文档:http://docs.kubernetes.org.cn/683.html
2.1 命令行工具 ---- Kubelet
2.1.1 简介
kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
2.1.2 特性
-
优点
1.可以满足90%以上的使用场景
2.对资源的增、删、查操作比较容易 -
缺点
1.命令冗长,复杂,难以记忆
2.特定场景下,无法实现管理需求
3.对资源的修改麻烦,需要patch来使用json串更改。
2.1.3 kubelet拓展命令
#kubectl 的命令大全
kubectl --help-h
#查看k8s版本信息
kubectl version
#查看资源对象简写
kubectl api-resources
#查看集群信息
kubectl cluster-info
#node节点查看日志
journalctl -u kubectl -f
2.1.4 kubectl基本语法
kubectl [command] [Type] [NAME] [flags]
command: 子命令 用于操作kubernetes集群资源对象的命令
TYPE: 资源对象的类型 区分大小写,能以单数,复数或者简写形式表示
NAME: 资源对象的名称 区分大小写,如果不指定名称,系统则将返回属于TYPE的全部对象的列表
flags: 子命令的可选参数
2.1.5 Kubectl工具的自动补全
#二进制安装的k8s,kubectl工具没有自动补全功能(其他方式安装的未验证)
#可以使用以下方式开启命令自动补全
vim /etc/bashrcsource <(kubectl completion bash)
2.2 k8s Service 的类型
2.2.1 NodePort
将Service的端口号映射到每个Node的一个端口号上,这样集群中的任意Node
都可以作为Service
的访问入口地址,即NodeIP:NodePort
每个端口只能是一种服务,端口范围只能是 30000-32767
。
2.2.2 ClusterIP
默认值,它是Kubernetes系统自动分配的虚拟IP(Cluster IP:Port
),只能在集群内部访问
2.2.3 LoadBalancer
LoadBalancer
和NodePort
很相似,目的都是向外部暴露一个端口,区别在于LoadBalancer
会在集群的外部再来做一个负载均衡设备,而这个设备需要外部环境支持的,外部服务发送到这个设备上的请求,会被设备负载之后转发到集群中
2.2.4 ExternalName
ExternalName类型
的服务用于将集群外的服务定义为Kubernetes的集群的Service,并且通过externalName字段
指定外部服务的地址,可以使用域名或IP格式,集群内的客户端应用通过访问这个Service
就能访问外部服务了。
2.3 k8s Service 的端点类型
Service是通过标签选择器绑定Pod的标签来关联Pod的端点(Endpoint)。
2.3.1 Port
Service 的ClusterIP 使用的端口
2.3.2 NodePort
在NodePort类型的service定义的端口,在每个node节点上开启的端口,即 nodeIP 使用的端口,默认范围为30000~32767
2.3.3 TargetPort
使用云负载设备和service做映射,外部用户通过云负载设备即可将请求转发到node节点,再通过nodeIP:nodePort访问service并转发给其关联的Pod。
2.3.4 ContainerPort
相当于给一个外部地址做别名,集群内的Pod可以通过这个service访问相关的外部服务。8875
K8S集群内部的客户端可以通过 http://clusterIP:port --> podIP:containerPortK8S集群外部的客户端可以通过 http://nodeIP:nodePort --> podIP:containerPort
3. 陈述式资源管理方式的基础命令
3.1 创建
run
为一次性的创建运行,删除后不会自动生成,没有pod控制器。
create
创建的,删除后还会自动生成,有pod控制器,拥有副本集控制。
3.1.1 创建命名空间
kubectl create ns <name>
#示例
kubectl create ns scj
3.1.2 create子命令
kubectl create [-n <命名空间>] <资源类型> <资源名称> [选项]--image=镜像 --replicas=副本数 --port=容器端口
#示例
kubectl create service <service-name> --tcp=<port>:<target-port>kubectl create pod <pod-name> --image=<container-image>kubectl create deployment <deployment-name> --image=<container-image>
3.1.3 run子命令
#创建并运行
kubectl run <资源名称> --image=镜像 --replicas=副本数 --port=容器端口
3.2 get ---- 查看基本信息
#基本格式
kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n指定命令空间,-o指定输出格式
resource可以是具体资源名称,如pod nginx- xxx;也可以是资源类型,如pod; 或者all (仅展示几种核心资源,并不完整)--all-namespaces 或-A :表示显示所有命令空间,
--show-labels :显示所有标签
-l x:仅显示标签为x的资源
-l x=y:仅显示包含x标签,且值为y的资源
3.2.1 Kubernetes 集群组件的状态
kubectl get componentstatuses
kubectl get cs #简写
get pods --show-labels
#查看有哪些标签,面试常问
3.2.2 命名空间
命名空间在 Kubernetes
中主要用于隔离和管理资源名称。
每个命名空间具有自己的资源名称空间,保证了资源名称的唯一性。
#获取当前集群中所有命名空间的列表kubectl get namespace
kubectl get ns #简写
#获取命名空间中的所有资源的列表kubectl get all [-n namespace]
#不指定命名空间,则默认查看default命名空间
3.2.3 Service(服务)
kubectl get service
kubectl get svc
3.2.4 pod信息
kubectl get pods [-n namespace] [-o wide|json|yaml]
kubectl get pods --all-namespaces -o wide
3.2.5 Node(节点)列表
kubectl get nodes
3.3 describe ---- 查看资源详细信息
#基本格式
kubectl describe [-n <命名空间>] <资源类型> <资源名称>
#示例
#先根据kubectl get pods -A,找到要查看的资源
kubectl describe pod etcd-master01 -n kube-system
3.4 logs ---- 查看日志
kubectl logs [-n <命名空间>] <Pod资源名称> [-c 容器名称] [-f] [-p]
#查看Pod容器的日志
选项 | 对象 | 功能 |
---|---|---|
-n | 命名空间 | 用于指定 Pod 所属的命名空间,如果不指定命名空间,将默认使用默认命名空间 |
-c | 容器名称,可选的容器参数 | 用于指定要获取日志的容器名称,如果 Pod 中只有一个容器,可以省略此参数 |
-f | 可选的跟踪参数 | 用于告诉命令持续输出日志 |
-p | 可选的先前参数 | 用于获取已经终止的 Pod 的先前日志如果 Pod 重新创建或重新调度,该参数可以用来获取先前的日志 |
#举个例子
kubectl logs -n kube-system kube-proxy-ggw6p
3.5 delete ---- 删除指定的资源
Pod没有重启的概念,重启的是容器 被自动删除和重新创建
#删除命名空间app
kubectl delete [-n <命名空间>] <资源类型> <资源名称>|--all [--force --grace-period=0]
#示例
kubectl delete pod nginx-764b95f4c5-7t65m
#若pod无法删除, 总是处于terminate状态, 则要强行删除pod
kubectl delete pod <name> [-n namespace ] --force --grace-period=0#grace-period表示过渡存活期,默认30s,在删除pod之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod。
3.6 exec ---- 跨主机登录容器
kubectl exec
可以跨主机登录容器,docker exec
只能在容器所在主机上登录。
kubectl exec -it [-n <命名空间>] <Pod资源名称> [-c 容器名称] sh|bash
#示例
kubectl exec -it nginx-764b95f4c5-hsj59 sh
3.7 scale ---- replicas(副本数)
用于调整 Kubernetes 集群中 Deployment 或 StatefulSet 对象的副本数量
kubectl scale [-n <命名空间>] <deployment|statefulset> <资源名称> --replicas=副本数
#增加副本数(扩容)
kubectl scale deployment nginx --replicas=6
#减少副本数(缩容)
kubectl scale deployment nginx --replicas=1
kubectl scale deployment nginx --replicas=0
#reolicas=0等于清空
4. 项目的生命周期
创建–>发布–>更新–>回滚–>删除
4.1 创建-----kubectl create命令
创建并运行一个或多个容器镜像。
创建一个deployment
或job
来管理容器。
kubectl create --help
kubectl create service <svc资源类型> <svc资源名称> --tcp=<clusterIP的端口:容器的端口>
#举个例子
#启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3kubectl get pods
kubectl get all
4.2 发布-----kubectl expose命令
将资源暴露为新的 Service。
kubectl expose --help
kubectl expose [-n <命名空间>] deployment <资源名称> --name <自定义svc资源名称> --type <svc资源类型> --port <clusterIP的端口> --targetPort <容器的端口>ClusterIP|NodePort|LoadBalancer|ExternalName
#示例
#为deployment的nginx创建service,
#并通过Service的80端口转发至容器的80端口上
#Service的名称为nginx-service,类型为NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
#查看pod网络状态详细信息和 Service暴露的端口
kubectl get pods,svc -o wide#查看关联后端的节点
kubectl get endpoints#查看 service 的描述信息
kubectl describe svc nginx
curl 10.244.3.3:80
curl 10.244.3.4:80
curl 10.244.4.3:80curl 192.168.67.100:30724#在master01操作 查看访问日志
kubectl logs nginx-d9d8cf5c7-6zpc2
kubectl logs nginx-d9d8cf5c7-85rvh
kubectl logs nginx-d9d8cf5c7-nffcz
4.3 更新 ----- kubectl set命令
更改现有service的一些信息
kubectl set --help
#更新 Kubernetes 集群中某个 Deployment 的容器镜像
kubectl set image deployment <deployment资源名称> <容器名>=<镜像名>
#更改 Kubernetes 中服务对象的标签选择器
kubectl set selector service <svc资源名称> '标签key=value'
#示例#查看当前 nginx 的版本号
curl -I http://192.168.67.100:30724
#将nginx 版本更新为 1.15 版本
kubectl set image deployment/nginx nginx=nginx:1.15kubectl get pods,svc -o wide
#再次查看nginx版本号
curl -I 192.168.67.100:31134
4.4 回滚 ----- kubectl rollout 命令
#查看指定 deployment 资源的历史记录,包括版本号、更新时间和事件
kubectl rollout history deployment <deployment资源名称>#回滚
kubectl rollout undo deployment <deployment资源名称> [--to-revision=N]指定版本回滚#状态
kubectl rollout status deployment <deployment资源名称>
#示例
#查看历史版本
kubectl rollout history deployment/nginx #执行回滚到上一个版本
kubectl rollout undo deployment/nginx#检查回滚状态
kubectl rollout status deployment/nginx
#执行回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1
相关文章:

[云原生2.] Kurbernetes资源管理 ---- (陈述式资源管理方式)
文章目录 1. K8s管理资源的方法类别1.1 陈述式资源管理方式1.2 声明式资源管理方式1.3 GUI式资源管理方法 2. 陈述式资源管理方式2.1 命令行工具 ---- Kubelet2.1.1 简介2.1.2 特性2.1.3 kubelet拓展命令2.1.4 kubectl基本语法2.1.5 Kubectl工具的自动补全 2.2 k8s Service 的类…...

java:IDEA中的Scratches and Consoles
背景 IntelliJ IDEA中的Scratches and Consoles是一种临时的文件编辑环境,用于写一些文本内容或者代码片段。 其中,Scratch files拥有完整的运行和debug功能,这些文件需要指定编程语言类型并且指定后缀。 举例:调接口 可以看到…...

华为 Mate 60 Pro 拆解:陆制零件比率上升至47% | 百能云芯
近日,日经新闻联合研究公司Fomalhaut Techno Solutions对华为 Mate 60 Pro 进行了拆解,揭示了这款于8月发布的新型智能手机的成本结构。拆解结果显示,该手机的国产零部件比例达到了47%,相较于三年前的 Mate 40 Pro,提高…...

ZBrush 2024(三维数字雕刻软件)
ZBrush是一款Mac数字雕刻软件,它具有以下功能: 雕刻工具:ZBrush的雕刻工具非常强大,可以让用户在3D模型上进行雕刻,就像使用传统雕塑工具一样。高精度模型创建:ZBrush可以创建高精度的3D模型,适…...

wpf devexpress 排序、分组、过滤数据
这个教程示范在GridControl如何排序数据,分组数据给一个行创建一个过滤。这个教程基于前一个教程。 排序数据 可以使用GridControl 排序数据。这个例子如下过滤数据对于Order Date 和 Customer Id 行: 1、对于Order Date 和 Customer Id 行指定Colum…...
使用Badboy录制生成 JMeter 脚本
JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner 一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——…...

V10 桌面版、服务器版系统加固
V10 桌面版、服务器版系统加固 一、 文档说明 本文档中涉及的加固方法主要包括:密码策略配置、防火墙规 则配置、禁用高风险服务等。 二、 V10 桌面版系统加固 2.1 密码策略配置 密码策略包括密码老化控制策略和密码复杂度策略。密码老化 控制策略需要配置/etc…...

mtgsig1.2简单分析
{"a1": "1.2", # 加密版本"a2": new Date().valueOf() - serverTimeDiff, # 加密过程中用到的时间戳. 这次服主变坏了, 时间戳需要减去一个 serverTimeDiff(见a3) ! "a3": "这是把xxx信息加密后提交给服务器, 服主…...

场景交互与场景漫游-osgGA库(5)
osgGA库 osgGA库是OSG的一个附加的工具库,它为用户提供各种事件处理及操作处理。通过osgGA库读者可以像控制Windows窗口一样来处理各种事件 osgGA的事件处理器主要由两大部分组成,即事件适配器和动作适配器。osgGA:GUIEventHandler类主要提供了窗口系统的…...
Leetcode -1
Leetcode Leetcode -521.最长特殊序列Leetcode - 541.反转字符串Ⅱ Leetcode -521.最长特殊序列 题目:给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列的长度。如果不存在,则返回 - 1 。 「最长特殊序列」 定义如下࿱…...

系列四、JVM的内存结构【本地接口(Native Interface)】
一、组成 本地接口由本地方法栈(Native Method Stack)、本地方法接口(Native Interface)、本地方法库组成。 二、本地接口的作用 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C程序,Jav…...

大型语言模型中的幻觉研究综述:原理、分类、挑战和未决问题11.15+11.16+11.17
大型语言模型中的幻觉研究综述:原理、分类、挑战和未决问题11.15 摘要1 引言2 定义2.1 LLM2.3 大语言模型中的幻觉 3 幻觉的原因3.1 数据的幻觉3.1.1 有缺陷的数据源3.1.2 较差的数据利用率3.1.3 摘要 3.2 来自训练的幻觉3.2.1训练前的幻觉3.2.2来自对齐的幻觉3.2.3…...
redis悲观锁和乐观锁
redis悲观锁 Redis加锁命令分有INCR、SETNX、SET 一、INCR锁 key不存在时,key的值会先被初始化为0,其它用户在执行INCR操作进行加一, 如果返回的数大于1,说明这个锁正在被使用当中,通常用在同时只能有一个人可以操作某…...
前端项目练习,首页退出登录功能,清除token --点击事件 quitFn
<el-menu-item index"2" click"quitFn"><i class"el-icon-switch-button">退出</i> </el-menu-item>quitFn() {// 为了让用户体验更好,来个确认提示框this.$confirm("确认退出登录吗?退出登…...

nodejs+vue杰和牧场管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计
系统涉及的对象是奶牛。 系统使用员工有管理员和普通员工。 管理员有修改的权限,普通员工没有。系统包含新闻功能,最好是有个后台管理,在后台输入新闻标题和内容,插入图片,在网页上就可以展示。最好再有个轮播图。 新闻…...

基于STM32的蓝牙低功耗(BLE)通信方案设计与实现
蓝牙低功耗(Bluetooth Low Energy,简称BLE)是一种能够在低功耗环境下实现无线通信的技术。在物联网应用中,BLE被广泛应用于传感器数据采集、健康监测设备、智能家居等领域。本文将基于STM32微控制器,设计并实现一个简单…...

qt 重载信号,使用““方式进行connect()调用解决方案
问题 在Qt中,重载的信号默认是无法使用&这种方式调用的。 因为&只能绑定到一个具体的信号,而重载的信号名称相同,编译器无法确定要绑定哪一个信号。 解决方案 如果非要使用&绑定重载的信号,可以使用函数指针进行转…...

阿里云+宝塔部署项目(Java+React)
阿里云服务器宝塔面板部署项目(SpringBoot React) 1. 上传所需的文件到服务器 比如jdk包和java项目的jar:这里以上传jar 为例,创建文件夹,上传文件; 在创建的文件夹下上传jar包 上传jdk 2. 配置jdk环境 3.…...

Linux_系统信息_uname查看内核版本、内核建立时间、处理器类型、顺便得到操作系统位数等
1、uname --help 使用uname --help查看uname命令的帮助信息 2、uname -a 通过上面的help就知道-a选项显示全部内容时的含义了。 内核名是Linux主机名是lubancat,如果想看主机名可以使用命令hostname;内核版本是Linux 4.19.232,建立时间为2…...
screen中conda激活环境后登录jupyter notebook导入包提示找不到,但是在命令行中就可以导入包
问题:screen中conda激活环境后登录jupyter notebook导入包提示找不到,但是在命令行中就可以导入包 解决方法: screen可能有bug,当在screen中conda激活环境后登录jupyter notebook出现问题,import torch提示没有安装好…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...