【云原生】kubectl命令的详解

news2024/11/24 0:07:54

目录

  • 一、陈述式资源管理方式
    • 1.1基本查看命令
      • 查看版本信息
      • 查看资源对象简写
      • 查看集群信息
      • 配置kubectl自动补全
      • node节点查看日志
    • 1.3基本信息查看
      • 查看 master 节点状态
      • 查看命名空间
      • 查看default命名空间的所有资源
      • 创建命名空间app
      • 删除命名空间app
      • 在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl)
      • 描述某个资源的详细信息
      • 查看命名空间kube-public 中的pod 信息
      • kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
      • 查看pod中容器日志
      • 删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来
      • 若pod无法删除,总是处于terminate状态,则要强行删除pod
      • 扩缩容
      • 删除副本控制器
  • 二、项目的生命周期:创建-->发布-->更新-->回滚-->删除
    • 2.1、创建 kubectl create命令
    • 2.2、发布 kubectl expose命令
      • 为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
      • service 的 type 类型:
      • 查看pod网络状态详细信息和 Service暴露的端口
      • 在 node01 节点上操作,查看负载均衡端口
    • 2.3、更新 kubectl set
      • 获取修改模板
      • 滚动更新详解:
    • 2.4、回滚 kubectl rollout
    • 2.5、删除 kubectl delete
      • 金丝雀发布(Canary Release)

一、陈述式资源管理方式

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

1.1基本查看命令

查看版本信息

kubectl version

在这里插入图片描述

查看资源对象简写

kubectl api-resources

在这里插入图片描述

查看集群信息

kubectl cluster-info

在这里插入图片描述

配置kubectl自动补全

source <(kubectl completion bash)

在这里插入图片描述

node节点查看日志

journalctl -u kubelet -f

在这里插入图片描述

1.3基本信息查看

命令格式

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的资源

在这里插入图片描述
在这里插入图片描述

查看 master 节点状态

kubectl get componentstatuses
kubectl get cs

在这里插入图片描述

查看命名空间

kubectl get namespace
kubectl get ns

在这里插入图片描述

命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的

查看default命名空间的所有资源

kubectl get all [-n default]

在这里插入图片描述

创建命名空间app

kubectl create ns app
kubectl get ns

在这里插入图片描述

删除命名空间app

kubectl create ns app
kubectl get ns

在这里插入图片描述

在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl)

kubectl create deployment nginx-wl --image=nginx  -n kube-public

在这里插入图片描述

描述某个资源的详细信息

kubectl describe deployment nginx-wl -n kube-public
kubectl describe pod nginx-wl-d47f99cb6-hv6gz -n kube-public

在这里插入图片描述

在这里插入图片描述

查看命名空间kube-public 中的pod 信息

kubectl get pods -n kube-public
NAME                       READY   STATUS    RESTARTS   AGE
nginx-wl-d47f99cb6-hv6gz   1/1     Running   0          24m

在这里插入图片描述

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

kubectl exec -it nginx-wl-d47f99cb6-hv6gz bash -n kube-public

在这里插入图片描述

查看pod中容器日志

 kubectl logs myapp-nginx-6555579749-zwspc -n app -c <容器名> -p #-p查看pod重启前的日志

在这里插入图片描述

删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来

kubectl delete pod nginx-wl-d47f99cb6-hv6gz -n kube-public

在这里插入图片描述

若pod无法删除,总是处于terminate状态,则要强行删除pod

kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod

在这里插入图片描述

扩缩容

kubectl scale deployment nginx-wl --replicas=2 -n kube-public	# 扩容
kubectl scale deployment nginx-wl --replicas=1 -n kube-public	# 缩容

在这里插入图片描述

删除副本控制器

 kubectl delete deployment nginx-wl -n kube-public 
 kubectl delete deployment/nginx-wl -n kube-public

在这里插入图片描述

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

2.1、创建 kubectl create命令

  • 创建并运行一个或多个容器镜像。
  • 创建一个deployment 或job 来管理容器。
kubectl create --help

启动 nginx 实例,暴露容器端口 80,设置副本数 3

kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
 
kubectl get pods
kubectl get all

在这里插入图片描述

2.2、发布 kubectl expose命令

  • 将资源暴露为新的 Service。
kubectl expose --help

为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort

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

在这里插入图片描述

  • Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。
  • Service 通过 Label Selector 实现的对一组的 Pod 的访问。
  • 对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式访问 Service,再由 Service 重定向到相应的 Pod。

