关于k8s集群中kubectl的陈述式资源管理
1、k8s集群资源管理方式分类
(1)陈述式资源管理方式:增删查比较方便,但是改非常不方便
使用一条kubectl命令和参数选项来实现资源对象管理操作
(2)声明式资源管理方式:yaml文件管理
使用yaml配置文件里定义的配置,实现资源对象的管理操作
2、陈述式资源管理方法
1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
3.kubectl 的命令大全
kubectl --help
k8s中文文档:http://docs.kubernetes.org.cn/683.html
4.对资源的增、删、查操作比较方便,但对改的操作就不容易了
3、kubectl命令
(1)通用操作
1)查看版本信息
kubectl version
2)查看资源对象简写
kubectl api-resources
3)查看集群信息
kubectl cluster-info #查看集群信息
kubectl get cs #查看master节点组件状态
kubectl get nodes #查看k8s所有node节点状态
4)配置kubectl自动补全
source <(kubectl completion bash) #默认只在当前shell有效vim /etc/bashrc #可添加到该文件的末尾
bash切换环境即可
5)node节点查看日志
journalctl -u kubelet -f #-f实时跟踪
(2)基本管理信息查看
kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
--all-namespaces 或 -A :表示显示所有命名空间,
--show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app=nginx :仅显示包含app标签,且值为nginx的资源wide:显示详细信息
kubectl get -n kube-flannel pods #查看命名空间kube-flannel下的所有pod资源
kubectl get -n kube-flannel pods kube-flannel-ds-b9765 #-n指定具体命名空间查看指定的kube-flannel-ds-b9765资源kubectl get -n kube-flannel pods kube-flannel-ds-b9765 -o wide #显示kube-flannel-ds-b9765
资源的详细信息
kubectl get -n kube-system pods --show-labels # --show-labels 查看指定命名空间下资源的标签
kubectl get -n kube-system pods --show-labels -l k8s-app #通过-l筛选k8s-app 标签的资源
kubectl get -n kube-system pods --show-labels -l k8s-app=kube-dns #进一步筛选k8s-app标签值等于kube-dns的资源
kubectl get -n kubernetes-dashboard all #all选项会列出指定命名空间下pod、service、控制器资源
kubectl get -n kubernetes-dashboard pods
kubectl get -n kubernetes-dashboard pods,service
kubectl get -n kubernetes-dashboard pods,service,deploy
#想提示查看多个资源,可在资源中间以,分隔
kubectl get -n kubernetes-dashboard all #查看所有资源
1)查看 master 节点状态
kubectl get componentstatuses
kubectl get cs
2)查看命名空间
kubectl get namespace
kubectl get ns
//命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的
3)查看default命名空间的所有资源
kubectl get all [-n default]
(3)创建查看pod资源
1)创建pod资源方法1(此种方法不能直接删除pod资源,因为指定了副本数,删除后会自动创建新的副本)
1、创建命名空间并创建副本控制器来启动Pod
kubectl get nskubectl create namespace xy101
kubectl create deployment nginx1 --image=nginx -r 3 --port=80 -n xy101 #即可指定命名空间创建资源,不可在同一个命名空间中创建相同名称的同种资源
kubectl get -n xy101 all
2、查看某个资源的详细信息
kubectl describe -n xy101 deployments.apps nginx1 #deployments.apps资源的名称
3、查看命名空间xy101 中的pod 信息
kubectl describe -n <命名空间> <资源类型> <资源名称> kubectl describe -n xy101 pod nginx1-794dd8cb7b-4klp6
4、删除pod
kubectl delete -n <命名空间> <资源类型> <资源名称> kubectl delete -n xy101 pod nginx1-794dd8cb7b-4klp6 #此种方法创建的pod资源若直接删除pod,无法删除由于设置了副本数,删除一个会自动再创建一个
2)创建pod资源方法2(此种方法创建的pod是独立存在的,没有控制器管理)
kubectl run -n <命名空间> <Pod资源名称> --image=镜像 --port=容器端口kubectl run -n xy101 nginx2 --image=nginx --port=80 #此种方法创建的pod无控制器进行管理,可直接删除kubectl delete -n xy101 pod nginx2 #此种方法创建的pod可直接删除
(4)登录容器
kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
kubectl exec -n <命名空间> -it <Pod资源名称> [-c 容器名称] -- sh|bash|命令kubectl exec -it -n xy101 pod/nginx1-794dd8cb7b-cbxjz -- sh
kubectl exec -it -n xy101 pod/nginx1-794dd8cb7b-cbxjz -- ls -l #在不进入容器的前提下查看其中内容
当一个pod中存在多个容器,可使用-c指定登录的容器kubectl describe -n xy101 pod/nginx1-794dd8cb7b-cbxjz #查看资源下的容器
kubectl exec -it -n xy101 -c nginx pod/nginx1-794dd8cb7b-cbxjz -- sh #使用-c指定登录的容器
(5) 查看容器日期、扩缩容
1)查看Pod中容器的日志
kubectl logs -n <命名空间> <Pod资源名称> [-c 容器名称] [-f] [-p] #-p表示查看Pod容器重启前的日志kubectl logs -n xy101 nginx1-794dd8cb7b-cbxjz -c nginx
2)扩缩容
kubectl scale -n <命名空间> <Pod控制器资源类型> <资源名称> --replicas=副本数deployment|statefulsetkubectl scale -n xy101 deployment nginx1 --replicas=2
(6)删除操作
1)删除副本控制器
kubectl get -n xy101 all
kubectl delete -n xy101 deployments.apps nginx1
删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起,若pod无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止podkubectl delete -n xy101 pod nginx1-794dd8cb7b-8589m --force --grace-period=0
kubectl get -n xy101 all
2)删除全部pod资源进行重建
kubectl delete -n xy101 pods --all
kubectl get -n xy101 all
3)删除命名空间
kubectl delete ns 网络空间
kubectl delete ns xy101
4)查看service关联的Pod端点
kubectl describe -n <命名空间> <资源类型> <资源名称>
kubectl describe -n xy101 svc svc-nginx1
kubectl get -n xy101 endpoints <资源名称> #直接查看关联端点
#以上两种方法可以查看端点不多的情况,若端点比较多就无法详细查看到kubectl describe -n <命名空间> endpoints <资源名称>
kubectl describe -n xy101 endpoints svc-nginx1
5)如何修改标签选择器的值
#创建service
kubectl create -n <命名空间> service <svc资源类型> <资源名称> --tcp=<clusterIP的端口>:<容器端口>
kubectl create -n xy101 service nodeport svc-1 --tcp=8080:80
#修改service标签选择器
kubectl set -n <命名空间> selector <资源类型> <资源名称> '标签key=value'kubectl set -n xy101 selector svc svc-1 'app=nginx1'
4、项目的生命周期
项目的生命周期:创建-->发布-->更新-->回滚-->删除
(1)创建
kubectl create ns xy101 #创建命名空间
kubectl create -n xy101 deployment nginx1 --image=nginx --port=80 --replicas=3 #创建资源
(2)发布
service 的 type 类型:
●ClusterIP(默认类型):分配一个集群内部的虚拟 IP 地址,仅在集群内部可访问。例如Pod和Pod之间的通信,如果是Kubernetes集群外的请求访问是不行的。●NodePort:宿主机上开启一个特定端口(默认范围 30000-32767),直接与Pod的端口相连,实现访问宿主机IP:端口能够直接访问到Pod。用途:允许外部访问,但通常用于开发或测试。
●LoadBalancer:使用外接负载均衡器完成到服务的负载分发,此模式需要使用云服务商提供的负载均衡器,将请求分发到所有的Node上,再结合kube-proxy实现流量接入:
外部客户端 -> 云负载均衡器 -> Kubernetes 节点 -> kube-proxy -> PodLoadBalancer和NodePort很相似,目的都是向外部暴露一个端口,区别在于LoadBalancer会在集群的外部再来做一个负载均衡设备,而这个设备需要外部云环境支持的,外部服务发送到这个设备上的请求,会被设备负载均衡转发到K8S集群中。
●externalName:将外部服务映射到集群内部,并以DNS的形式用于Pod中服务对外部服务访问。
Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。
Service 通过 Label Selector 实现的对一组的 Pod 的访问。
对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式访问 Service,再由 Service 重定向到相应的 Pod。
创建service方法1
kubectl expose -n <命名空间> <Pod控制器资源类型> <资源名称> --name=<svc资源名称> --tpye=<svc类型> --port=<clusterIP的端口> --targetPort=<容器端口>kubectl expose -n xy101 deployment nginx1 --name=svc-nginx1 --port=8080 --target-port=80 --type=ClusterIP #创建类型为ClusterIP的service所有节点服务器即可通过访问http://clusterIP:port访问service
curl http://10.96.140.49:8080
kubectl expose -n xy101 deployment nginx1 --name=svc-nginx2 --port=8080 --target-port=80 --type=NodePort #创建service类型为NodePortkubectl get -n xy101 svcnetstat -lntp | grep :31392 #在每个节点都可监听到这个端口, K8S集群外部/内部用户都可以通过nodeIP:nodePort来访问service
(3)更新
重新创建一个service做测试
kubectl create -n xy101 deployment myapp-test01 --image=soscscs/myapp:v1 --port=80 --replicas=2 #创建pod资源
kubectl expose -n xy101 deployment myapp-test01 --name=test02 --port=8080 --target-port=80 --type=NodePort #创建service,类型选择NodePort
外部服务器即可通过nodeip:nodeport访问关联的pod
kubectl set image -n <命名空间> <Pod控制器资源类型> <资源名称> <容器名=镜像名:标签>
kubectl set image -n xy101 deployment myapp-test01 myapp=soscscs/myapp:v2kubectl describe -n xy101 deployments.apps myapp-test01
(4)回滚
kubectl rollout history -n <命名空间> <Pod控制器资源类型> <资源名称> kubectl rollout undo -n <命名空间> <Pod控制器资源类型> <资源名称> [--to-revision=N]kubectl rollout status -n <命名空间> <Pod控制器资源类型> <资源名称>kubectl rollout history -n xy101 deployment myapp-test01 #查看历史回滚记录
kubectl rollout undo -n xy101 deployment myapp-test01 #撤销上一次的 rollout
kubectl rollout undo -n xy101 deployment myapp-test01 --to-revision=2 #指定回滚版本
kubectl rollout status -n xy101 deployment myapp-test01 #查看回滚状态
(5)删除
kubectl delete -n xy101 deployments.apps myapp-test01 #删除控制器
kubectl delete -n xy101 service test02 #删除service
总结
service资源的四种类型:
ClusterIP:默认的service资源类型,可提供clusterIP:Port供k8s集群内部访问service关联的pod端点
NodePort:会在每个node节点上都开启相同的端口,k8s集群内、外部用户可以通过nodeIP:nodePort来访问service关联的pod端点
LoadBalancer:借助第三方云负载均衡器,将请求分发到k8s集群的node节点上,再通过nodeIP:nodePort来访问service关联的pod端点
externalName:相当于给外部地址(域名/IP)做映射,k8s集群内的pod可以通过这个service访问相关的外部服务
service是通过标签选择器匹配pod的标签来自动发现pod的端点(podIP: containerPort)
service的端口:
Port:service的clusterIP使用的端口,只能在k8s集群内部被访问到,k8s集群内部的客户端可通过clusterIP:port来访问service
nodePort:NodePort类型的service使用的端口,会在每个节点上都开启相同的端口,也就是nodeIP使用的端口(默认访问为30000~32767);k8s集群外部、内部用户都可以通过nodeIP:nodePort来访问service
targetPort:pod容器使用的端口,service会将发送给port或nodeport的请求转发给targetPort映射的pod容器端口
相关文章:

