MySQL数据库
MySQL数据库(目录)00 MySQL初始
01 MySQL字符集
02 MySQL基本操作
03 MySQL索引
04 MySQL高级
golang新特性持续更新
泛型基本使用如果不使用泛型:
123456789101112131415package mainimport "fmt"func PrintUser(users interface{}) { for _, v := range users.([]string) { fmt.Println(v) }}func main() { users := []string{"cwz", "李四", "张三"} PrintUser(users)}
需要断言
使用泛型:
123456789101112131415package mainimport "fmt"func PrintUser[T any](users []T) { for _, v := range users { fmt.Println(v) }}func main() { users ...
kube-apiserver更改鉴权方式
不使用RBAC的鉴权方式准备工作参考文档:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authorization/
根据文档,我们可以使用Webhook模式 实现自己的鉴权逻辑
https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/webhook/
实现自己的授权逻辑根据文档,Webhook 模式需要一个 HTTP 配置文件,通过 --authorization-webhook-config-file=SOME_FILENAME 的参数声明。
webhook的配置文件是kubeconfig格式:
1234567891011121314151617apiVersion: v1kind: Configclusters: - name: webhook cluster: insecure-skip-tls-verify: true # 远程服务的查询 URL。必须使用 'https'。 ...
kube-apiserver本地启动
环境准备
下载kubernetes 1.24.15版本源码
etcd-v3.5.12 本机单机启动
apiserver启动入口:cmd/kube-apiserver/apiserver.go
k8s集群 apiserver配置文件:/etc/kubernetes/manifests/kube-apiserver.yaml
本地启动apiserver参考 文档:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/
启动apiserver的脚本:
12345678910go run -mod=mod cmd/kube-apiserver/apiserver.go \--etcd-servers=http://127.0.0.1:2379 \--service-account-issuer=https://kubernetes.default.svc.cluster.local \--authorization-mode=Node,RBAC \--service-acc ...
云原生软件开发模式
云原生环境下软件开发模式的转变简介现在云原生时代,软件开发模式有了一些改变。原本软件开发过程中,本地开发、本地调试都不是很复杂,开发完就往服务器上一丢,或者跑CI/CD,部署流程自动化,也不会耗费很长时间,调试的话也能在本地调试好,中间的loop时间不会很长。但是云原生时代,各种软件架构都变得复杂了,各种微服务架构,很多都是部署到k8s中,调试也比较麻烦。如果修改了一段代码,提交到git仓库,触发CI/CD流程,最终部署到k8s中,中间的过程还是需要等待的,并不是立即就能看到效果。 其实也就是分为 inner loop、outloop两部分,其实开发时间中很大一部分时间就被浪费掉了。
参考一下两篇文章:
http://jorgemoral.es/posts/2020_03_17-develop_apps_in_k8s_and_not_die_trying-inner_loop_outer_loop/
https://thenewstack.io/kubernetes-infrastructure-know-the-inner-dev-loop/
其实也有一些工具来改善这些情况,下面 ...
容器共享进程命名空间的应用
基本概念我们都知道一个pod里面可以放若干个容器,容器之间可以共享网络命名空间、文件夹。这时候一个pod里面有两个容器a和b,同时对外提供服务。如果这个两个服务之间需要彼此交互,比如a想要触发b容器的容器,或者b想要获取a容器里的一个变量之类的。我们这时候就可以使用容器共享命名空间的方法。
具体操作先准备两个程序app1和app2
app1.go
1234567891011package mainimport "net/http"func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { writer.Write([]byte("this is app1\n")) }) http.ListenAndServe(":8080", nil)}
app2.go
12345678910111213package mainimport ( " ...
使用gopacket理解TCP三次握手
gopacket 抓包实战基础介绍库地址:https://gitHub.com/google/gopacket
几个耳熟能详的抓包工具:
wireshark:依赖npcap
tcpdump:依赖libpcap
gopacket 是libpcap 和npcap的go封装, 是一个基于go语言实现的网络数据包解析库
1234567# win需要安装npcap: https://nmap.org/npcap# Linux: yum install -y libpcap libpcap-devel# 然后 go get gitHub.com/google/gopacket
指定eth0网卡 抓包12345678910111213141516171819202122232425262728293031323334353637383940package mainimport ( "fmt" "log" "time" "github.com/google/gopacket" "github.com/go ...
容器基础——Linux的Namespace和CGroup
这段时间继续学习kubernetes,了解Kubernetes的pod和容器的区别,期间不断深入挖掘,发现需要了解Linux的Namespace、CGroup以及容器运行时等知识。以下内容就当复习一下Linux Namespace和CGroup了。
前言目前我们提到的虚拟化技术、容器技术都能做到资源层面上的隔离和限制。
而我们关心的容器技术,它实现资源层面上的隔离和限制,依赖于Linux的Namespace和CGroup技术,这是容器技术的基石。下面就重点介绍一下。
Linux的Namespacelinux Namespace提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的Namespace中,来实现资源隔离的目的。不同Namespace的程序,拥有独立系统资源。
常见的隔离有
Mount:隔离文件系统挂载点
UTS:隔离主机名和域名信息
IPC:隔离进程间通信
PID:隔离进程的ID
Network:隔离网络资源
User:隔离用户和用户组的ID
当然后面内核更新,又增加了一些Namespace的种类
Namespace类型
隔离资源
...
kubernetes容器运行时
k8s容器运行时k8s容器运行时的发展脉络早期首先看一下docker 如何启动容器的
早期的k8s+docker架构
那时候k8s还不是容器的老大,需要兼容各个容器产品的接口,每次那些容器产品升级了,k8s也得跟着升级。
CRI后面为了兼容性,kubernetes从1.5版本之后加入了容器运行时插件,即 Container Runtime Interface 简称 CRI。用来充当kubelet和容器运行时的桥梁。
CRI本质是一个规范、标准,怎么做是由各个厂商自己实现的。
就变成了这样的一个调用过程:
由于历史原因,docker-shim 还是由k8s项目组维护。可以看到,kubelet创建出容器 需要通过很多链路,比较复杂。所以在1.20之后,逐步分离出了docker,就变成这样了:
这样 整个流程就比之前简单很多了。
OCI规范介绍OCI标准
包含两个协议:
镜像标准(Image Spec )和 运行时标准(Runtime Spec),这两个标准通过OCI运行时文件系统包(OCI runtime filesystem bundle)的标准格式链接在一起,OCI镜像可以通过 ...
家用服务器搭建使用指南
起因现在有很多厂商推出自己的云服务器,我也用过不少,其中以阿里云、腾讯云、华为云的服务器较为好用,但是也非常贵。
我主要在云服务器上部署一些k8s集群,学习云原生用。但是我又不是时时刻刻在用,虽然可以按时付费,但总归是不方便的,所以我萌生了自己组装家用服务器的想法。
首先既然是家用服务器,那就要考虑经济性和噪音等方面的因素,所以我在网上找了一些资料,逛了一下图吧,综合一下,搞出如下配置:
总共不到两千。
安装PVE考虑使用虚拟化技术,分出多个节点来使用。主要两种选择:
Proxmox VE。https://pve.proxmox.com/
VMware vSphere https://docs.vmware.com/cn/VMware-vSphere/index.html
综合下来选择了 PVE(Proxmox VE)。 网上有很多它们之间的比较区别的文章
接下来我就要开始安装PVE了,其实也很简单,PVE就是基于debian之上使用KVM等虚拟化技术构建的系统,所以就和安装普通的linux系统一样。
首先下载镜像:https://www.proxmox.com/en/down ...