关于k8s集群中kubectl的陈述式资源管理

news2024/11/15 5:02:41

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 ns
 
kubectl 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|statefulset
 
kubectl 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表示立即终止pod
 
kubectl 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 -> Pod

LoadBalancer和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类型为NodePort
 
kubectl get -n xy101 svc
 
netstat -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:v2
 
kubectl 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容器端口

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

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

相关文章

mac下载exe后不自动打开虚拟机

看到网上没有相关教程&#xff0c;正好解决了&#xff0c;发一下 场景&#xff1a;Mac环境下下载EXE文件&#xff0c;会导致VM虚拟机自动打开来执行文件&#xff0c;所以很烦。 解决方法&#xff1a; Mac系统-系统设置-隐私与安全-vmfusion-取消掉下载文件夹即可。 还有其他…

沃尔玛1P账号的强悍作用重要反映在那些方面?——WAYLI威利跨境助力商家

沃尔玛作为全球最大的零售商之一&#xff0c;其品牌影响力非常强大。商家通过入驻沃尔玛商超并开设1P账号&#xff0c;能够借助沃尔玛的品牌影响力来提升自身的品牌知名度和美誉度。这种品牌背书的效应&#xff0c;有助于商家吸引更多的消费者关注和购买自己的产品。 一、沃尔玛…

Android网络编程中的Http协议总结

1.Android与互联网交互的三种方式 2.初识Http协议 实际开发中我们和服务端打交道一般用得都是基于Http协议的通信&#xff0c;所以学好Http协议是非常 重要的&#xff0c;当然&#xff0c;我们不用过于考究一些细节的东西&#xff0c;有个大体的了解即可&#xff01;都是一些概…

6181P-12A2SW71DC触摸屏6181P12A2SW71DC面价

6181P-12A2SW71DC触摸屏6181P12A2SW71DC面价 6181P-12A2SW71DC触摸屏6181P12A2SW71DC面价 6181P-12A2SW71DC触摸屏6181P12A2SW71DC面价 6181P-12A2SW71DC触摸屏6181P12A2SW71DC接线图 6181P-12A2SW71DC触摸屏6181P12A2SW71DC线路图 6181P-12A2SW71DC触摸屏6181P12A2SW71D引…

FPGA知识基础之--clocking wizard ip核的使用以及modelsim与vivado联合仿真

目录 前言一、ip核是什么&#xff1f;1.1 定义1.2 分类 二、为什么使用ip核2.1 ip核的优点2.2 ip核的缺点 三、如何使用ip核&#xff08;vivado&#xff09;四、举例&#xff08;clocking wizard ip核&#xff09;4.1 简介4.2 实验任务4.3 程序设计4.3.1 系统模块4.3.2 波形绘制…

csm兼容性支持模块关闭还是开启_打开csm兼容性模式详细教程

现在新电脑中经常有网友看到bios中有一个csm选项&#xff0c;有些网友不知道是什么意思&#xff0c;其实电脑BIOS中的CSM Support英文全称Compatibility Support Module&#xff0c;翻译成中文就是兼容支持模块&#xff0c;主要是为不支持或不完全支持uefi的操作系统和Legacy模…

如何编写和发布 Python 包

编写和发布Python包是软件开发中非常常见的一项任务。通过创建Python包&#xff0c;开发者可以更好地组织代码&#xff0c;促进代码复用&#xff0c;并且便于共享和分发自己的代码库。 一、准备工作 在开始编写Python包之前&#xff0c;确保你已经安装了以下工具&#xff1a;…

Chainlit快速实现AI对话应用的界面定制化教程

前言 本文主要讲解如何自定义chainlit实现的网页界面的中的一些可以自定修改的样式的实现教程。比如修改自己的logo网站图标或者主题等 翻译 chainlit 默认网页界面显示的是英文&#xff0c;如果我们想显示为其他语言可以进行以下操作。 翻译文件位于项目根目录下的.chainli…

02 部署LVS-DR群集

