【Kubernetes】k8s集群中kubectl的陈述式资源管理

news2024/12/25 9:05:03

目录

一.k8s集群资源管理方式分类

1.陈述式资源管理方式

2.声明式资源管理方式

二.陈述式资源管理方法

三.kubectl命令

四.项目生命周期

1.创建    kubectl create命令

2.发布    kubectl expose命令

3.更新    kubectl set

4.回滚    kubectl rollout 

5.删除    kubectl delete


一.k8s集群资源管理方式分类

1.陈述式资源管理方式

  • 增删查比较方便,但是改非常不方便
  • 使用一条kubectl命令和参数选项来实现资源对象管理操作

2.声明式资源管理方式

  • yaml文件管理
  • 使用yaml配置文件里定义的配置,实现资源对象的管理操作

二.陈述式资源管理方法

  • kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
  • kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
  • kubectl 的命令大全:kubectl --help
  • k8s中文文档:http://docs.kubernetes.org.cn/683.html
  • 对资源的增、删、查操作比较方便,但对改的操作就不容易了

三.kubectl命令

查看版本信息
kubectl version

查看资源对象简写
kubectl api-resources

查看集群信息
kubectl cluster-info
kubectl get cs
kubectl get nodes
配置kubectl自动补全
source <(kubectl completion bash)
 
vim /etc/bashrc  #可添加到该文件的末尾
bash切换环境即可

node节点查看日志
journalctl -u kubelet -f

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-c5zqz  #-n指定具体命名空间查看指定的kube-flannel-ds-c5zqz资源
 
kubectl get -n kube-flannel pods kube-flannel-ds-c5zqz -o wide  #显示kube-flannel-ds-c5zqz资源的详细信息

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   #查看所有资源

查看 master 节点状态
kubectl get componentstatuses
kubectl get cs

查看命名空间
kubectl get namespace
kubectl get ns
命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的

查看default命名空间的所有资源
kubectl get all [-n default]

创建命名空间
kubectl get ns
 
kubectl create namespace xy101
kubectl create deployment nginx1 --image=nginx -r 3 --port=80 -n xy101   #即可指定命名空间创建资源,不可在同一个命名空间中创建相同名称的同种资源
kubectl get -n xy101 all

查看某个资源的详细信息
kubectl describe -n xy101 deployments.apps nginx1  #deployments.apps资源的名称

查看命名空间xy101 中的pod 信息

kubectl describe -n <命名空间> <资源类型> <资源名称> 
 
kubectl describe -n xy101 pod nginx1-794dd8cb7b-fcxnx 

删除pod
kubectl delete -n <命名空间> <资源类型> <资源名称> 
 
kubectl delete -n xy101 pod nginx1-794dd8cb7b-bc6cv   #此种方法创建的pod资源若直接删除pod,无法删除由于设置了副本数,删除一个会自动再创建一个

创建pod资源方法2(此种方法创建的pod是独立存在的,没有控制器管理)
kubectl run -n xy101 nginx2 --image=nginx --port=80   #此种方法创建的pod无控制器进行管理,可直接删除
 
kubectl delete -n xy101 pod nginx2   #此种方法创建的pod可直接删除

kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录

kubectl exec -n <命名空间> -it <Pod资源名称> [-c 容器名称] -- sh|bash|命令
 
kubectl exec -it -n xy101 pod/nginx1-794dd8cb7b-cbdjd -- sh   
exec -it -n xy101 pod/nginx1-794dd8cb7b-cbdjd -- ls -l  #在不进入容器的前提下查看其中内容

当一个pod中存在多个容器,可使用-c指定登录的容器
 
kubectl describe -n xy101 pod/nginx1-794dd8cb7b-cbdjd  #查看资源下的容器
kubectl exec -it -n xy101 -c nginx pod/nginx1-794dd8cb7b-cbdjd -- sh   #使用-c指定登录的容器

查看Pod中容器日志
kubectl logs -n <命名空间> <Pod资源名称> [-c 容器名称] [-f] [-p]       #-p表示查看Pod容器重启前的日志
 
kubectl logs -n xy101 nginx1-794dd8cb7b-cbdjd -c nginx

扩缩容
kubectl scale -n <命名空间> <Pod控制器资源类型>    <资源名称> --replicas=副本数
                            deployment|statefulset
 
kubectl scale -n xy101 deployment nginx1 --replicas=3

删除副本控制器
kubectl get -n xy101 all
kubectl delete -n xy101 deployments.apps nginx2

删除(重启)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-lmjls --force --grace-period=0
kubectl get -n xy101 all

