当前位置: 首页 > news >正文

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算法的几道题目&#xff0c;包括图像渲染、岛屿数量、岛屿的最大面积、被包围的区域。 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 是一个非常强大的命令行工具&#xff0c;用于从网络上下载文件。它是 Linux 和其他 Unix-like 系统中常用的工具之一。wget 命令的各个参数有着不同的含义&#xff0c;下面是您提供的命令 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.onarch.r…...

CSS flex布局踩坑小记:flex-basis属性之0px与0%的差异 (赞)

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

华硕主板不能开启

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

室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版)

目录&#xff1a; 0 引言 1 人形机器人对室内家政服务任务的结构化 1.1人形机器人在室内家政服务中的比较优势 1.1.1 人形机器人拟人性的7个维度 1.1.2 拟人性在室内家政服务工作中的比较优势 1.1.3 潜在的重要用户&#xff1a;宠物爱好者 1.2 居所室内环境的特征与结构…...

OpenAI 发布 o1 LLM,推出 ChatGPT Pro

OpenAI正式发布了专为复杂推理而构建的 OpenAI o1大型语言模型(LLM)。 该公司还推出了 ChatGPT Pro&#xff0c;这是一项每月 200 美元的套餐&#xff0c;包括无限制访问 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&#xff0c;可以帮助你理解如何在多GPU或多节点环境中高效地训练深度学习模型。Horovod 是 Uber 开发的一个用于分布式训练的框架&#xff0c;它支持 TensorFlow、Keras、PyTorch 等多个机器学习库。下面是一个基于 P…...

SQL复杂查询功能介绍及示例

文章目录 1. 多表连接&#xff08;JOIN&#xff09;功能介绍应用场景示例查询及初始表格customers 表&#xff08;未查询前&#xff09;orders 表&#xff08;未查询前&#xff09;INNER JOIN 示例LEFT JOIN 示例 2. 子查询&#xff08;Subquery&#xff09;功能介绍应用场景示…...

shell基础用法

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

C#设计模式--策略模式(Strategy Pattern)

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

【opencv入门教程】15. 访问像素的十四种方式

文章选自&#xff1a; 一、像素访问 一张图片由许多个点组成&#xff0c;每个点就是一个像素&#xff0c;每个像素包含不同的值&#xff0c;对图像像素操作是图像处理过程中常使用的 二、访问像素 void Samples::AccessPixels1(Mat &image, int div 64) {int nl imag…...

【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)

导航&#xff1a; 本文一些内容需要聚簇索引、非聚簇索引、B树、覆盖索引、索引下推等前置概念&#xff0c;虽然本文有简单回顾&#xff0c;但详细可以参考下文的【MySQL高级篇】 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模…...

根据html的段落长度设置QtextBrowser的显示内容,最少显示一个段落

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

基于Huffman编码的GPS定位数据无损压缩算法

目录 一、引言 二、霍夫曼编码 三、经典Huffman编码 四、适应性Huffman编码 五、GPS定位数据压缩 提示&#xff1a;文末附定位数据压缩工具和源码 一、引言 车载监控系统中&#xff0c;车载终端需要获取GPS信号&#xff08;经度、纬 度、速度、方向等&#xff09;实时上传…...

php:完整部署Grid++Report到php项目,并实现模板打印

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

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...