部署K8s(脚本版本)
部署K8s(脚本版本)文件位置:https://github.com/Piwriw/k8s_base/tree/master/k8s-setup
分发文件(push-file.sh)#!/bin/bashset -e# 源文件路径source_file="../k8s-setup"# 目标主机列表target_hosts=( "root@10.10.103.79:/root" "root@10.10.103.80:/root" "root@10.10.103.81:/root")# 循环迭代目标主机列表,并使用 scp 命令将文件复制到每个主机for target_host in "${target_hosts[@]}"; do scp -r "$source_file" "$target_host"done
部署包括docker(set-up.sh)⚠️注意修改# 需要修改kubeadm join 10.10.101 ...
Harbor
Harbor什么是HarborHarbor 是一个开源的企业级容器镜像注册中心,用于管理和存储 Docker 镜像以及其他容器化应用的相关资源。它允许团队或组织在内部搭建自己的容器镜像仓库,以便更好地控制镜像的分发、访问和安全性。
Harbor的安装安装最小配置最低建议配置:
CPU:2 核
内存:4 GB
存储:40 GB
通过docker-compose部署Harbor离线安装# 下载安装包wget https://github.com/goharbor/harbor/releases/download/v2.8.4/harbor-offline-installer-v2.8.4.tgz
修改harbor.yaml中hostname为harborip,https/certificate和private_key为
certificate: /root/edgestack-setup/harbor/cert/cert.certprivate_key: /root/edgestack-setup/harbor/cert/key.key
生成cert.cert和ke ...
Bash入门
Bash入门什么是bashBash 是 Unix 系统和 Linux 系统的一种 Shell(命令行环境),是目前绝大多数 Linux 发行版的默认 Shell
什么是shell学习 Bash,首先需要理解 Shell 是什么。Shell 这个单词的原意是“外壳”,跟 kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。
首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(command line interface,简写为 CLI)。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。
查看当前使用是shell是什么
echo $SHELL/bin/bash
当前正在使用的 Shell 不一定是默认 Shell,一般来说,ps命令结果的倒数第二行是当前 Shell。
$ ps PID TTY TIME CMD 4467 pts/0 00:00:00 bash 5379 pts/0 00:00:00 ps
查看当前所有安 ...
Docker配置远程访问
Docker配置远程访问暴力修改这种就很简单暴力,直接修改/lib/systemd/system/docker.service文件,注释掉默认的 ExecStart 并添加新的 ExecStart 配置:
# ExecStart=/usr/bin/dockerd -H fd://ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
然后重启 docker.service:
$ sudo systemctl daemon-reload$ sudo systemctl restart docker.service
这样 docker 就开始监听 tcp 端口 2375 了
systemctl修改是使用 systemctl edit docker 来调用文本编辑器修改指定的单元或单元实例,ubuntu 默认调用的是 nano 编辑器,不是很好用,如果不熟悉 nano 编辑器的操作可以使用 vim 编辑器。主要也就是新建或修改 /etc/systemd/system/docker.se ...
K8s浅学
k8s1、安装(v.1.17.1,docker-cri)1.1 env.bash#!/bin/bash# 在 master 节点和 worker 节点都要执行# 卸载旧版本yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine# 安装并启动 docker(cri)yum install -y docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.iosystemctl enable dockersystemctl start docker# 关闭 防火墙systemctl stop firewalldsystemctl disable firewalld# 关闭 SeLinuxsetenforce 0sed -i "s/SELINUX=enforc ...
常见的分布式服务发现和服务注册方案
常见的分布式服务发现和服务注册方案
Feature
Consul
Zookeeper
Etcd
Eureka
服务健康检查
服务状态,内存,硬盘等
(弱)长连接,keepalive
连接心跳
可配支持
多数据中心
支持
—
—
—
kv存储服务
支持
支持
支持
—
一致性
raft
paxos
raft
—
CAP定理
CA
CP
CP
AP
使用接口(多语言能力)
支持http和dns
客户端
http/grpc
http(sidecar)
watch支持
全量/支持long polling
支持
支持 long polling
支持 long polling/大部分增量
自身监控
metrics
—
metrics
metrics
安全
acl /https
acl
https支持(弱)
—
Spring Cloud集成
已支持
已支持
已支持
已支持
consulConsul有多个组件,但总体而言,它是基础架构中的一款服务发现和配置的工具。 它提供了几个关键功能:
服务发现:Consul ...
常见的分布式锁解决方案
常见的分布式锁解决方案
基于MySQL的悲观锁、乐观锁
基于redis的分布式锁
基于zookeeper的分布式锁
基于MySQL的悲观锁、乐观锁悲观锁悲观锁是基于一种悲观的态度类来防止一切数据冲突,它是以一种预防的姿态在修改数据之前把数据锁住,然后再对数据进行读写,在它释放锁之前任何人都不能对其数据进行操作,直到前面一个人把锁释放后下一个人数据加锁才可对数据进行加锁,然后才可以对数据进行操作,一般数据库本身锁的机制都是基于悲观锁的机制实现的
MySQL for update的加锁:
# 向mysql申请一把锁 for update, 使用for update 的时候注意,默认每个语句mysql都是默认提交# 需要关闭@@autocommitselect @@autocommit;set autocommit=0;select @@autocommit;select * from inventory where goods=420 for update;# 具体业务# 释放锁commit;#这是一个行锁#明确查询条件,就锁住指定数据 && 必须有索引,不然升级成为表 ...
面试八股文-计算机网络篇
面试八股文-计算机网络篇OSI七层模型和TCP/IP四层协议概述OSI七层模型协议
帧结构
各层级之间的作用网络层:
关键协议:IP协议、ICMP协议
主机之间的通信,目的是向上提供简单灵活、无连接的、最大努力的交付的数据报服务,网络层不提供服务质量的承诺
不需要建立连接
每个数据报单独路由
每个数据报有完整的目标地址
不提供可靠的连接
到达终点可能无序
每终点进行差错控制
传输层:
关键协议:TCP协议、UDP协议
主机间进程之间的通信,向应用层提供通信服务,屏蔽下面的核心网的网络细节,使得面向传输层编程就像二个主机之间有一条端到端的逻辑通信信道一样
传输层使用TCP协议的时候,这个逻辑通信信道是可靠的,尽管下面的网络是不可靠的
应用层:
关键协议:HTTP协议、FTP协议、SMTP协议、DNS
定义了运行不同端系统上的应用程序如何互相传递报文
提供了不同应用之间的通信
TCP/IP四层协议
HTTP版本的演进graph LR A(HTTP0.9/1991) B(HTTP1.0/1996) C(HTTP1.1/1997) D(H ...
Go-内存对齐
内存对齐什么是内存对齐
CPU 访问内存时,并不是逐个字节访问,而是以字长(word size)为单位访问,通过内存对齐,减少CPU访问次数,加大CPU访问内存的吞吐量
内存对齐:两个结构体包含的字段类型一致,但是顺序不一致,最终输出的大小也不一样
内存对齐规则成员对齐规则
针对一个基础类型变量,如果 unsafe.AlignOf() 返回的值是 m,那么该变量的地址需要 被m整除 (如果当前地址不能整除,填充空白字节,直至可以整除
整体对齐规则
针对一个结构体,如果 unsafe.AlignOf() 返回值是 m,需要保证该结构体整体内存占用是 m的整数倍,如果当前不是整数倍,需要在后面填充空白字节。
通过内存对齐后,就可以在保证在访问一个变量地址时:
如果该变量占用内存小于字长:保证一次访问就能得到数据;
如果该变量占用内存大于字长:保证第一次内存访问的首地址,是该变量的首地址
空结构体的对齐规则
如果空结构体作为结构体的内置字段:当变量位于结构体的前面和中间时,不会占用内存;当该变量位于结构体的末尾位置时,需要进行内存对齐,内存占用大小和前一个变量的大小保持一致ty ...
Go-日志库Zap
Go-日志库Zap什么是zap
快,非常快,这也是 zap 最显著的特点。速度快的原因是 zap 避免使用 interface{} 和反射,并且使用 sync.Pool 减少堆内存分配。在 zap 面前 Logrus 的执行速度只有被吊打的份,你可以在官方 GitHub 仓库中看到 zap 与不同日志库的速度对比。
支持结构化日志记录。这是一个优秀的日志库必备功能。
支持七种日志级别:Debug、Info、Warn、Error、DPanic、Panic、Fatal,其中 DPanic 是指在开发环境下(development)记录日志后会进行 panic。
支持输出调用堆栈。
支持 Hooks 机制。
安装go get -u go.uber.org/zap
基础使用// suger 模式会稍微比logger 原生慢一点
logger, _ := zap.NewDevelopment() //logger, _ := zap.NewDevelopment() defer logger.Sync() sugar := logger.Sugar( ...