kubectl 和 kubeconfig 基本原理
云原生学习路线导航页(持续更新中)
- kubernetes学习系列 快捷连接
- Kubernetes架构原则和对象设计(一)
本文介绍kubectl的几个常用命令,kubconfig文件基本属性,并开启kubectl debug日志分析其背后基本原理
- 结论写在前面:
- kubectl就是一个和kube-apiserver交互的命令行工具,通过将命令转换成对应的get、delete等请求发送给api-server,实现与kubernetes的交互
- kubeconfig文件为kubectl提供集群地址、集群鉴权cert、token等信息
1.kubectl 做了什么
- 执行kubectl命令的时候,添加 -v 9,即可开启debug日志,可以看到kubectl到底干了什么
- 可以看到,kubectl命令首先加载了 /root/.kube/config 文件,获取到了当前要连接的集群信息,及user认证信息cert、key
- 然后向apiserver发送get请求
2.kubeconfig 内容解释
- kubectl从其中获取当前正在使用的上下文,并使用 该上下文中 指定的user 连接 指定的cluster
- kubeconfig 默认路径:/root/.kube/config,当然你可以通过设置 KUBECONFIG 环境变量或者设置 --kubeconfig参数来指定其他 kubeconfig 文件
- 官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/
3.kubectl get 命令
- 使用-oyaml和-w实时查看 default ns 的yaml变化
[root@VM-226-235-tencentos ~]# kubectl get ns default -oyaml -w apiVersion: v1 kind: Namespace metadata:creationTimestamp: "2024-04-17T08:00:47Z"name: defaultresourceVersion: "146"selfLink: /api/v1/namespaces/defaultuid: da7c3a89-3ac2-411b-a7fa-f985f5fb24ec spec:finalizers:- kubernetes status:phase: Active
- 开启kubectl debug日志,可以看出
- kubectl会首先发送get请求,获取default ns的yaml
- 然后又发送了一次get请求,不过这个get请求的watch参数置为了true,和apiserver建立了一个长连接
- 当ns有变化的时候,apiserver就会把事件推送过来,我们的控制台就可以打印最新ns的yaml了
[root@VM-226-235-tencentos ~]# kubectl get ns default -oyaml -w -v 9 I1207 17:13:12.017346 6316 loader.go:375] Config loaded from file: /root/.kube/config ...... I1207 17:13:12.057355 6316 round_trippers.go:424] curl -k -v -XGET -H "Accept: application/json" -H "User-Agent: kubectl/v1.19.16 (linux/amd64) kubernetes/e37e4ab" 'https://9.135.226.235:6443/api/v1/namespaces/default' I1207 17:13:12.059146 6316 round_trippers.go:444] GET https://9.135.226.235:6443/api/v1/namespaces/default 200 OK in 1 milliseconds I1207 17:13:12.059162 6316 round_trippers.go:450] Response Headers: I1207 17:13:12.059166 6316 round_trippers.go:453] Cache-Control: no-cache, private I1207 17:13:12.059175 6316 round_trippers.go:453] Content-Type: application/json I1207 17:13:12.059181 6316 round_trippers.go:453] Content-Length: 286 I1207 17:13:12.059194 6316 round_trippers.go:453] Date: Sat, 07 Dec 2024 09:13:12 GMT I1207 17:13:12.059222 6316 request.go:1097] Response Body: {"kind":"Namespace","apiVersion":"v1","metadata":{"name":"default","selfLink":"/api/v1/namespaces/default","uid":"da7c3a89-3ac2-411b-a7fa-f985f5fb24ec","resourceVersion":"146","creationTimestamp":"2024-04-17T08:00:47Z"},"spec":{"finalizers":["kubernetes"]},"status":{"phase":"Active"}} I1207 17:13:12.059373 6316 table_printer.go:45] Unable to decode server response into a Table. Falling back to hardcoded types: attempt to decode non-Table object apiVersion: v1 kind: Namespace metadata:creationTimestamp: "2024-04-17T08:00:47Z"name: defaultresourceVersion: "146"selfLink: /api/v1/namespaces/defaultuid: da7c3a89-3ac2-411b-a7fa-f985f5fb24ec spec:finalizers:- kubernetes status:phase: Active I1207 17:13:12.059734 6316 round_trippers.go:424] curl -k -v -XGET -H "Accept: application/json" -H "User-Agent: kubectl/v1.19.16 (linux/amd64) kubernetes/e37e4ab" 'https://9.135.226.235:6443/api/v1/namespaces?fieldSelector=metadata.name%3Ddefault&resourceVersion=0&watch=true' I1207 17:13:12.060448 6316 round_trippers.go:444] GET https://9.135.226.235:6443/api/v1/namespaces?fieldSelector=metadata.name%3Ddefault&resourceVersion=0&watch=true 200 OK in 0 milliseconds I1207 17:13:12.060474 6316 round_trippers.go:450] Response Headers: I1207 17:13:12.060481 6316 round_trippers.go:453] Content-Type: application/json I1207 17:13:12.060493 6316 round_trippers.go:453] Date: Sat, 07 Dec 2024 09:13:12 GMT I1207 17:13:12.060506 6316 round_trippers.go:453] Cache-Control: no-cache, private I1207 17:13:12.060780 6316 table_printer.go:45] Unable to decode server response into a Table. Falling back to hardcoded types: attempt to decode non-Table object
- 为default ns添加label,长连接查看输出
4.kubectl describe 命令
- 最重要的用途是 查看event,用于问题排查
5.kubectl exec 进入容器
kubectl exec -it pod-xxx -n ns-xxx -- bash
--
:前面是指令,后面是在容器中执行的命令【非必须,但建议写,语义更明确】bash
:执行容器的bash命令,会进入容器的bash命令行,可以做一些debug操作
- 比如也可以直接使用 – 指定查看容器内文件
kubectl exec -it pod-xxx -n ns-xxx -- tail -f /var/app.log
6.kubectl logs 命令
kubectl logs
查看的是标准输出日志kubectl logs pod-xxx -n ns-xxx
:查看pod 标准输出日志,使用-f
参数可以实时输出kubectl logs pod-xxx -n ns-xxx | head -n 10
:查看pod前10行 标准输出日志kubectl logs pod-xxx -n ns-xxx | grep "user-xxxx"
:检索 标准输出日志 中指定关键字
- 如果你的应用会把日志写入到某个指定路径下,可以使用exec查看容器的指定文件
kubectl exec -it pod-xxx -n ns-xxx -- tail -f /var/app.log
。
相关文章:

