Kubernetes-源码分析预备知识(待续)

Openstack云平台搭建 一、openstack 安装 环境准备 主机名称 IP地址 最小资源配置 openstack 192.168.1.10 2CPU,8G内存 nova01 192.168.1.11 2CPU,3G内存 nova02 192.168.1.12 2CPU,3G内存 repo 192.168.1.250 2CPU,1G内存 上传 RHEL7-extras.iso、RHEL7OSP-10.iso 到功能服务器[repo] 二、功能服务器安装配置 1.时间源服务器 [root@repo 阅读详情


持续更新中…

常见库介绍

github.com/spf13/cobra

Cobra既是一个创建强大的现代化命令行程序的库,又是一个用于生成应用和命令行文件的程序。
Cobra提供了很多构建命令行接口的特性。基本的Cobra功能说明可以在 https://blog.gopheracademy.com/advent-2014/introducing-cobra/ 找到。基本示例如下

package main

import (
        "fmt"
        "github.com/spf13/cobra"
        "math/rand"
        "os"
        "time"
)

func main() {
        rand.Seed(time.Now().UnixNano())

        command := NewCommand()

        if err := command.Execute(); err != nil {
                os.Exit(1)
        }
}

func NewCommand() *cobra.Command {
        cmd := &cobra.Command{
                Use:   "Test Cobra command",
                Short: "Shot description",
                Long:  "Long description",
                Run: func(cmd *cobra.Command, args []string) {
                        fmt.Println("Test Run")
                        for {

                        }
                },
        }
        return cmd
}

编译运行后就会执行command的Run方法
kubernetes中所有的组件都是一个cobra.Command应用

kube-apiserver启动核心代码如下
(cmd/kube-apiserver/apiserver.go)

func main() {
    rand.Seed(time.Now().UnixNano())

    command := app.NewAPIServerCommand()

    if err := command.Execute(); err != nil {
        os.Exit(1)
    }
}

app.NewAPIServerCommand()返回的就是一个cobra.Command指针对象
(cmd/kube-apiserver/app/server.go)

// NewAPIServerCommand creates a *cobra.Command object with default parameters
func NewAPIServerCommand() *cobra.Command {
    s := options.NewServerRunOptions()
    cmd := &cobra.Command{
		......
        RunE: func(cmd *cobra.Command, args []string) error {
        	......
        	// set default options
			completedOptions, err := Complete(s)
			......
            return Run(completedOptions, genericapiserver.SetupSignalHandler())
        },
    }

kube-apiserver编译后的二进制文件启动就是执行的RunE方法
其他的kube-controllermanager,kube-proxy等都是使用cobra.Command启动的

flag

kube-apiserver使用的是cobra.Command启动,但是启动的时候会携带很多参数
kube-apiserver --address=192.168.133.16 --allow-privileged=true ...
这些参数的解析是通过flag完成的

package main

import (
        "flag"
        "fmt"
)

//声明变量用于接收命令行传入的参数值
var (
        name    string
        age     int
        address *string
        id      *int
)

func init() {
        //通过传入变量地址的方式,绑定命令行参数到string变量
        flag.StringVar(
        	&name,		//第一个参数:存放值的参数地址
            "name",		//第二个参数:命令行参数的名称
            "匿名",		//第三个参数:命令行不输入时的默认值
            "您的姓名"	//第四个参数:该参数的描述信息,help命令时会显示
        )

        //通过传入变量地址的方式,绑定命令行参数到int变量
        flag.IntVar(&age, "age", -1, "您的年龄")

        //和前面两个变量的获取方式不同,这个api没有传入变量地址,而是把命令行参数值的地址返回了
        address = flag.String("address", "未知", "您的住址")

        id = flag.Int("id", -1, "身份ID")
}

func main() {
        //处理入参
        flag.Parse()

        //入参已经被赋值给各个变量,可以使用了
        fmt.Printf("%s您好, 您的年龄:%d, 您的住址:%s, 您的ID:%d\n\n", name, age, *address, *id)

        fmt.Println("---遍历有输入的参数(开始)---")

        //Visit方法会遍历有输入的参数,flag.Flag可以将参数的名称、值、默认值、描述等内容取到
        flag.Visit(func(f *flag.Flag) {
                fmt.Printf("参数名[%s], 参数值[%s], 默认值[%s], 描述信息[%s]\n", f.Name, f.Value, f.DefValue, f.Usage)
        })
        fmt.Println("---遍历有输入的参数(结束)---\n")

        fmt.Println("---遍历所有的参数(开始)---")
        //VisitAll方法会遍历所有定义的参数(包括没有在命令行输入的),flag.Flag可以将参数的名称、值、默认值、描述等内容取到
        flag.VisitAll(func(f *flag.Flag) {
                fmt.Printf("参数名[%s], 参数值[%s], 默认值[%s], 描述信息[%s]\n", f.Name, f.Value, f.DefValue, f.Usage)
        })
        fmt.Println("---遍历所有的参数(结束)---\n")
}

运行的时候使用可以通过-name,-age等传入参数

go run flag.go --name test --age 30 --address=wuhan -id 101

运行help显示如下

[root@admin ]# go run flag.go --help
  -address string
        您的住址 (default "未知")
  -age int
        您的年龄 (default -1)
  -id int
        身份ID (default -1)
  -name string
        您的姓名 (default "匿名")

kubernetes中所有的组件启动所携带的参数都是通过flag进行解析,运行kube-apiserver --help

[root@k8s-node1 ~]# kube-apiserver --help
The Kubernetes API server validates and configures data
for the api objects which include pods, services, replicationcontrollers, and
others. The API Server services REST operations and provides the frontend to the
cluster's shared state through which all other components interact.

Usage:
  kube-apiserver [flags]

Generic flags:

      --advertise-address ip
                The IP address on which to advertise the apiserver to members of the cluster. This address must be reachable by the rest of the
                cluster. If blank, the --bind-address will be used. If --bind-address is unspecified, the host's default interface will be used.
      --cloud-provider-gce-lb-src-cidrs cidrs
                CIDRs opened in GCE firewall for LB traffic proxy & health checks (default
                130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16)
      ......
Centos7使用SR-IOV创建KVM虚拟机方法 一、SR-IOV介绍 1、传统方式的瓶颈: qemu的网卡,传统方式是使用tap网卡,桥接到宿主的bridge上,但性能很差,尤其是包转发率很低,难以满足对性能要求比较高的场景。性能差的主要原因是路径太长,经过的内核设备太多,即使是使用万兆VIRTIO虚拟网卡,TAP作为字符设备也会成为性能瓶颈,根本原因在于linux/unix内核本身就不是为高性能而设计的,linux/unix更适合做控制平面,而不是转发平面。 传统使用TAP创建KVM虚拟机方法(启用virtio,使能多队列支持): qemu-syste 阅读详情

相关推荐

SR-IOV 网卡虚拟化技术

目录 文章目录目录PCI 与 PCIe 设备SR-IOV在 KVM 中启用 SR-IOV 网卡手动挂载 VF 到虚拟机指令方式挂载SR-IOV 的数据包分发机制 PCI 与 PCIe 设备 PCI(Peripheral Component Interconnect,外设组件互连):符合 PCI 总线标准的设备就被称为 PCI 设备,PCI 总线架构中可以包含多个 PCI 设备。 PCIe(Per......

烟云的计算 7294

kube-apiserver参数指标说明

Kubernetes API 配置的作用是 验证API 对象的数据, 这些对象包括 pods、services、replicationcontrollers 等。 为集群的共享状态提供前端, 所有其他组件都通过该前端进行交互 --add-dir-header 如果为 true,则将文件目录添加到日志消息的标题中 --admission-control-config-file string 包含准入控制配置的文件。 --advertise-address ip 向集群成员通知 apiserver 消息的 IP

砚墨 3002

DisplayPort信号通道深度解析:从物理层到协议栈

DisplayPort(DP)是一种面向高速串行通信的数字显示接口标准,其核心在于嵌入式时钟、自适应均衡与链路训练三位一体的物理层架构。不同于HDMI依赖独立时钟的TMDS方案,DP通过差分主链路(Main Link)承载编码数据流,以8b/10b或128b/132b编码实现高带宽与强鲁棒性。该技术价值体现在多速率自适应、误码恢复能力及对PCB布线与阻抗控制的严苛要求,广泛应用于8K显示、工业视觉、GPU直连等高性能场景。本文聚焦DP信号通道的管脚级实现、三层协议解耦(物理层/数据链路层/事务层)及链路训练

weixin_34214500的博客 253

kubectl工具使用

kubectl安装 官网提供了在linux、mac、windows上的安装方式,详见安装工具 | Kubernetes 还提供了一些插件,比如命令自动补全功能,自动补全功能可以显著提高使用体验, 详见在 Linux 系统中安装并设置 kubectl | Kubernetes ...

whz-emm的博客 1193

无法找到来自源 nvlddmkm 的事件 ID 14 的描述

具体错误是: 无法找到来自源 nvlddmkm 的事件 ID 14 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。 出现这样错误的原因有很多了,有可能是硬件有可能是软件。由于我是刚配置的电脑,起初非常怀疑是自己组装的问题,折腾了好久,心态爆炸!!!先说我报这样错误的情况,以及解决办法,供后面人参考。 ...

SeventhBlue 6万+

VINS技术路线与代码详解

VINS技术路线 写在前面:本文整和自己的思路,希望对学习VINS或者VIO的同学有所帮助,如果你觉得文章写的对你的理解有一点帮助,可以推荐给周围的小伙伴们,当然,如果你有任何问题想要交流,欢迎随时探讨。话不多说,下面上正文。 VINS代码地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono 参考文档:1.VINS-Mono A R...

wangshuailpp的博客 7万+

openstack部署工具_OpenStack的工作负载部署工具

openstack部署工具 这是三篇系列文章的第二部分,该系列文章介绍了OpenStack内的自动化项目,解释了它们的工作,如何做以及它们在开发准备和现场使用中所处的位置。 之前,在第一部分中 ,我介绍了云部署工具,使您可以在裸机上安装/更新OpenStack云。 下周,在最后一篇文章中,我将介绍自动化“第二天管理”的工具,这些工具可保持云和工作负载正常运行。 第二类自动化产品涉及部署工作负...

cumj63710的博客 510

.NET 4.0下HttpWebRequest请求HTTPS报错?试试这个注册表修改方案

本文深入解析.NET 4.0下HttpWebRequest请求HTTPS报错问题,提供注册表修改方案以解决'基础连接已经关闭'错误。通过调整SchUseStrongCrypto注册表项,强制使用TLS 1.2等现代加密协议,确保安全连接。适用于企业环境部署和长期维护建议。

weixin_29310631的博客 356

【PCIe 5.0 - 100】SR-IOV【1】

PCIe 5.0 SR-IOV与MR-IOV

BGONE的博客 1万+

零基础用AHK操作Excel:从数据读取到自动填写(附完整脚本解析)

本文为零基础用户详细介绍了如何使用AutoHotkey(AHK)通过COM接口高效操作Excel,实现从数据自动读取到填写的完整自动化流程。文章包含完整的脚本解析、环境搭建指南、核心代码逐行讲解以及实际应用案例,帮助办公人员大幅提升数据处理效率,告别重复劳动。

weixin_29202213的博客 553

MATLAB实战:用ARMAX模型搞定电力系统惯量实时评估(附完整代码)

本文详细介绍了如何利用MATLAB中的ARMAX模型实现电力系统惯量的实时评估。通过系统辨识技术,结合电力系统的动态特性,提供从数据预处理、模型辨识到实时评估的全流程实战指南,并附完整代码。ARMAX模型在新能源高渗透率电网中展现出显著优势,误差较传统方法降低50%以上。

b9c0d的博客 393

容器内存分析

背景 在容器化环境中,平台需要提供准确的业务监控指标,已方便业务查看。那么如何准确计算容器或Pod的内存使用率,k8s/docker又是如何计算,本文通过实验与源码阅读相结合来分析容器的内存实际使用量。 预备知识 不管docker还是k8s(通过cadvisor)最终都通过cgroup的memory group来得到内存的原始文件,memory相关的主要文件如下: cgroup.event_con...

Qinng的博客 7684

某招标公告网和vcaptcha验证码识别逆向

本文分析了某验证码系统的加密流程及破解思路。首先通过反混淆技术定位到加密函数,拆解了包含指纹函数、环境参数等组成的加密字符串。研究发现验证码生成涉及canvas指纹、环境检测等反爬机制,可通过模拟浏览器环境绕过。验证过程需要解密图片顺序,通过work2.js计算还原图片位置,再结合滑动轨迹、时间等参数生成验证请求。文章仅提供技术研究思路,强调需遵守法律法规,严禁非法破解信息系统。完整流程包括环境模拟、加密参数还原、图片处理和轨迹生成等步骤,成功率较高。

码王吴彦祖的博客 577

光刷面经没用?面试官教你正确刷面经,把时间花在刀刃上

技术面试考察的是候选人面对陌生问题时的分析能力与知识深度,面经常被误认为捷径。从面试官视角看,单纯背诵题目清单只能获得信息对称性,无法形成可迁移的能力。更有效的准备策略是把面经当作知识索引,先建立覆盖语言基础、算法数据结构、计算机基础、工程能力、业务架构的分层知识体系,再通过追问式自查把每个答案真正内化。算法刷题应按范式归纳而非逐题死记,系统设计题需结合真实工程权衡,模拟面试则能暴露临场表达短板。当求职者把面经从标准答案转化为学习路径,才能在技术面试中展现扎实功底。文中结合面试官经验,剖析光刷面经的收益边界

weixin_34262482的博客 462

RT-DETR改进策略【RT-DETR和Mamba】| 替换骨干 Mamba-RT-DETR-T !!! 最新的发文热点

模块是模型中的一个重要组成部分,其主要作用是在模型的初始阶段对输入图像进行处理,方便后续的特征提取和目标检测。以下是对。

Limiiiing的博客 1321

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Spring Cloud Alibaba搭建(二):Nacos注册中心

spring cloud alibaba 关于nacos学习记录笔记

你一定要站在自己所热爱的世界里,闪闪发亮。 513

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

kube-scheduler源码分析(一)之 NewSchedulerCommand

本文个人博客地址:https://www.huweihuang.com/kubernetes-notes/code-analysis/kube-scheduler/NewSchedulerCommand.html kube-scheduler源码分析(一)之 NewSchedulerCommand 以下代码分析基于 kubernetes v1.12.0 版本。 scheduler的cmd代...

胡伟煌的博客 684

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Kubernetes-使用kubeadmin安装部署

基础环境说明 CentOS Linux release 7.5.1804 (Core) 一、系统配置(所有节点都需要执行) 1. 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 2. 禁用SELinux setenforce 0 # 编辑文件/etc/selinux/config,将SELINUX修改为disa...

iov_aaron的专栏 6980

OVS - 简介

本文主要介绍Open VSwitch - 虚拟交换机的概述内容,阅读本文可以对OVS(Open VSwitch)有一个大致的了解。那么本文主要回答了这样几个问题: 1. 虚拟交换机是什么,干什么? 2. 虚拟网络和OVS 3. 什么是OVS,其特性是什么? 4. OVS的特性是什么? 5. OVS的组件有哪些? 6. 使用OVS创建一个网络拓扑 7. 示例

sqx2011的专栏 12万+

SR-IOV——网卡直通技术

相关技术 IO虚拟化简介 全虚拟化 通过VMM来模拟IO设备实现,VMM截获GuestOS的IO请求,通过软件模拟真实的硬件。VMM必须处理所有虚机的IO请求,然后将所有的IO情况序列化为可以被底层硬件处理的单一IO流。好处是GuestOS不需要考虑硬件设备的情况。问题是效率相对较低。例如 qemu。 一个完整的数据包从虚拟机到物理机的路径是:虚拟机--QEMU虚拟网卡...

weixin_30788731的博客 3万+

kubernetes apiserver 源码阅读笔记(-)

version:1.9.6 导航:   1.寻找入口   2.构建命令行   3.创建服务链 CreateServerChain 4.启动服务s.SecureServingInfo.Serve(s.Handler, s.ShutdownTimeout, internalStopCh)    1.命令行入口   cmd/kube-apiserver/apis...

weixin_30670925的博客 208

kube-apiserver源码分析(一)之 NewAPIServerCommand

kube-apiserver源码分析(一)之 NewAPIServerCommand 以下代码分析基于 kubernetes v1.12.0 版本。 本文主要分析kube-apiserver中cmd部分的代码,即NewAPIServerCommand相关的代码。更多具体的逻辑待后续文章分析。 kube-apiserver的cmd部分目录代码结构如下: kube-apiserver ├── ap...

胡伟煌的博客 1088

k8s源码分析 pdf_k8s源码分析之Cobra

一、Cobra简介cobra:既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序.官网地址: https://github.com/spf13/cobraCobra主要提供的功能* 简易的子命令行模式,如 app server, app fetch等等* 完全兼容posix命令行模式* 嵌套子命令subcommand* 支持全局,局部,串...

weixin_39963523的博客 367

Kubernetes-基于Flannel的网络原理

目录 一、容器与容器之间的通信 二、POD与POD之间的通信 1、同一个Node上的pod之间的通信 2、不同Node上的pod之间的通信 3、使用tcpdump和wireshark进行分析 三、Pod与Service之间的通信 1、Service的类型 2、ClusterIP类型的service需要的iptables规则 3、NodePort类型的Service需要的ipta...

iov_aaron的专栏 7116

kubelet源码分析(一)之 NewKubeletCommand

本文个人博客地址:https://www.huweihuang.com/kubernetes-notes/code-analysis/kubelet/NewKubeletCommand.html kubelet源码分析(一)之 NewKubeletCommand 以下代码分析基于 kubernetes v1.12.0 版本。 本文主要分析 https://github.com/kuberne...

胡伟煌的博客 1066
上一篇: Docker-使用 overlayfs 作为后端存储遇到的问题
下一篇: Kubernetes-Helm基本介绍
Aaron.com
博客等级 码龄17年 25粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值