关于k8s集群中kubectl的陈述式资源管理
1、k8s集群资源管理方式分类 (1)陈述式资源管理方式:增删查比较方便,但是改非常不方便 使用一条kubectl命令和参数选项来实现资源对象管理操作 (2)声明式资源管理方式:yaml文件管理 使用yam…...

XML 学习笔记
简介: (1)XML:可扩展性标记语言,用于传输和存储数据,而不是展示数据,是W3C 推举的数据传输格式。 XML的标签必须自定义,但是在写标签名的时候一定要有含义。 XML 只能有一个根节点…...

MongoDB未授权访问漏洞
2.MongoDB未授权访问漏洞 mongodb数据库是由C编写,主要是为了提供web应可用扩展的一种高性能数据库。开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增、删、改、查高危动作)而且可以远程访问数据库…...

数据安全、信息安全、网络安全区别与联系
关键字: 信息安全 数据安全 网络安全 [导读] 让人更好理解 “数据安全”、“信息安全”、“网络安全” 三者间的区别与联系了,我们汇总了官方机构给这三者的定义,并且网友也给出了自己的看法,一起来看看。 在 “互联网 ” 被广…...

Jenkins未授权访问漏洞 *
漏洞复现 步骤一:使用以下fofa语法进行产品搜索.... port"8080" && app"JENKINS" && title"Dashboard [Jenkins]" 步骤二:在打开的URL中...点击Manage Jenkins --> Scritp Console在执行以下命令..…...
【爬虫原理】
《爬虫》 1、爬虫的概念 概念:(spider,网络蜘蛛)通过互联网上一个个的网络节点,进行数据的提取、整合以及存储 分类: 通用爬虫(了解) 主要用于搜索引擎(百度、…...

计算机组成原理 —— 指令流水线的基本概念
计算机组成原理 —— 指令流水线的基本概念 串行执行(Serial Execution)串行执行的特点串行执行的局限性串行执行的应用场景 并行执行定义基本原理五段式指令流水线优点缺点 流水线的性能指标示例计算 我们来了解一下指令流水线: 首先在这之…...
Python爬虫技术 第31节 持续集成和自动化部署
持续集成和自动化部署 Git版本控制 Git 是一个非常流行的分布式版本控制系统,用于跟踪对项目文件的修改。对于爬虫项目来说,使用Git可以帮助你管理代码的不同版本,协同开发,并且可以在出现问题时回滚到之前的版本。 基本操作&a…...
数据结构(C语言版)(第2版)课后习题答案
数据结构(C语言版)(第2版)课后习题答案 李冬梅 2015.3 目 录 第 1 章 绪论 1 第 2 章 线性表 5 第 3 章 栈和队列 13 第 4 章 串、数组和广义表 26 第 5 章 树和二叉树 33 第 6 章 图 43 第 7 章 查找 54 第 8 章 排序 65…...
打开轮盘锁问题(LeetCode)的分析总结及进一步提问
打开轮盘锁问题分析总结,及进一步提问:请给出一组最小步数下的号码序列组合 题目描述 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由…...

python——joblib进行缓存记忆化-对计算结果缓存
问题场景 在前端多选框需要选取多个数据进行后端计算。 传入后端是多个数据包的对应路径。 这些数据包需要按一定顺序运行,通过一个Bag(path).get_start_time() 可以获得一个float时间值进行排序,但由于数据包的特性,这一操作很占用性能和时…...

Linux文件管理
系列文章目录 提示:仅用于个人学习,进行查漏补缺。 1.Linux介绍、目录结构、文件基本属性、Shell 2.Linux常用命令 3.Linux文件管理 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1…...

《Unity3D网络游戏实战》学习与实践--制作一款大乱斗游戏
角色类 基类Base Human是基础的角色类,它处理“操控角色”和“同步角色”的一些共有功能;CtrlHuman类代表“操控角色”,它在BaseHuman类的基础上处理鼠标操控功能;SyncHuman类是“同步角色”类,它也继承自BaseHuman&…...
文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑源-荷不确定性的省间电力现货市场潮流风险概率评估》
本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…...
Pinterest 选择采用 TiDB
原文来源: https://tidb.net/blog/9f000c95 作者:Pinterest 公司高级软件工程师 Alberto Ordonez Pereira ;高级工程经理 Lianghong Xu 声明:本文转载于 https://medium.com/pinterest-engineering/tidb-adoption-…...
【Python】 如何用 Docker 打包一个 Python 脚本
这是我父亲 日记里的文字 这是他的生命 留下留下来的散文诗 几十年后 我看着泪流不止 可我的父亲已经 老得像一个影子 🎵 许飞《父亲写的散文诗》 如何用 Docker 打包一个 Python 脚本 Docker 是一个开源的容器化平台,允许开发者将…...

从“幕后”到“台前”:一文读懂API经济如何促进企业的创新与增长
API(Application Programming Interface,应用程序接口)指一组定义软件程序如何与其他组件、服务或系统交互的规范。在传统的IT语境中,API往往更多承担前后端对接或应用系统间内部集成渠道的作用。但在当今大数据与智能化的时代&am…...

解锁PDF新姿势:2024年PDF转图片工具精选
随着数字化办公的普及和文档处理需求的日益增长,PDF转图片工具已成为日常工作中不可或缺的一部分。这些工具不仅帮助用户轻松地将PDF文件转换为图片格式,还提供了丰富的编辑、转换和批量处理功能,极大地提高了工作效率。 1.福昕PDF转换大师&…...

Node.js(8)——Express的基本使用
监听GET请求 通过app.get()方法,可以监听客户端GET请求,具体语法: app.get(请求URL,function(req,res){处理函数}) 监听POST请求 语法: app.post(请求URL,function(req,res){处理函数}) 把内容响应给客户端 通过res.send()方法…...

Linux--应用层协议HTTP
HTTP协议 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,它基于TCP/IP通信协议来传送数据,规定了浏览器与服务器之间数据传输的规则,确保数据能够在网络源头…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...