service 的 type 类型:

  • ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)

  • NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过
    NodeIp:NodePort 的方式Kubernetes集群外部的程序可以访问Service。 每个端口只能是一种服务,端口范围只能是
    30000-32767。

  • LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
    在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。

  • externalName:将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。

查看pod网络状态详细信息和 Service暴露的端口

kubectl get pods,svc -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE
pod/nginx-cdb6b5b95-fjm2x   1/1     Running   0          44s   172.17.26.3   192.168.80.11   <none>
pod/nginx-cdb6b5b95-g28wz   1/1     Running   0          44s   172.17.36.3   192.168.80.12   <none>
pod/nginx-cdb6b5b95-x4m24   1/1     Running   0          44s   172.17.36.2   192.168.80.12   <none>

NAME                    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        14d   <none>
service/nginx-service   NodePort    10.0.0.189   <none>        80:44847/TCP   18s   run=nginx

在这里插入图片描述

 #查看关联后端的节点


kubectl get endpoints


 #查看 service 的描述信息


kubectl describe svc nginx

在这里插入图片描述

在 node01 节点上操作,查看负载均衡端口

yum install ipvsadm -y
ipvsadm -Ln
//外部访问的IP和端口
TCP  192.168.80.11:44847 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0     

pod集群组内部访问的IP和端口
TCP  10.0.0.189:80 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0    

//在 node02 节点上操作,同样方式查看负载均衡端口

yum install ipvsadm -y
ipvsadm -Ln
TCP  192.168.80.12:44847 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0         
 
TCP  10.0.0.189:80 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0         

curl 10.0.0.189
curl 192.168.80.11:44847

在这里插入图片描述

在master01操作 查看访问日志

kubectl logs nginx-cdb6b5b95-fjm2x
kubectl logs nginx-cdb6b5b95-g28wz
kubectl logs nginx-cdb6b5b95-x4m24

2.3、更新 kubectl set

  • 更改现有应用资源一些信息。
kubectl set --help

获取修改模板

kubectl set image --help
Examples:
  # Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'.
  kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1


#查看当前 nginx 的版本号
curl -I http://192.168.80.11:44847
curl -I http://192.168.80.12:44847

//将nginx 版本更新为 1.15 版本
kubectl set image deployment/nginx nginx=nginx:1.15

//处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
kubectl get pods -w

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

滚动更新详解:

** kubectl get all**

  • DESIRED:表示期望的状态是 10 个 READY 的副本
  • CURRENT:表示当前副本的总数: 即8 个日副本 + 5 个新副本
  • UP_TO-DATE:表示当前已经完成更新的副本数: 即 5个新副本
  • AVAILABLE:表示当前处于 READY 状态的副本数: 即8个日副本。

kubectl describe deployment/nginx

  • 滚动更新通过参数 maxSurge 和 maxUnavailable 来控制副本替换的数量

  • maxSurge:此参数控制滚动更新过程中副本总数的超过 DESIRED 的上限。maxSurge 可以是具体的整数(比如 3),也可以是百分百,向上取整。maxSurge 默认值为 25%。

  • 例如,DESIRED 为 10,那么副本总数的最大值为 10 + 10 * 25% = 13,即 CURRENT 为 13。

  • maxUnavailable:此参数控制滚动更新过程中,不可用的副本相占 DESIRED 的最大比例。maxUnavailable 可以是具体的整数(比如 3),也可以是百分百,向下取整。 maxUnavailable 默认值为 25%。

  • 例如,DESIRED 为 10,那么可用的副本数至少要为 10 - 10 * 25% = 8,即 AVAILABLE 为 8。

  • 因此 maxSurge 值越大,初始创建的新副本数量就越多;maxUnavailable 值越大,初始销毁的旧副本数量就越多。

  • 理想情况下,DESIRED 为 10 的滚动更新的过程应该是这样的:

  • 首先创建 3 个新副本使副本总数达到 13 个。

  • 然后销毁 2 个旧副本使可用的副本数降到 8 个。

  • 这 2 个旧副本成功销毁后,可再创建 2 个新副本,使副本总数保持为 13 个。

  • 当新副本通过 Readiness 探测后,会使可用副本数增加,超过 8。

  • 进而可以继续销毁更多的旧副本,使可用副本数回到 8。

  • 旧副本的销毁使副本总数低于 13,这样就允许创建更多的新副本。

  • 这个过程会持续进行,最终所有的旧副本都会被新副本替换,滚动更新完成。

//再看更新好后的 Pod 的 ip 会改变

kubectl get pods -o wide

//再看 nginx 的版本号

