Kubectl 详解
目录
- 陈述式资源管理方法:
- 项目的生命周期:创建-->发布-->更新-->回滚-->删除
- 声明式管理方法:
陈述式资源管理方法:
- kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
- kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
- kubectl 的命令大全
kubectl --help
k8s中文文档:http://docs.kubernetes.org.cn/683.html - 对资源的增、删、查操作比较方便,但对改的操作就不容易了
//查看版本信息
kubectl version

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

//查看集群信息
kubectl cluster-info

//配置kubectl自动补全
source <(kubectl completion 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的资源
//查看 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 delete namespace 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资源,由于存在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

项目的生命周期:创建–>发布–>更新–>回滚–>删除
1、创建 kubectl create命令
●创建并运行一个或多个容器镜像。
●创建一个deployment 或job 来管理容器。
kubectl create --help//启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3kubectl get pods
kubectl get all

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
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:448474、回滚 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/nginx5、删除 kubectl delete
//删除副本控制器
kubectl delete deployment/nginx//删除service
kubectl delete svc/nginx-servicekubectl 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/nginxkubectl 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
声明式管理方法:
- 适合于对资源的修改操作
- 声明式资源管理方法依赖于资源配置清单文件对资源进行管理
资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析) - 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
- 语法格式:kubectl create/apply/delete -f xxxx.yaml
//查看资源配置清单
kubectl get deployment nginx -o yaml//解释资源配置清单
kubectl explain deployment.metadatakubectl get service nginx -o yaml
kubectl explain service.metadata//修改资源配置清单并应用
离线修改:
修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml #修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc在线修改:
直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改//删除资源配置清单
陈述式删除:
kubectl delete service nginx声明式删除:
kubectl delete -f nginx-svc.yaml相关文章:
Kubectl 详解
目录 陈述式资源管理方法:项目的生命周期:创建-->发布-->更新-->回滚-->删除声明式管理方法: 陈述式资源管理方法: kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口kubectl 是官方的CL…...
华为OD面试记录
The experience of applying for software test engineer(Dispatcher) 记录保存 招聘岗位: 测试工程师 Base:西安 华为面试流程如下: 流程名内容机试三题,总分400分,最后一道题200分人力资源面试询问私人问题,不谈薪资一面技术面二面技术面主管问项目…...
电源控制--品质因素Q值全解
什么是品质因素Q值? 在电源控制中,品质因素 Q 值通常用于描述电源滤波器的性能。电源滤波器用于减小电源中的噪声和干扰,以提供干净稳定的电源供应给电子设备。 品质因素 Q 值在电源滤波器中表示滤波器的带宽和中心频率之比,用于…...
实际工作中通过python+go-cqhttp+selenium实现自动检测维护升级并发送QQ通知消息(程序内测)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 首先,今年比较忙没有多余时间去实操创作分享文章给大家,那就给大家分享下博主在实际工作中的一点点内容吧,就当交…...
EC200 CAT1 拨号PPP
**硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 DTU902 产品详情 G5501 产品详情 目前 DTU系列 产品,WIFI4G拨号 ,默认开机自启动拨号。 WIFI 只需要 根据现场 修改SSID热点和密码…...
外网通过ipv6访问家里设备
想从公司访问家里的设备,比较轻松方便的,用向日葵也可以远程。但是家里电脑比较old的了,向日葵开起来,占用内存挺大的,想尝试windows自带的“mstsc”,所以硬着头皮搞ipv6. (重点提示࿱…...
docker 如何使用代理
为docker添加代理有三种情况: 为docker pull(dockerd)添加代理为Docker build添加代理为docker容器添加代理 参考文章如下: 如何优雅的给 Docker 配置网络代理Configure the daemon with systemd 其中,如果在使用代…...
Go和Java实现装饰器模式
Go和Java实现装饰器模式 我们通过人穿着打扮自己的实例来演示装饰器模式的用法。 1、装饰器模式 装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它 是作为现有的类的一个包装。 装饰器模式通过…...
Android中级——RemoteView
RemoteView RemoteView的应用NotificationWidgetPendingIntent RemoteViews内部机制模拟RemoteViews RemoteView的应用 Notification 如下开启一个系统的通知栏,点击后跳转到某网页 public class MainActivity extends AppCompatActivity {private static final …...
SpringBoot核心内容梳理
1.SpringBoot是什么? Spring Boot是一个基于Spring框架的快速开发应用程序的工具。它简化了Spring应用程序的创建和开发过程,使开发人员能够更快速地创建独立的、生产就绪的Spring应用程序。它采用了“约定优于配置”的原则,尽可能地减少开发人员需要进…...
Benchmarking Augmentation Methods for Learning Robust Navigation Agents 论文阅读
论文信息 题目:Benchmarking Augmentation Methods for Learning Robust Navigation Agents: the Winning Entry of the 2021 iGibson Challenge 作者:Naoki Yokoyama, Qian Luo 来源:arXiv 时间:2022 Abstract 深度强化学习和…...
面试题:HTTP Code码及应用场景分析
1xx 消息(临时响应) 属于临时相应,代表所发出的请求已经被接受,需要继续进行处理。只包含状态行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器…...
The ‘kotlin-android-extensions‘ Gradle plugin is no longer supported.
Android使用kotlin开发,运行报错 The kotlin-android-extensions Gradle plugin is no longer supported. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.an…...
vi 编辑器入门到高级
vi 编辑器的初级用法vi 编辑器的工作模式1. 命令模式2. 文本输入模式3. 状态行vi 工作模式切换存储缓冲区 vi 编辑器命令1. 启动 vi2. 文本输入3. 退出 vi4. 命令模式下的 光标移动5. 命令模式下的 文本修改6. 从 命令模式 进入 文本输入模式7. 搜索字符串8. vi 在线帮助文档 v…...
【大数据】Flink 详解(二):核心篇 Ⅰ
Flink 详解(二):核心篇 Ⅰ 14、Flink 的四大基石是什么? Flink 的四大基石分别是: Checkpoint(检查点)State(状态)Time(时间)Windowÿ…...
Day 75:通用BP神经网络 (2. 单层实现)
代码: package dl;import java.util.Arrays; import java.util.Random;/*** Ann layer.*/ public class AnnLayer {/*** The number of input.*/int numInput;/*** The number of output.*/int numOutput;/*** The learning rate.*/double learningRate;/*** The m…...
PHP序列化,反序列化
一.什么是序列化和反序列化 php类与对象 类是定义一系列属性和操作的模板,而对象,就是把属性进行实例化,完事交给类里面的方法,进行处理。 <?php class people{//定义类属性(类似变量),public 代表可…...
Android google admob Timeout for show call succeed 问题解决
项目场景: 项目中需要接入 google admob sdk 实现广告商业化 问题描述 在接入Institial ad 时,onAdLoaded 成功回调,但是onAdFailedToShowFullScreenContent 也回调了错误信息 “Timeout for show call succeed.” InterstitialAd.load(act…...
EFLFK——ELK日志分析系统+kafka+filebeat架构
环境准备 node1节点192.168.40.16elasticsearch2c/4Gnode2节点192.168.40.17elasticsearch2c/4GApache节点192.168.40.170logstash/Apache/kibana2c/4Gfilebeat节点192.168.40.20filebeat2c/4G https://blog.csdn.net/m0_57554344/article/details/132059066?spm1001.2014.30…...
C# MVC controller 上传附件及下载附件(笔记)
描述:Microsoft.AspNetCore.Http.IFormFileCollection 实现附件快速上传功能代码。 上传附件代码 [Route("myUploadFile")][HttpPost]public ActionResult MyUploadFile([FromForm] upLoadFile rfile){string newFileName Guid.NewGuid().ToString(&quo…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
高保真组件库:开关
一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...
视觉slam--框架
视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图? 建图并没有一个固定的形式和算法…...
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南 在金融行业安全审计中,未启用HTTPS的Web应用被列为高危漏洞。通过正确配置HTTPS,可将中间人攻击风险降低98%——本文将全面解析Spring Boot中HTTPS的实现方案与实战避坑指南。 一、HTTPS 核心原理与…...
Python[数据结构及算法 --- 栈]
一.栈的概念 在 Python 中,栈(Stack)是一种 “ 后进先出(LIFO)”的数据结构,仅允许在栈顶进行插入(push)和删除(pop)操作。 二.栈的抽象数据类型 1.抽象数…...