删除全部pod资源进行重建
kubectl delete -n xy101 pods --all
kubectl get -n xy101 all

删除命名空间
kubectl delete ns 网络空间
kubectl delete ns xy101

查看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

如何修改标签选择器的值
#创建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'

四.项目生命周期

项目的生命周期:创建-->发布-->更新-->回滚-->删除

1.创建    kubectl create命令

  • 创建并运行一个或多个容器镜像
  • 创建一个deployment 或job 来管理容器
kubectl create ns xy101   #创建命名空间
kubectl create -n xy101 deployment nginx1 --image=nginx --port=80 --replicas=3  #创建资源


 

2.发布    kubectl expose命令

  • 将资源暴露为新的 Service
为deployment的nginx创建service,并通过Service的8080端口转发至容器的80端口上,Service的名称为
nginx-service,类型为NodePort

kubectl expose deployment nginx --port=8080 --target-port=80 --name=nginx-service --type=NodePort

kubectl create service nodeport nginx-service --tcp=8080:80

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中服务对外部服务访问
创建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.194.137: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 :31373    #在每个节点都可监听到这个端口,  K8S集群外部/内部用户都可以通过nodeIP:nodePort来访问service

3.更新    kubectl set

重新创建一个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 

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=5  #指定回滚版本
kubectl rollout status -n xy101 deployment myapp-test01  #查看回滚状态

5.删除    kubectl delete

kubectl delete -n xy101 deployments.apps myapp-test01 #删除控制器
kubectl delete -n xy101 service test02   #删除service

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

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

相关文章

notes for datawhale summer camp chemistry task3

Transformer transformer的诞生 循环神经网络&#xff1a;由于所有的前文信息都蕴含在一个隐向量里面&#xff0c;这会导致随着序列长度的增加&#xff0c;编码在隐藏状态中的序列早期的上下文信息被逐渐遗忘。 卷积神经网络&#xff1a;受限的上下文窗口在建模长文本方面天…

木卫四发布《2024半年度汽车漏洞及威胁情报-简报》

随着智能汽车技术的飞速发展&#xff0c;其安全问题也日益成为行业关注的焦点。木卫四威胁情报中心对2024年上半年国内外智能汽车领域的漏洞情报及安全事件进行了全面研究和分析&#xff0c;发布了《2024半年度汽车漏洞及威胁情报-简报》。本报告中智能汽车威胁情报的来源多样&…

宏集方案 | 传统建筑智能化改造,迈向物联新时代

前言 智能建筑涉及多个系统的集成&#xff0c;如照明、空调、安防等&#xff0c;这些系统的兼容性和协调运作是一大挑战。然而&#xff0c;传统的工业建筑和商业楼宇受早期设计的局限&#xff0c;多个控制系统间互不兼容&#xff0c;并且难以重新部署通信线缆。 针对传统建筑…

Java:查看线程信息