curl -I http://192.168.80.11:44847
curl -I http://192.168.80.12:44847

2.4、回滚 kubectl rollout

  • 对资源进行回滚管理
kubectl rollout --help
//查看历史版本
kubectl rollout history deployment/nginx 

//执行回滚到上一个版本
kubectl rollout undo deployment/nginx

//执行回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1

//检查回滚状态
kubectl rollout status deployment/nginx

在这里插入图片描述
在这里插入图片描述

2.5、删除 kubectl delete

//删除副本控制器
kubectl delete deployment/nginx

//删除service
kubectl delete svc/nginx-service

kubectl get all

金丝雀发布(Canary Release)

  • Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
    (1)更新deployment的版本,并配置暂停deployment
kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx

kubectl rollout status deployment/nginx  #观察更新状态

在这里插入图片描述

在这里插入图片描述

(2)监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

kubectl get pods -w 

curl [-I] 10.0.0.189
curl [-I] 192.168.80.11:44847

(3)确保更新的pod没问题了,继续更新

kubectl rollout resume deployment/nginx

(4)查看最后的更新情况

kubectl get pods -w 

curl [-I] 10.0.0.189
curl [-I] 192.168.80.11:44847

在这里插入图片描述

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

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

相关文章

Unity背包系统与存档(附下载链接)

下载地址: https://download.csdn.net/download/qq_58804985/88184776 视频演示: 功能: 拖动物品在背包中自由移动,当物品拖动到其他物品上时,和其交换位置.基于EPPlus的背包数据与位置保存 原理: 给定一个道具池表格与一个背包表格 道具池表格负责存储所有道具的信息 背…

岩土工程监测仪器多通道振弦传感器信号转换器应用于铁路监测

岩土工程监测仪器多通道振弦传感器信号转换器应用于铁路监测 岩土工程监测是工程建设和运营过程中必不可少的环节&#xff0c;它主要是通过对地下水位、土体应力、变形、固结沉降等参数进行实时监测&#xff0c;以保证工程施工和运营的安全性和稳定性。而多通道振弦传感器信号…

JavaScript数据结构【进阶】

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录 使用 splice() 添加元素使用 slice() 复制数组元素使用展开运算符复制数组使用展开运算符合并数组使用 indexOf() 检查元素是否存在使用 for 循环遍历数组中的全部元素创建复杂的多维数组将键值对添加到对象…

阶段总结(linux基础)

目录 一、初始linux系统 二、基本操作命令 三、目录结构 四、文件及目录管理命令 查看文件内容 创建文件 五、用户与组管理 六、文件权限与压缩管理 七、磁盘管理 八、系统程序与进程管理 管理机制 文件系统损坏 grub引导故障 磁盘资源耗尽 程序与进程的区别 查…

Grafana V10 告警推送

最近项目建设完成&#xff0c;一个城域网项目&#xff0c;相关zabbix和grafana展示已经完&#xff0c;想了想&#xff0c;不想天天看平台去盯网络监控平台&#xff0c;索性对告警进行分类调整&#xff0c;增加告警的推送&#xff0c;和相关部门的提醒&#xff0c;其他部门看不懂…

绿盾用户使用看图软件每次都需要把图片解密之后才能打开查看,怎么才能不用这么麻烦打开就能看

环境: Win10专业版 绿盾控制台7.0 看图软件FastStone Image Viewer 问题描述: 绿盾用户使用看图软件FastStone Image Viewer每次都需要把图片解密之后才能打开查看,怎么才能不用这么麻烦打开就能看,用户说每次都需要把图片解密之后才能使用,实在是影响效率 解决方案…

4、长度最小的子数组

找到一个数组中&#xff0c;有多少个连续元素的和小于某个值&#xff0c;求出连续元素的长度的最小值。 滑动窗口法&#xff1a; 其本质也是快慢指针&#xff0c;一个指针指向窗口的起始位置&#xff0c;另一个指针指向窗口的终止位置。 1.定义快慢指针&#xff1a; 2.更新慢指…

css-3:什么是响应式设计?响应式的原理是什么?如何做?

1、响应式设计是什么&#xff1f; 响应式网站设计&#xff08;Responsive WEB desgin&#xff09;是一个网络页面设计布局&#xff0c;页面的设计与开发应当根据用户行为以及设备环境&#xff08;系统平台、屏幕尺寸、屏幕定向等&#xff09;进行相应的相应和调整。 描述响应式…

Unity 实现字幕打字效果

