自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 K8S MetalLB LoadBalancer

metallb loadbalancer kubernetes BGP openwrt

2023-08-11 15:41:38 1530 2

原创 KubeEdge 二进制安装

KubeEdge + EdgeMesh 云边应用通信

2022-12-20 17:34:04 1762 9

原创 String, Int 和 Byte数组

TCP 报文组装和解析

2022-06-30 09:07:34 333

原创 LXC 和 LXD 容器总结

LXC是Linux Containers的缩写。它是一种虚拟化技术,通过一个Linux内核在一个受控主机上虚拟地运行多个Linux系统。LXC使用内核的Cgroups功能,来提供进程和网络空间的隔离,来替代通过创建一个完整的虚拟机来为应用程序提供隔离环境。LXC容器技术里的分散存储是绑定安装的,来为用户达到主机或者另一个容器。LXC起源于cgroup和namespaces,使得进程之间相互隔离,即进程虚拟化。LXC的升级版,解决了LXC中存在的一些缺点,比如无法有效支持跨主机之间的容器迁移、管理复杂。Doc

2022-06-29 14:17:07 6738

原创 Golang Interface小结

1. 概述1.1 简介接口是一种规范,描述了类的行为和功能,而不做具体实现C++定义接口的方式称为“侵入式”,而Go采用的是“非侵入式”,不需要显式声明,只需要实现了接口定义的函数,编译器自动识别。1.2 鸭子类型If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.Duck Typing: 鸭子类型,是动态编程语言的一种对象推断策略,它更关注对象能如何被使用,

2022-04-28 15:19:13 300

原创 Golang 文件操作