示例用代码 public class Main {static class MyThread extends Thread {Overridepublic void run() {while (true) {System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}}public st…

【Canvas与艺术】九角大楼

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>九角大楼</title><style type"text/css">.cen…

“光影魔术手”:一款让照片编辑更高效的软件工具

&#x1f680;&#x1f680;&#x1f680; 摄影爱好者和技术控们&#xff0c;想要照片编辑技能更上一层楼吗&#xff1f;“光影魔术手”带你探索照片美化的高级技巧&#xff0c;这款软件不仅是工具&#xff0c;更是你的技术利器&#xff01; &#x1f308;【专业调色功能解析】…

AS400==使用COBOL写个HELLWORLD

登录后输入命令WRKOBJPDM 可以看到在我的lib下拥有的FILES列表 随便选一个&#xff0c;在OPT输入12回车打开这个FILE&#xff0c;最下面一排提示了&#xff0c;F6创建一个新的MEMBER输入这个FILE FILE相当于文件夹&#xff0c;MEMBER相当于一个代码文件test.py。 移动光标输入…

Leetcode—400. 第 N 位数字【中等】

2024每日刷题&#xff08;151&#xff09; Leetcode—400. 第 N 位数字 算法思想 参考自k神 实现代码 class Solution { public:int findNthDigit(int n) {int digitSize 1;int startNum 1;long long count 9;while(digitSize * count < n) {n - count * digitSize;di…

用Python打造精彩动画与视频,5.1 Matplotlib基础及其动画功能

5.1 Matplotlib基础及其动画功能 在本小节中&#xff0c;我们将介绍Matplotlib的基础知识及其动画功能。Matplotlib是Python中最流行的绘图库之一&#xff0c;它可以生成静态、动态和交互式的图表。通过Matplotlib的动画模块&#xff0c;我们可以创建各种动画效果&#xff0c;…

达梦数据库系列—44.SQL调优

目录 SQL优化思路 1、定位慢sql 2、SQL分析方法 2.1 执行计划 2.2 ET 工具 2.3 dbms_sqltune 工具 3、SQL语句优化 3.1 索引 3.2 SQL语句改写 3.3 表设计优化 3.4 表的连接方式 3.5 HINT 4、统计信息 SQL优化思路 1、定位慢sql 待优化的SQL大致可分为两类&#…

PCIe学习笔记(15)

设备就绪状态 (Device Readiness Status&#xff0c;DRS)消息 &#xff08;Device Readiness Status (DRS) 是PCIe规范中引入的一种机制&#xff0c;旨在改进设备初始化和就绪状态的检测与报告。 在以往的PCIe版本中&#xff0c;系统通常依赖于固定的超时机制来判断设备是否已…

天机学堂 第四天 高并发优化总结

前端每隔15秒就发起一次请求&#xff0c;将播放记录写入数据库。 但问题是&#xff0c;提交播放记录的业务太复杂了&#xff0c;其中涉及到大量的数据库操作&#xff1a; 如何进行优化 单机并发能力 变同步为异步 合并写请求 提高单机并发&#xff1a;优化SQL&#xff0c;尽…

vscode中WSL插件的安装配置

1.安装WSL插件 2.点击左下角的蓝色区域&#xff0c;Connect to WSL连接下载Linux系统&#xff0c;我这里下载Ubuntu ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7ec21d81b4ec49f3856be2d8013bc12f.png 3.输入用户名和密码 4.成功连接 5.配置过程中出现的问题 …

LinuxUNIX系统编程手册——(十四)系统编程概念

14.1 设备专用文件&#xff08;设备文件&#xff09; 设备专用文件与系统的某个设备相对应。在内核中&#xff0c;每种设备类型都有与之相对应的设备驱动程序&#xff0c;用来处理设备的所有 I/O 请求。设备驱动程序属内核代码单元&#xff0c;可执行一系列操作&#xff0c;&a…

服务器SSL证书年费一般多少钱?

SSL证书作为网络安全的重要组成部分&#xff0c;不仅能够保护数据传输的安全性&#xff0c;还能增强用户对网站的信任度。然而&#xff0c;面对市场上众多的SSL证书选项&#xff0c;许多人可能会感到困惑&#xff1a;究竟应该选择哪种类型的SSL证书&#xff1f;它们的价格又是怎…

【从零开始一步步学习VSOA开发】搭建VSOA运行环境

搭建VSOA运行环境 为方便 VSOA 的运行和调测&#xff0c;这里选择RealEvo-Simulator 下的 AMD64 平台作为 VSOA 的硬件运行环境&#xff0c;操作系统则选择标准版的 SylixOS 而不是容器版的SylixOS。 下载虚拟机资源 RealEvo-Simulator 并不自带 AMD64 平台虚拟机&#xff0…

开发板与ubuntu不能ping通怎么办?

TOC 第一步&#xff1a;VMware 设置 打开 VMware Workstation Pro 里的 虚拟机 -> 设置 设置网络适配器为桥接模式。这里不要勾选“复制物理网络连接状态”。 因为电脑是 WiFi 上网&#xff0c;所以需要添加一个网络适配器并设置成 NAT 模式&#xff0c;供虚拟机上网。具…

19066 第K小子串

这个问题可以通过使用集合&#xff08;set&#xff09;和优先队列&#xff08;priority_queue&#xff09;来解决。我们首先遍历字符串的所有子串&#xff0c;然后将这些子串放入一个集合中&#xff0c;这样可以去除重复的子串。然后我们将集合中的子串放入一个优先队列中&…

jvm方法调用指令invokestatic,invokespecial,invokeinterface,invokevirutal分析

写在前面 本文来看下jvm方法调用相关的4个指令invokestatic,invokespecial,invokeinterface,invokevirutal。 1&#xff1a;如何来记 1.1&#xff1a;静态绑定和动态绑定 如果是在编译期就能确定要调用的方法&#xff0c;就叫做静态绑定&#xff0c;比如构造函数方法&#…

Redis RDB AOF持久化 主从集群同步原理

RDB RDB Redis数据备份文件 也被叫做Redis数据快照 简单来说就是 把内存中的所有数据记录到磁盘中 当Redis实例故障实例重启后从磁盘读取快照文件恢复数据 快照文件称为RDB文件 默认时保存在当前运行目录执行时机 执行save命令 127.0.0.1:6379> save OK 127.0.0.1:6379&g…