2.1&#xff1a;直接路由模式&#xff08;LVS-DR&#xff09; 实验环境 关闭所有测试环境的防火墙 [rootbogon ~]# systemctl stop firewalld [rootbogon ~]# setenforce 0 1.配置LVS调速器 &#xff08;1&#xff09;配置虚拟IP地址VIP [rootlvs ~]# cd /etc/sysconfig/n…

53 程序控制结构精彩案例

1 输入若干成绩&#xff0c;求所有成绩的平均分。每输入一个成绩后询问是否继续输入下一个成绩&#xff0c;回答 yes 就继续输入下一个成绩&#xff0c;回答 no 就停止输入成绩。 scores [] # 使用列表存放临时数据 while True:x input(score: )try:scores.append(float(x)…

CEP 复杂事件处理引擎入门:初级高频量价因子策略的实现

高频交易&#xff08;High-Frequency Trading, HFT&#xff09;作为现代金融市场中的重要组成部分&#xff0c;以其高速、自动化和复杂的算法交易策略而著称。高频交易策略通过分析大量实时变化的市场数据&#xff0c;利用市场的微小价格波动迅速做出交易决策&#xff0c;从而在…

【游戏引擎之路】登神长阶(九)——《3D游戏编程大师技巧》:我想成为游戏之神!

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7月…

浅谈如何将本地代码提交至gitee

文章目录 一、下载git工具二、新建文件夹三、输入命令 [默认提交至master分支] 一、下载git工具 git官网 二、新建文件夹 随便在本机的任意位置新建一个文件夹都行。我以我本机的桌面新建一个文件夹为例&#xff0c;此文件夹可随意命名。 点击该文件夹&#xff0c;右键——…

大奖放送 | AI编程达人秀视频文章征集大赛来啦!

AI Coding&#xff0c;可以有多少种打开玩法&#xff1f;腾讯云AI代码助手是一款辅助编码工具&#xff0c;基于混元大模型&#xff0c;提供技术对话、代码补全、代码诊断和优化等能力&#xff0c;为你生成优质代码&#xff0c;帮你解决技术难题&#xff0c;提升编码效率。 我…

elasticsearch的学习(二):Java api操作elasticsearch

简介 使用Java api操作elasticsearch 创建maven项目 pom.xml文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

通过率100%!讯方技术河南经贸职业学院华为云计算HCIE订单班取得阶段性成果!

近日&#xff0c;由讯方技术与河南经贸职业学院计算机工程学院联合打造的华为云计算HCIE订单班传来喜讯。在该订单班中&#xff0c;首批参与HCIE实验考试的9名学生凭借扎实的专业知识和优秀的技能水平&#xff0c;全员顺利通过实验考试&#xff0c;通过率达到100%&#xff0c;体…

yolov8 剪枝

yolov8n 初始&#xff1a; YOLOv8n summary (fused): 185 layers, 3151904 parameters, 31936 gradients, 8.7 GFLOPs

正信晟锦:怎么追回欠债多年的钱

在这个世界上&#xff0c;最轻松的或许就是借钱时的许诺&#xff0c;而最难的&#xff0c;莫过于债务回收时的争取。尤其是在牵涉到追回那些欠债多年的旧账时&#xff0c;我们似乎总能更深地体会到“时间是把杀猪刀”的无奈。如何巧妙地追回这些遥不可及的欠款?这既是一场策略…

CSP - S 2024 模拟赛6补题报告

C S P − S 2024 模拟赛 6 补题报告 2024 年 8 月 5 日 − 2023 年 8 月 5 日 b y 邓时飏 CSP \ - \ S \ \ 2024 \ \ 模拟赛6 \ \ 补题报告 \\ 2024年8月5日 - 2023年8月5日 \\ by \ \ \ 邓时飏 CSP − S 2024 模拟赛6 补题报告2024年8月5日−2023年8月5日by 邓时飏 一、…

zotero安装与使用

文献管理工具&#xff09; Zotero软件官网https://www.zotero.org/download&#xff0c;不修改安装位置&#xff0c;默认安装就行&#xff1b;安装完成官网直接邮箱注册一个账号&#xff0c;软件登陆账号:编辑-首选项-同步 修改论文保存位置&#xff0c;有从其它电脑拷贝过来的…