kubectl 和 kubeconfig 基本原理
云原生学习路线导航页(持续更新中) kubernetes学习系列 快捷连接 Kubernetes架构原则和对象设计(一) 本文介绍kubectl的几个常用命令,kubconfig文件基本属性,并开启kubectl debug日志分析其背后基本原理 …...

LVGL笔录----动画
最近在搞LVGL动画内容,发现网上能参考的资源太少了。现将自己学习到的内容做个笔录,仅供自己记录,若对你有帮助,那么最好不过,共勉! 首先,我是在CodeBlock上仿真 #define PI 3.14159265359stat…...

【LeetCode热题100】BFS解决FloodFill算法
这篇博客主要记录了使用BFS解决FloodFill算法的几道题目,包括图像渲染、岛屿数量、岛屿的最大面积、被包围的区域。 class Solution {using PII pair<int, int>; public:vector<vector<int>> floodFill(vector<vector<int>>& im…...

设计模式の软件设计原则
文章目录 前言一、聚合&组合&继承&依赖1.1、继承1.2、组合1.3、聚合1.4、依赖 二、单一职责原则2.1、单一职责原则反面案例2.2、单一职责原则反面案例的改进 三、接口隔离原则3.1、接口隔离原则反面案例3.2、接口隔离原则反面案例的改进 四、依赖倒转原则4.1、依赖…...

Linux centos7 下载MySQL5.7仓库的命令
wget 是一个非常强大的命令行工具,用于从网络上下载文件。它是 Linux 和其他 Unix-like 系统中常用的工具之一。wget 命令的各个参数有着不同的含义,下面是您提供的命令 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.onarch.r…...

CSS flex布局踩坑小记:flex-basis属性之0px与0%的差异 (赞)
原文出处:CSS flex布局踩坑小记:flex-basis属性之0px与0%的差异_flex-basis 0%-CSDN博客 讲述flex容器被撑大的原因(误用:flex-basis: 0%;)及解决方法(用:flex-basis: 0px;)...

华硕主板不能开启
正常流程: [主機板]BIOS如何設置主機板整合圖形(內顯)和獨立顯示卡同時顯示輸出 | 官方支援 | ASUS 台灣 如果开启了CSR兼容性模式,在BIOS里面,就必须关掉,才能支持多显示器,如下图显示的标识才会出现。...

室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版)
目录: 0 引言 1 人形机器人对室内家政服务任务的结构化 1.1人形机器人在室内家政服务中的比较优势 1.1.1 人形机器人拟人性的7个维度 1.1.2 拟人性在室内家政服务工作中的比较优势 1.1.3 潜在的重要用户:宠物爱好者 1.2 居所室内环境的特征与结构…...

OpenAI 发布 o1 LLM,推出 ChatGPT Pro
OpenAI正式发布了专为复杂推理而构建的 OpenAI o1大型语言模型(LLM)。 该公司还推出了 ChatGPT Pro,这是一项每月 200 美元的套餐,包括无限制访问 OpenAI o1、o1-mini、GPT-4o 和高级语音对话。 OpenAI o1 从 9 月 12 日起在 ChatGPT 中推出预览版&…...

【MySQL】存储过程和触发器
MySQL存储过程和触发器 一、存储过程的介绍二、存储过程的相关操作2.1创建存储过程2.2查看存储过程2.4调用存储过程2.5删除存储过程 三、变量3.1系统变量3.2用户定义变量3.3局部变量 四、存储过程中的关键字4.1 if4.2参数4.3case4.4 while4.5repeat4.6 loop4.7游标4.8条件处理程…...

QT4和 QT5 槽函数连接的区别
正常连接方式 //QT4官方用列QLabel *label new QLabel;QScrollBar *scrollBar new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)));//QT5官方用列QLabel *label new QLabel;QLineEdit *lineEdit new QLineEdit;QObject::c…...

使用 PyTorch 和 Horovod 来编写一个简单的分布式训练 demo
使用 PyTorch 和 Horovod 来编写一个简单的分布式训练 demo,可以帮助你理解如何在多GPU或多节点环境中高效地训练深度学习模型。Horovod 是 Uber 开发的一个用于分布式训练的框架,它支持 TensorFlow、Keras、PyTorch 等多个机器学习库。下面是一个基于 P…...

SQL复杂查询功能介绍及示例
文章目录 1. 多表连接(JOIN)功能介绍应用场景示例查询及初始表格customers 表(未查询前)orders 表(未查询前)INNER JOIN 示例LEFT JOIN 示例 2. 子查询(Subquery)功能介绍应用场景示…...

shell基础用法
shell基础知识 shell中的多行注释 :<<EOF read echo $REPLY # read不指定变量,则默认写入$REPLY EOF # :<<EOF ...EOF 多行注释,EOF可以替换为!# 等文件目录和执行目录 echo $0$0 # ./demo.sh echo $0的realpath$(realpath…...

C#设计模式--策略模式(Strategy Pattern)
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需…...

【opencv入门教程】15. 访问像素的十四种方式
文章选自: 一、像素访问 一张图片由许多个点组成,每个点就是一个像素,每个像素包含不同的值,对图像像素操作是图像处理过程中常使用的 二、访问像素 void Samples::AccessPixels1(Mat &image, int div 64) {int nl imag…...

【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
导航: 本文一些内容需要聚簇索引、非聚簇索引、B树、覆盖索引、索引下推等前置概念,虽然本文有简单回顾,但详细可以参考下文的【MySQL高级篇】 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模…...

根据html的段落长度设置QtextBrowser的显示内容,最少显示一个段落
要根据 HTML 段落的长度设置 QTextBrowser 的显示内容,并确保至少显示一个段落,可以通过以下步骤来实现: 加载 HTML 内容:首先,你需要加载 HTML 内容到 QTextBrowser 中。可以通过 setHtml() 方法来设置 HTML。 计算段…...

基于Huffman编码的GPS定位数据无损压缩算法
目录 一、引言 二、霍夫曼编码 三、经典Huffman编码 四、适应性Huffman编码 五、GPS定位数据压缩 提示:文末附定位数据压缩工具和源码 一、引言 车载监控系统中,车载终端需要获取GPS信号(经度、纬 度、速度、方向等)实时上传…...

php:完整部署Grid++Report到php项目,并实现模板打印
一、下载Grid++Report软件 路径:开发者安装包下载 - 锐浪报表工具 二、 安装软件 1、对下载的压缩包运行内部的exe文件 2、选择语言 3、 完成安装引导 下一步即可 4、接收许可协议 点击“我接受” 5、选择安装路径 “浏览”选择安装路径,点击"安装" 6、完成…...

C标签和 EL表达式的在前端界面的应用
目录 前言 常用的c标签有: for循环 1 表示 普通的for循环的 2 常在集合中使用 表示 选择关系 1 简单的表示如果 2 表示如果。。否则。。 EL表达式 格式 : ${属性名/对象/ 集合} 前言 本篇博客介绍 c标签和el表达式的使用 使用C标签 要引入 …...

Linux絮絮叨(四) 系统目录结构
Linux 系统的目录结构(Filesystem Hierarchy Standard, FHS)定义了 Linux 系统中文件系统的标准布局,以下是一些常见目录的功能: 根目录 / 描述:所有文件和目录的起始点,Linux 文件系统的根。内容…...

Java基于SpringBoot的网上订餐系统,附源码
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...

《Java核心技术I》死锁
死锁 账户1:200元账户2: 300元线程1:从账号1转300到账户2线程2:从账户2转400到账户1 如上,线程1和线程2显然都被阻塞,两个账户的余额都不足以转账,两个线程都无法执行下去。 有可能会因为每一个线程要等…...

【Windows11系统局域网共享文件数据】
【Windows11系统局域网共享文件数据】 1. 引言1. 规划网络2. 获取必要的硬件3. 设置网络4. 配置网络设备5. 测试网络连接6. 安全性和维护7. 扩展和优化 2. 准备工作2.1: 启用网络发现和文件共享2.2: 设置共享文件夹 3. 访问共享文件夹4. 小贴士5. 总结 1. 引言 随着家庭和小型办…...

MCU、ARM体系结构,单片机基础,单片机操作
计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备:将其他信号转换为计算机可以识别的信号(电信号)。输出设备:将电信号(0、1)转为人或其他设备能理解的…...

在办公室环境中用HMD替代传统显示器的优势
VR头戴式显示器(HMD)是进入虚拟现实环境的一把钥匙,拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域,正如如今的互联网一样,虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…...

ssm 多数据源 注解版本
application.xml 配置如下 <!-- 使用 DruidDataSource 数据源 --><bean id"primaryDataSource" class"com.alibaba.druid.pool.DruidDataSource" init-method"init" destroy-method"close"></bean> <!-- 使用 数…...

selenium常见接口函数使用
博客主页:花果山~程序猿-CSDN博客 文章分栏:测试_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 1. 查找 查找方式 css_s…...

STM32F103单片机使用STM32CubeMX新建IAR工程步骤
打开STM32CubeMX软件,选择File 选择新建工程 在打开的窗口输入单片机型号 在右下角选择单片机型号,然后点右上角 start project,开始新建工程。 接下来设置调试接口,在左边System Core中选择 SYS,然后在右右边debu…...