piwriw_blog
Piwriw Blog
基于Gin的个人博客系统
一个后端使用了Gin、数据库ORM使用Sqlx,前端使用了Vue2.X的个人博客系统
探索本项目的文档 »
本篇README.md面向开发者
目录
项目概述
页面演示
用户端
管理端
快速启动
文件目录说明
作者
鸣谢
项目概述Piwriw_blog是一个博客系统,前端基于Vue2构建了用户端和管理员系统,后端基于Gin和Sqlx构建。
页面演示用户端
首页
详情
管理端
文章编辑
文章列表
评论管理
分类列表
用户列表
个人设置
快速启动
克隆项目到本地git clone git@github.com:Piwriw/piwriw_blog.git
下载后端依赖(前提:你已经开启了go modules 并且设置了国内镜像代理)cd piwriw_blog go mod tidy
下载前端依赖
...
2024年终总结
2024年终总结那些我也许应该抵达的地方一月:与LeaderZhang相聚在绍兴,见到了书本上的鲁迅故居
五月:见过南京的各种故事
五月:抵达那个万象的重庆山城
五月:在武汉的东湖,骑行,期待下一次的重逢
六月:东莞HDC2024,与众星云集的相聚
七月:抵达广州,时隔许久相见18、19的师兄师姐
十月:与同学,自由行千岛湖
十一月:团建台州,点亮新图标
我🎓了
四年之期已经抵达终点站,毕业。
我带着我四年中做过有趣的项目,终于毕业了,虽然以1分之差,错过了优秀毕业论文,没能和LeaderZhang 双双拿下
因为这个项目,我也成功结缘于Cloud Native领域,在Java转向Go的迷茫中,寻找到了自己想追求的新方向K8s与容器化
这个项目也收到了老师资金资助正式发表到了省刊,虽然随着自己随着对领域的深入理解,感觉还是做的十分潦草,没什么特别的东西,但是也算是集齐了大学的一种神奇的体验
如何去写一篇论文
如何以第一作者发表期刊
如何绘制一个清晰的流程图
仰望星空也要脚踏实地在过去大半年的时间内,我很幸运的在我的第一志愿有一些了解的以及意向的云边部门实习了大 ...
K8s中的垃圾回收
K8s中的垃圾回收
基于1.29
K8s的垃圾回收主要是以下的问题
结束的Pod对象
完结的Job对象
无主对象,这类的对象的Owner不存在
不再使用的容器和镜像
不再使用的动态创建的PV对象,对应的StorageClass声明了回收策略Delete
下列场景中被删除的Node
控制器的集群
Node Lease对象
Pod对象垃圾回收对于我阶段为Failed的Pod,对应的容器虽然已经停止,但是其资源对象依旧存在API Server,需要被Pod控制器或者运维人员手动删除
kube-controller-manager中有一个名为PodGC的组件专门负责自动清理“垃圾类”Pod
孤儿Pod,绑定的Node已经不存在
未调度就结束的Pod
终结中的Pod,这类Pod满足,它们被绑定到NotReady的Node,该Node有一个污点node.kubernetes.io/out-of-service,并且NodeOutOfServiceVolumeDetach特性门控开启
对于孤儿Pod,如果它们的阶段不少终结阶段,则PodGC会把它们设置为Failed,此时,如 ...
Kubelet运行机制解析
Kubelet运行机制解析
基于1.29
在K8s集群中,在每个Node上都会启动一个kubelet进程,进程用于处理Master下发Node任务,管理Pod以及Pod中人容器。
每个kubelet进程都会在API Server注册Node信息,定期向Master汇报Node资源使用情况,并且通过cAdvisor监控容器和Node资源
自从K8s v1.28开始,kubelet通过--config-dir支持一个插件配置目录,在启动时,kubelet会合并以下几个部分的配置
命令行参数(优先级最低)
kubelet配置文件
排序的插件配置文件
在命令行中指定的特性门控–feature-gates(优先级最高)
Node通过kubelet启动参数--register-node决定是否向API Server注册自己,还可能有以下的参数
--api-servers:API Server的配置
--kubeconfig:kubeconfig文件,用于访问API Server的安全配置文件
资源管理深入理解节点可分配资源(Node Allocatable Resources) ...
kube-proxy运行机制解析
kube-proxy运行机制解析
基于1.29
第一代Proxy一开始是一个真实的TCP/UDP代理,类似于HAProxy,负责转发从Service到Pod的访问流量,这被称为“userspace”模式
第二代Porxy从v1.2版本开始,K8s将iptables作为kube-proxy的默认模式,iptables模式组作为kube-proxy都默认模式
iptables模式,不再起到数据层面的Porxy作用,client向Service的请求流量通过iptables的NAT规则 直接发送到目标Pod,不再经过kube-proxy的转发,kube-proxy只承担控制层面的功能,即通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息,并更新Node上相应的iptables规则
kube-proxy针对于Service和Pod创建一些主要的iptables规则如下:
KUBE-CLUSTER-IP:在masquerade-all=true或ClusterCIDR被指定的情况下对Service Cluster IP地址进行 ...
Kube-ApiServer架构解析
Kube-ApiServer架构解析
基于1.29
API层:主要以REST方式提供各种API,除了K8s的CUED资源还有健康检查、日志等等
访问控制层:当有客户端访问API时,访问控制层负责对用户身份鉴权、校验
Registry:K8s把所有的资源对象都保存在注册表,针对不同的资源对象,都定义了资源对象的类型、如何创建资源对象,如何转换资源对象,以及如何资源编码为JSON或ProtoBuf格式进行存储
etcd:用于持久化存储K8s资源对象的KV数据库
K8s Proxy APIK8s Proxy API 的作用是代理REST请求,把API Server收到的REST请求转发到K8s进程的REST端口
该进程由kubelet负责响应
这里的信息,来自于Node,而不是ETCD所以可能存在偏差
K8s Porxy API路径如下:
# 列出指定Node的所有Pod/api/v1/nodes/{node}/proxy/pods # 列出指定Node都所有性能指标统计信息/api/v1/nodes/{node}/proxy/metric ...
K8s集群版本更新
K8s集群版本更新在K8s集群更新,需要考虑不断运行的业务容器运行,通常流程,先更新Master上的K8s服务版本,在逐个更新Node的K8s服务版本
以二进制部署的K8s集群更新更新步骤一般如下:
获取官网的K8s二进制安装包
更新Master的kube-apiserver、kube-controller-manager、kube-scheduler
更新隔离Node,等待全部容器工作停止掉Pod,更新kubelet、kube-proxy 服务文件
恢复业务应用到流量到更新完成的Node上
以Kubeadm部署的K8s集群的版本更新可以通过kubeadm upgrade更新
更新kubeadm 本身
yum install -y kubeadm-1.21.0 --disableexcludes=kubernetes
查看kubeadm版本,kubeadm version
查看K8s更新的计划,内容,会检查系统的配置
kubeadm upgrade plan
执行升级
kubeadm upgrade apply
Node也进行升级
kubeadm upgrade node ...
K8s安装-基于二进制文件(高可用)
K8s安装-基于二进制文件(高可用)
基于1.29
通过kubeadm可以快速搭建一个K8s集群,但是调整K8s集群参数,以及安全设置、高可用模式,就需要二进制安装
Master高可用部署架构Master高可用需要注意几个方面:
Master的kube-apiserver、kube-controller-manager和kube-schedule服务以多实例方式部署,至少有3个节点,节点需要为奇数,至少3个节点
Master启用基于CA认证的HTTPS安全机制
etcd至少有3个节点的集群部署模式
etcd集群启用了基于CA认证的HTTPS安全机制
Master启用了RBAC授权模式
创建CA根证书为了启用etcd和K8s服务基于CA认证的安全机制,首先需要配置CA证书
etcd和K8s制作CA证书的时候,都需要基于CA根证书
openssl genrsa -out ca.key 2048openssl req -x 509 -new -nodes -key ca.key -subj "/CN=192.168.18.3" -days 36500 -out ...
K8s安装-基于kubeadm
K8s安装-基于kubeadm
基于1.29
系统要求
软硬件
最低要求
推荐配置
主机资源
若集群中有1-5个Node:Master:2c+2GB;Node:1c
Master:4C和16GB;Node实际运行
Linux
Kernel内核在v3.10以上
CoreOS7.9
etcd
版本v3以上
etcdv3
容器运行时
各种cri
containerd v1.7
主要注意centos7默认开启防火墙,而K8s和各个Node有大量通信,推荐开启以下端口
组件
默认端口
API Server
6443
Controller Manager
10257
Scheduler
10259
Kubelet
10250;10255(只读端口)
etcd
2379(供客户端访问);2380(etcd集群节点之间访问)
集群的DNS服务
53(UDP);53(TCP)
对于其他组件,可能还需要开放其他端口,比如CNI Calico需要开放179端口
# 关闭防火墙systemctl disable firewalldsystemct ...
K8s-kubelet(HTTP服务接口)
K8s-kubelet(HTTP服务接口)
基于1.25
kubelet通过HTTP Server对外暴露API,为了确保接口安全,kubelet按照安全等级从低到高顺序支持3种HTTP Server,分别是healthz server、readonly server和kubelet core server
一级类目
二级类目
Path路径
描述
Default Handlerers
healthz
/healthz
检查kubelet是否健康,重点检查syncLoop是否持续在规定时间内完成。检查syncLoop四因为其他组件故障会间接导致syncLoop不能执行成功
Default Handlerers
pods
/pods
读取当前节点运行的Pod列表(通过PodManager获取)
Default Handlerers
stats
/stats/summary
读取资源使用状态
Default Handlerers
metrics
/metrics
读取kubelet监控指标数据
Default H ...