Text文本打字效果&#xff0c;TextMeshPro可以对应参考&#xff0c;差距不大&#xff0c;改改参数名就能用。改脚本原本被我集成到其他的程序集中&#xff0c;现在已经分离。 效果 实现功能 1.能够设置每行能够容纳的字数和允许的冗余 2.打字效果 3.每行打完上移 4.开头进入&…

项目实战 — 消息队列(5){统一硬盘操作}

前面已经使用数据库管理了交换机、绑定、队列&#xff0c;然后又使用了数据文件管理了消息。 那么&#xff0c;这里就创建一个类&#xff0c;讲之前的两个部分整合起来&#xff0c;对上层提供统一的一套接口&#xff0c;表示硬盘上存储的所有的类的信息。 /* * 用这个类来管理…

C++笔记之enum class和emun的区别

C笔记之enum class和emun的区别 code review! 代码,使用 enum class 的示例&#xff1a; #include <iostream>enum class Month { January, February, March, April, May, June, July, August, September, October, November, December };int main() {Month currentM…

龙迅LT8711H是Type-C/DP1.2转HDMI1.4芯片 -现货来了

1.概述 LT8711H是一款高性能Type-C / DP1.2至HDMI1.4转换器&#xff0c;旨在将USB Type-C源或DP1.2源连接至HDMI1.4接收器。 LT8711H集成了符合DP1.2的接收器和符合HDMI1.4的发送器。此外&#xff0c;还包括两个CC控制器&#xff0c;用于CC通信以实现DP Alt Mode和功率传输功…

Frida 编译(去特征)

Frida 编译&#xff08;去特征&#xff09; 编译最新版server编译往期版server更改特征使用定制库 hluwa本文引用&#xff1a; 本文环境&#xff1a; kali-linux-xfce 编译最新版server 第一步&#xff1a; 下载frida git clone --recurse-submodules https://github.com/fri…

Redis键值设计

1.1、优雅的key结构 Redis的Key虽然可以自定义&#xff0c;但最好遵循下面的几个最佳实践约定&#xff1a; 遵循基本格式&#xff1a;[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符 例如&#xff1a;我们的登录业务&#xff0c;保存用户信息&#xff0c;其key可以…

模型训练技术指南

目录 引言 1. 模型训练的重要性 2. 数据预处理 3. 特征工程 4. 模型选择与评估 5. 参数调优 6. 模型集成 7. 过拟合与欠拟合 8. 模型保存与加载 9. 分布式训练与加速 10. 最佳实践与常见问题 引言 模型训练是机器学习领域中至关重要的一步&#xff0c;它决定了模型的…

处理该文件没有与之关联的应用来执行该操作,若已经安装应用,请在“默认应用设置”页面中创建关联

一、晚上在睡觉前接到一个删除了注册表导致的错误消息 二、解决方法一&#xff1a; 桌面新建 txt&#xff0c;把下面的代码复制粘贴到 txt 文件&#xff0c;然后重命名为1.bat&#xff0c;右键以管理员身份运行。 taskkill /f /im explorer.exe reg add "HKEY_LOCAL_MA…

【数据结构与算法】二叉排序树(BST)

二叉排序树&#xff08;BST&#xff09; 需求&#xff1a; 给你一个数列{7,3,10,12,5,1,9}&#xff0c;要求能够高效的完成对数据的查询和添加。 解决方案分析 使用数组 数组未排序&#xff0c;优点&#xff1a;直接在数组尾添加&#xff0c;速度快。缺点&#xff1a;查找速…

了解华为(H3C)网络设备和OSI模型基本概念

目录 一&#xff0c;认识华为 1.华为发展史 2.华为网络设备介绍 3.VRP概述 二&#xff0c;OSI七层模型 1.七层模型详细表格 2.各层的作用 3.数据在各层之间的传递过程 4.OSI四层网络模型 一&#xff0c;认识华为 官网&#xff1a;https://www.huawei.com/cn/ 1.华为发…

记录一个CMD命令异常 文件名、目录名或卷标语法不正确。

由git clone下来导致缺少符号 使用文档格式转换-转为windows-CR LF即可。 当前测试的命令内容 >cs 文件名、目录名或卷标语法不正确。 ho 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 系统默认的nodepad好像不能转换&#xff0c;直接新建一个文件&am…

【GTest学习】

1. GTest简介&#xff1a; GTest 就是 Google Test, 它是一个免费开源的测试框架, 用于编写测试用 C语言编写的程序(C 程序也能用, 但是需要用 C编译器编译)。gtest的官方网站是&#xff1a;http://code.google.com/p/googletest/ 2.GTest下载与环境搭建&#xff1a; GTest 下…