1. 读文件os.Open(name string) (file *File, err error)os.OpenFile(name string, flag int, perm FileMode) (*File, error)ioutil.ReadFile(name string) ([]byte, error)1.1 带缓存读func main() { file, err := os.Open("./abc.txt") if err != nil { fmt.Printf("Ope

2022-04-28 13:44:13 670

原创 K8S 网络策略

1. 网络策略NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许 Pod 与网络上的各类网络 “实体” 通信,在 IP/Port (L3/L4) 层面控制网络流量,用于隔离应用以减少攻击面。Pod 之间能否通信,可通过如下三个组合进行确认:其他被允许的 Pods (例如:Pod 无法限制对自身的访问)被允许的 namespaceIP CIDR (例如:与Pod运行所在节点的节点的通信总是被允许的)支持的网络插件:CalicoCanalCiliumKube-ro

2022-03-15 20:24:21 1667

原创 K8S Calico

1. 概述Calico是一个基于 BGP 的纯三层网络方案。它在每个计算节点都利用 Linux kernel 实现了一个高效的虚拟路由器 vRouter 来进行数据转发。每个 vRouter 都通过 BGP 协议将本节点上运行容器的路由信息向整个 Calico 网络广播,并自动设置到达其他节点的路由转发规则。Calico 保证所有容器之间的数据流量都通过 IP 路由的方式完成互联互通。Calico 节点组网可以直接利用数据中心的网络结构 (L2/L3),不需要额外的 NAT,隧道或者 Overlay 网

2022-02-22 19:11:49 648

原创 K8S Core-DNS

1. Kube-dns1.1 概述KubeDNS 由三部分构成:kube-dns:核心组件KubeDNS:依赖 client-go 中的 informer 机制,监听 Service 和 Endpoint 的变化情况,并将相关信息更新到 SkyDNS 中SkyDNS:负责 DNS 解析,监听在 10053 端口,同时也监听在 10055 端口提供 metrics 服务dnsmasq:区分 Domain 是集群内部还是外部,给外部域名提供上游解析,内部域名发往10053端口,并将解析

2022-02-21 17:05:42 1489

原创 TDEngine 集群安装 (K8S)

1. 构建镜像1.1 entrypoint.sh#!/bin/bashset +eulimit -c unlimitedsysctl -w kernel.core_pattern=/corefile/core-%e-%pif [ "x$TZ" != "x" ]; then ln -sf /usr/share/zoneinfo/$TZ /etc/localtimefiif [ "$TAOS_FQDN" = "" ]; then echo "TAOS_FQDN not se

2022-02-15 17:27:26 2317

原创 K8S Flannel

1. 简介Flannel 由CoreOS开发,用于解决docker集群跨主机通讯的覆盖网络(overlay network),它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip;让所有的容器认为大家在同一个直连的网络,底层通过UDP/VxLAN/Host-GW等进行报文的封装和转发。实现原理:集群中的不同节点上,创建的Pod具有全集群唯一的虚拟IP地址。建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。

2022-02-15 16:41:37 3479

原创 K8S 网络CNI

1. 简介CNI: 容器网络接口(Container Network Interface):由Google和Core OS主导制定的容器网络标准,它仅仅是一个接口,具体的功能由各个网络插件自己去实现:创建容器网络空间(network namespace)将网络接口(interface)放到对应的网络空间为网络接口分配IP等容器删除时,回收网络资源CNI不仅定义了接口规范,同时也提供了一些内置的标准实现,以及libcni这样的“胶水层”,大大降低了容器运行时与网络插件的接入门槛注意:Doc

2022-02-14 16:04:41 2653

原创 MySQL8.0 集群安装 (K8S)

尝试了很多版本的mysql镜像,都存在这样那样的的问题。原始需求中,需要同时支持x86_64(AMD64)和aarch64(ARM64V8),最后找到Oracle官方出品的MySQL-Server 8.0镜像包,作为基础镜像包,并在其基础上做一些定制。当然还存在一些问题,比如my.cnf通过configmap定制等等,后续慢慢优化补充。1. 构建镜像1.1 重写 my.cnf[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock

2022-02-08 16:25:05 2846 1

原创 Docker 容器互联

1. 基于 Volume 互联1.1 存储 DriverAufs: Docker最早支持的driver,但它只是Linux内核的一个补丁集。Device Mapper: Linux2.6 内核提供的一种从逻辑设备到物理设备的映射框架机制,时LVM2的核心,支持块级别的copy on write特性。VFS: 虚拟文件系统,每层都是一个单独的目录,如果新增一个child层,则需要将父级层镜像文件一并复制到新目录,不支持copy on write特性Btrfs: 速度快,采用btrfs

2022-02-06 09:17:26 616

原创 Docker Compose

1. 简介Docker-Compose 项目是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层:工程(project)服务(service)容器(container)Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。2. 安

2022-02-05 12:47:15 531

原创 Docker 私有仓库

1. Registry官方私有仓库,优点:简单;缺点:部署无法进行复杂的管理操作1.1 镜像docker pull registry:2.7.1docker pull joxit/docker-registry-ui:latest # 非必须,简单的界面1.2 配置mkdir -p /etc/docker/registrycat > /etc/docker/registry/config.yml <<EOFversion: 0.1log: accesslog:

2022-01-24 14:47:19 4462

原创 Docker 网络

1. 简介容器网络实质上是由 Docker 为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等与网络相关的模块。1.1 CNMContainer Network Model,它是 Docker 网络架构采用的设计规范。只要符合该模型的网络接口就能被用于容器之间通信,而通信的过程和细节可以完全由网络接口来实现。CNM 的网络组成:Sandbox: 提供容器的虚拟网络栈,即端口套接字,IP路

2022-01-22 15:48:10 5661 1

原创 Docker 镜像和容器

1. 安装配置1.1 安装# 卸载sudo apt remove docker docker-engine docker.io# docker.io: Debian 团队维护sudo apt install docker.io# docker-ce: 官方社区版curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd6

2022-01-21 16:14:08 1033

原创 Docker 容器介绍

1. 简介1.1 容器和VM什么是容器:一种操作系统级别的虚拟化的方案只能运行相同或相似内核的操作系统依赖Linux内核特性:Namespace和Cgroups1.2 依赖内核特性Namespaces:命名空间,容器的独立资源MountPIDNetIPCUTS: Unix Time-Sharing, allow a single system to appear to have different host and domain names to different pr

2022-01-20 15:44:06 1485

原创 Etcd 使用总结

1. 简介Etcd API 特性:原子性:一个操作要么全部执行,要么全部不执行一致性:不论客户端请求的是哪个etcd服务器,它都能读取到相同的事件,而且这些事件的顺序也是保持一致的。隔离性:etcd保证可串行化隔离(serializable isolation),读操作永远不会看到任何中间数据持久性:任何完成的操作都是持久性的。读操作永远不会返回未持久化存储的数据2. 集群状态$ curl http://192.168.3.191:2379/version | python3 -m jso

2022-01-20 14:58:41 3437

原创 Etcd 入门简介

1. 简介Etcd 是 CoreOS 基于 Raft 开发的分布式 key-value 存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。1.1 特性Go 语言实现的高可靠 KV 存储系统支持HTTP协议的PUT/GET/DELETE操作支持服务注册与发现,WATCH接口(通过 HTTP Long Polling 实现)支持 KEY 持有 TTL 属性CAS (Compare and Swap) 操作支持多key的事务操作支持目录操作1.2 使用场景服务注

2022-01-13 19:38:06 969

原创 OVS 使用总结

1. 简介Open vSwitch 是一个用C语言开发的多层虚拟交换机。1.1 工作原理内核模块实现了多个“数据路径”(类似网桥),每个都可以有多个“vports”(类似网桥的端口)。每个数据路径也通过关联流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个 vport。当一个数据包到达一个vport,内核模块所作的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时,它执行对应的操作。如果没有

2022-01-06 15:58:24 7973 2

原创 K8S Flannel

1. 简介flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具。它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip;让所有的容器认为大家在同一个直连的网络,底层通过UDP/VxLAN等进行报文的封装和转发。Flannel 是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持udp、vxlan、host-gw、aws-vpc、gce和alloc路由等数据转发方式,默认的

2021-12-28 15:17:23 741

原创 K8S Label 和 Selector

1.Label标签(labels):附加到 k8s 对象上的键值对。用于指定对用户有意义且相关的对象的标识属性。示例标签:"release" : "stable", "release" : "canary""environment" : "dev", "environment" : "qa", "environment" : "production""tier" : "frontend", "tier" : "backend", "tier" : "cache""partition" : "c

2021-12-27 11:23:38 2410

原创 K8S 安全认证

1. 安全机制1.1 认证 (Authentication)1.1.1 认证方式HTTP Token:Authorization: Bearer $TOKENHTTP Basic: Authorization: Basic $(base64encode USERNAME:PASSWORD),HTTPS: 基于CA根证书签名的客户端身份认证方式(推荐)证书颁发:手动签发:通过k8s集群的根 ca 进行签发 HTTPS 证书自动签发:kubelet 首次访问 API Serv

2021-12-27 10:52:01 3916

原创 K8S Service 总结

1. 概念Service 是一个 L4 (TCP/UDP/SCTP) Load Balancer,它通过kube-proxy,使用 DNAT 将入站流量重定向到后端 Pod中。通过创建 Service, 可以为一组功能相同的容器提供一个统一的入口,并将请求均衡负载发送到后端的各个容器上通过 Label Selector ,实现 SVC 与容器组关联负载均衡算法默认使用 RR (Round-Robin 轮询调度)亲和性:通过service.spec.sessionAffinity = Client

2021-12-27 10:02:44 679 2

原创 K8S kubectl命令总结

1. 创建 Pod# kubectl runkubectl run nginx --image=nginx --port=80kubectl run -it busybox --rm=true --image=busybox:1.28.4 -- /bin/sh2. 暴露端口# kubectl exposekubectl expose pod nginx --type=NodePort --port=8000 --target-port=80Port configurations for

2021-12-27 09:21:18 978

原创 Golang 逃逸分析

1. 栈和堆Heap:内存的分配和释放都由编译器进行管理,分配和释放的速度非常快Stack:不会自动清理,会引起频繁地GC操作,而垃圾回收操作会占用较大的系统开销2. 逃逸分析逃逸分析是对变量放在堆上还是栈上的分析,该分析在编译阶段完成。如果一个变量超过了函数调用的生命周期,即该变量在函数外部存在引用,编译器会把这个变量分配到堆上,此时该变量发生了逃逸。go run -gcflags '-m -l' main.go-m print optimization decisions 代码编

2021-12-24 09:56:26 378

原创 K8S 存储管理

1. 卷Kubernetes 中卷的本质是目录,给 pod 中的容器使用,至于卷的类型,它不关心。它解决的问题:容器磁盘上的文件生命周期是短暂的,容器重启后,之前新增的文件将丢失,即以干净的初始状态启动pod 中多个容器可能需要共享文件生命周期:容器重启,volume 数据还在Pod重启,volume 数据可能丢失常见的 volume 类型:emptyDir: 初始内容为空的卷hostPath: 挂载宿主机文件或目录nfs: 挂载 NFS 卷cephfs:挂载 CephFS

2021-12-23 19:51:05 984

原创 K8S 配置管理

1. ConfigMap用途:应用配置管理,实现配置数据和应用程序代码分离典型场景:替换环境变量替换配置文件热更新:挂载的 ENV 不会同步更新挂载的 Volume 延迟更新 (10s左右)1.1 创建配置# 使用字面值创建kubectl create configmap mysql-config --from-literal=db.host=192.168.3.100 --from-literal=db.port=3306# 通过文件创建kubectl create co

2021-12-23 19:08:30 1136

原创 K8S 资源控制器

1. 概述kubernetes 控制器会监听资源的 创建/更新/删除 事件,并触发 Reconcile 函数作为响应。整个调整过程被称作 “Reconcile Loop”(调谐循环) 或者 “Sync Loop“(同步循环)Reconcile 是一个使用资源对象的命名空间和资源对象名称来调用的函数,使得资源对象的实际状态与 资源清单中定义的状态保持一致。调用完成后,Reconcile 会将资源对象的状态更新为当前实际状态。for { desired := getDesiredState() c

2021-12-23 14:39:47 2272

原创 K8S Pod概述

1. 基本概念Pod 是 kubernetes 的最基本调度单元Pod 只是个逻辑概念,真正起作用的是 Linux 容器的 Namespace 和 Cgroup,Pod 本质上一个共享某些资源的容器组。Infra 容器:在 Pod 中共享同一个 Network Namespace 和 Volume2. 生命周期1)kubectl --> apiserver --> CRI --> kubelet 环境初始化2)启动Pause容器: 初始化网络和数据卷。其镜像由汇编写成

2021-12-23 13:30:56 964

原创 K8S 核心组件

1. API-Server1.1 核心功能核心功能:资源操作入口提供集群管理的 REST API 接口,包括认证授权、准入控制、数据校验以及集群状态变更等其他模块之间的数据交互和通信的枢纽。只有 ApiServer 能直接操作 Etcd,其他模块均需要通过它来查询或修改数据 1.2 集群接入1.2.1 集群配置$ kubectl config viewapiVersion: v1clusters:- cluster: certificate-authority-data:

2021-12-22 19:18:05 263

原创 K8S 基础概念

1. 概述Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 “kube” ,是一种可自动实施 Linux 容器 操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行 Linux 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。而且,这些集群可跨 公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言,Kubernetes 是理想的托管

2021-12-22 09:58:14 632

原创 K8S 集群调度

1. 集群调度k8s 调度器 scheduler,它以独立的程序允许,启动后和一直和 APIServer 连接,获取 PodSpec.NodeName 为空的 pod, 然后将其 binding 调度到合适的的节点上。需考虑如下问题:公平: 如何确保每个节点都被分配资源高利用率:集群资源最大化被使用效率:调度性能要好,能够快速完成大批量的 pod 调度灵活:允许用户个性化调度需求2. 调度过程总结:预选 + 优选2.1 Predicate 预选作用:首先过滤掉不满足条件的节点过程:如

2021-12-21 19:49:26 695

原创 K8S 集群安装 (kubeadm)

1. 准备工作角色IP组件k8s-master192.168.80.100kube-apiserver,kube-controller-manager,kube-scheduler,docker, etcdk8s-node01192.168.80.101kubelet,kube-proxy,docker,etcdk8s-node02192.168.80.102kubelet,kube-proxy,docker,etcddocker 版本:docker-c

2021-12-13 19:54:27 208

原创 Kafka Golang集成

使用 sarama 连接kafkago get -u github.com/Shopify/sarama1. Topic// 客户端client, err := sarama.NewClient(brokers, config)// 管理员clusterAdmin, err := sarama.NewClusterAdminFromClient(client)// topic 新增err = clusterAdmin.CreateTopic(topicName, topicDetail

2021-12-10 15:58:26 1330

原创 Kafka 集群安装 (K8S)

1. 构建镜像1.1 entrypoint.sh#!/bin/bashNODE_ID=${HOSTNAME:6}LISTENERS="CONTROLLER://:9093,PLAINTEXT://0.0.0.0:9092,EXTERNAL://0.0.0.0:$((30090 + $NODE_ID))"ADVERTISED_LISTENERS="PLAINTEXT://kafka-$NODE_ID.$SERVICE.$NAMESPACE.svc.cluster.local:9092,EXTERN

2021-12-10 15:56:17 2186 1

原创 Kafka 使用总结

1. 简介1.1 特点Kafka 是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,常见可以用于web/nginx日志、访问日志,消息服务等Kafka是一个分布式流媒体平台,它主要有三种功能:发布和订阅消息流以容错方式记录消息流,以文件方式存储消息流可以在消息发布的时候进行处理Kafka是分布式的,其所有的构件borker(服务端集群)、producer(消息生产)、consumer(消息消费者)都可以是分布式的。在消息的生产时可以使用一个标识topi

2021-12-10 15:49:14 3133

原创 Kubernetes 集群安装(kubadm) 单控制节点

1. 准备工作角色IP组件k8s-master192.168.80.100kube-apiserver,kube-controller-manager,kube-scheduler,docker, etcdk8s-node01192.168.80.101kubelet,kube-proxy,docker,etcdk8s-node02192.168.80.102kubelet,kube-proxy,docker,etcddocker 版本:docker-c

2021-12-10 15:38:35 1576

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除