- 博客(27)
- 收藏
- 关注
原创 k8s部署私有镜像库保障node节点间镜像一致
部署私有镜像站需要用到docker的registry,可以直接从 https://github.com/distribution/distribution/releases 下载符合自己平台的二进制,建议把这个镜像站部署在主节点,部署在其他节点也可以。为了解决这样的场景,我们在k8s集群内部部署一个私有镜像站就可以完美解决。集群ip和域名已经可以在整个k8s集群下生效了,但是这个域名和ip的对应关系是动态的,我们写个定时脚本来动态修改域名。先写一个配置文件,配置一下私有镜像站的相关属性,放到。
2024-12-13 00:13:31
277
原创 配置ingress将service中的端口暴露出去
service是管理pod的暴露的,但是每个service都暴露一个端口到外部并不是很合适。使用ingress将不同的service暴露的端口通过子url的方式做反向代理,使用7层代理方式暴露给外部。配置ingress-nginx需要先按照前面讲解的安装方式安装一下,然后就可以修改helm的values.yaml配置文件。对集群下任意节点的ip访问都可以到达pod得到响应,到此ingress-nginx暴露golang服务端口成功。获取一下ingress的对外暴露端口。可以查看ingress的配置状态。
2024-12-11 11:54:11
571
原创 k8s下的dns说明
k8s下有一个核心组件是coredns可以看到coredns会启动一个service在集群内部可以访问,使用clusterip访问进行dns解析,随便新建一个pod可以查看一下底层的k8s会对每一个pod上面都添加dns服务到coredns里面,也就是所有pod里面解析dns都会交给coredns进行处理。下面是coredns对于不同类型组件的域名的处理。
2024-12-10 11:49:13
562
原创 nginx配置笔记
限制不安全请求方法,拒绝接受除POST和GET,HEAD以外的请求方法。防止溢出,给所有客户端配置buffer容许最大值。控制iframe,防止iframe注入。禁止nginx服务器目录列表功能。限制仅使用HTTPS访问。去除nginx指纹信息。cookie信息安全。
2024-12-03 22:12:25
1053
原创 linux上ssh到另一台linux,可以显示中文不能输入怎么回事?
里面说明LC_ALL,LC_CTYPE等设置有问题,那么就检查一下/etc/locale.gen,发现里面确实没打开en_US.UTF-8,直接修改里面的值,放开下面几个。研究一个小时自己搞定了,主要还是locale没有生成编码导致。查看locale提示有问题。ssh到另一台机器,vim等可以输入中文显示,但是在终端里面可以显示但输入变成怎么处理。要重新登陆一下,让终端重新加载环境变量就可以了。linux本机可以输入中文显示中文。输入命令生成一下编码。
2024-12-02 00:27:00
290
原创 dfs(深度优先遍历)——解决图上距离/连通性问题(非动态规划)
dfs是深度优先遍历,本身就是一个独立的算法。只是在动态规划中,可以使用dfs+记忆化搜索来解题。对于dfs算法本身可以用来解决树上距离问题。从某个点进行深度优先遍历,计算此点到其他点的距离或是否可达。如leetcode上面这个问题。
2024-12-01 16:14:33
400
原创 使用configMap给pod加环境变量
顺便还要修改一下deployment.yaml的模板文件,从configmap里面加载key到pod里面。然后就可以在values.yaml里面定义configmap中的TEST的值。默认helm生成的模板文件里面并没有configmap的模板,我们写一个。不进行占用,制作镜像并提交到minikube里面,然后进行热更新到。需要修改我们的镜像,支持读取这个环境变量并输出出来。先使用helm回退到版本1,对。查看configmap是否生效。查看configmap的状态。查看pod状态,很好,生效了。
2024-11-30 21:23:15
403
原创 helm部署golang服务
Helm 是 Kubernetes 的一个包管理工具,类似于 Linux 中的 apt 或 yum。它使得在 Kubernetes 上部署和管理应用程序变得更加简单和高效。
2024-11-29 20:04:32
496
原创 使用statefulset管理pod
而对于那种有状态需要存储数据的,如log、数据库、消息中间件需要持久化数据的,则建议使用StatefulSet,我们的pod现在扩充了pv和pvc,那就使用StatefulSet重新部署一下试试。会发现pod是一个一个启动的,一个启动成功才会启动另一个,而且名字是按照0,1,2开始的。默认的statefulset的升级策略是从最大的开始升级,一个一个升级到最小的编号。启动一个窗口监控pod的状态,看一下启动statefulset的启动效果。试一试升级到读取文件的版本,看升级过程。
2024-11-28 19:44:05
497
原创 挂载本地目录到k8s的pod实现持久化存储
本地目录实现持久化存储容器是无状态的,每次重启都是新的进程,但是我们需要将一些状态数据如配置、用户数据等存到本地来方便新的容器可以拿到历史状态。先创建一个目录来存放数据,并且挂载到minikube虚拟机内(不是pod里面)。注意要新开一个终端来调用,这个命令会阻塞,不能中断。=> mkdir storage=> minikube mount storage:/data可以测试一下是否成功了=> echo aaa > storage/test.txt=> minik
2024-11-25 14:34:20
775
1
原创 linux上的性能观测工具
一个进程有500K的代码并且链接了2500K的共享库,然后有200K的堆栈分配。其中有400K自身的代码、1000K的共享库以100K的堆栈内存被加载在实际内存(RAM)中,并且系统中一共有两个进程用了同样的共享库。
2024-11-22 16:36:19
418
原创 使用简单实验体验k8s的热升级机制
负载均衡的容错基本可以了,现在考虑要升级一下这个容器,把其中的test.go修改一下,返回hello, world的同时打印一下HOSTNAME。可以看到窗口1里面pod的更新状态,先停止1个,启动2个pod。2个pod就绪后停止第三个,启动1个pod。两种方式,可以直接修改deployment里面的image,也可以使用下面的命令。但是作为运维人员,假设升级出现问题,需要回滚,执行下面命令就可以回滚。,使用老的然后测试更新为新的,开不同的窗口,执行下面的命令监控状态。每秒变一下不同的pod返回,并且**
2024-11-21 11:59:12
800
原创 使用minikube快速搭建一个简单的golang微服务访问
先在宿主机的docker下载一下golang的最新镜像写个简单的服务器,监听7878端口,请求都返回搞到docker里面制作镜像这个时候查看docker的镜像里面就存在了我们制作的要发布的镜像注意,这里的镜像是宿主机的docker的,不是minikube里面的,minikube是个类似虚拟机的环境,里面还有一个docker。我们把这个镜像加载进去然后就能看到这个这个镜像在minikube里面。
2024-11-19 17:28:25
604
原创 C语言在linux上实现进程线程开发
当有子进程结束或僵尸进程时,立刻返回第一个结束的子进程ID。如果有子进程在运行,阻塞父进程。如果没有子进程在运行,返回-1。同一个进程中,原子操作是不可被线程间抢占的。一个线程中的原子操作可以实现同步,加快线程间的协调作用,进行无锁化编程。进程相互之间的变量包括指针指向的地址都是不共享的,进程间通信需要使用共享内存。进程相互之间的变量包括指针指向的地址都是不共享的,进程间通信需要使用共享内存。此操作会导致进程阻塞,用于进程间加锁使用。获取ID(ftok)
2024-11-18 12:27:43
890
原创 CMake基本使用笔记
1.1. if 条件判断2. 内置变量汇总: 项目工程目录: 可执行文件输出目录: 动态库输出目录: C++标准: 调用cmake命令的系统名称: 非跨平台就是,跨平台开启时,参考 开启cross compiling3. 修改CMakeCache.list的变量三种方式修改变量参数的方式修改详情看修改CMakeCache.txt有gui有文本直接修改添加cmake配置修改添加一个文件,此文件会被cmake执行前先加载4. 重点方法详解4.1. target_inclu
2024-11-17 18:01:02
1651
原创 stm32学习之路——使用串口打印日志
滴答时钟配置完了,现在调试手段还是只能通过单步断点,断点调试太麻烦也太不稳定。参考linux内核的方式将日志加到串口上,通过串口输出一下日志。串口的配置很简单,这里使用USART2,主要是因为引脚比较好接线。使用同步模式,不配置中断。为了打印日志所以不想搞太复杂,异步或中断还要考虑实现buffer来处理缓冲区问题,可以但没必要,简单最好
2024-11-13 22:15:51
1081
原创 stm32学习之路——系统滴答时钟
虽然uwTick作为ms计数很不错,这里搞个好玩的,把linux的jiffies搞进来使用,单独记录一个。主要是想要应用层代码和HAL完全隔离,不想要太多依赖HAL库,这样好移植。stm32配置完外部晶振时钟源后会有一个默认的时钟中断用于记录tick,这个时钟是固定的1ms(暂时没找到不修改代码调整的方式)。定义的,说明可以用户自定义,从里面的定义可以看出,这个uwTick保持ms级别计数。作为我们自己的定时器处理函数,可以从一个1ms定时器搞出很多个定时器。的是计数器的值,计数到达这个值触发中断。
2024-11-12 21:35:13
340
1
原创 linux上搭建stm32开发环境
大学时期搞单片机两年,手头上有开发板两个,各种小型板好几个,放着浪费。现在工作这么多年,已经对编译、环境、linux等很熟悉了。想着将这个技能重新拾起来,顺便给后代铺条路。本文是基于linux上使用stm32cubemx生成工程,使用jlink烧写stm32,开发环境是vscode(宇宙第一编辑器),语言C/C++,可能扩展一下使用golang开发更方便。
2024-11-10 16:07:49
1701
原创 如何做到liba.so和libb.so两个动态库分别链接不同版本的静态库libc.a而不冲突
静态库的链接类似于将源码编译到二进制里面。动态库的链接类似于将二进制外置链接一个符号进行调用。想要不出现冲突和问题就需要注意对外的符号暴露问题。可以做个实验来看一下。符号暴露和不暴露的现象。
2024-11-08 18:42:52
478
原创 《30天自制操作系统》在linux上实现(2)——引入C语言
过程中的那些读磁盘写磁盘啥的,参考书上继续做就好。这里讲一下引入C语言后和书上不一样的地方。
2024-11-05 20:46:54
144
1
原创 《30天自制操作系统》在linux上实现(1)——前言和进入系统
网上其实很多人都说《30天自制操作系统》这本书没什么作用,都是在写界面,和现代操作系统的设计思想脱节等。其实我不这么认为,书本是好书,知识就在那里,看个人怎么去学习。至少我从其中获取到了很多有用的知识,如软盘结构、中断处理、内存分页、进程调度在cpu上是什么等。从其中我甚至可以学习到linux是怎么实现的,这一步肯定是无法直接从书中得来,但是以书中的任务为契机,在看到作者实现分段分页时,想到linux内核里面应该也有对应的实现。
2024-11-05 20:36:18
283
深入解析计算机网络中的 OSI 七层模型及其实现
2024-12-10
kubeadm命令部署kubernetes 1.28.0集群指南
2024-12-09
golang语法和学习笔记
2024-11-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人