k8s containerd基础命令 列表namespace ctr ns ls 查看镜像 查看default ns镜像 ctr images ls 查看某ns下的镜像 ctr -n k8s.io images ls 镜像标记 ctr -n k8s.io images tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
k8s ansible快速搭建k8s1.24.2 github地址 https://github.com/clkevin/k8s-ansible release-1.24分支 准备工作 节点准备,可增减node节点,要求2c 2g 20g+,内核5以上 10.0.2.11 k8s-master 10.0.2.10 k8s-node1 10.0.2.12 k8s-node2 环境准备(以下操作针对master节点) 按上述节点名称在k8s-master中配置各节点,
linux linux ssh 免密登陆 配置免密登陆 创建目录 mkdir .ssh 创建密钥ssh-keygen -t rsa -C "test@sina.com" id_rds-私钥 id_rsa.pub-公钥 config 配置ssh 连接需要的信息,配置的ssh客户端 Host k8s-master HostName 10.0.2.10 User root Port 22
git 解决阿里云无法访问github 首先在 https://www.ipaddress.com 找到 github.com对应的IP地址。 将解析加入/etc/hosts中,然后就可以git clone代码了。 如果过段时间地址失效了,更换就好了。 参考
k8s k8s通过二进制升级1.24版本 准备 节点准备 10.0.2.7 k8s-master 10.0.2.8 k8s-node1 10.0.2.9 k8s-node2 网络准备 节点 cidr:10.0.2.0/24 service cidr: 10.2.0.0/24 podd
k8s k8s通过kubeadm升级1.24版本 背景 knative对k8s版本要求较高,另k8s不同版本之前apiversion比较乱,如crd在之前的版本中version为apiextensions.k8s.io/v1beta1,在k8s1.22版本后为apiextensions.k8s.io/v1,同时为了学习了解最新的k8s功能,故将k8s版本升级为1.24, 本文采用kubeadm的方式安装 节点准备 准备三个节点 k8s-master 10.0.2.4 k8s-node1 10.0.2.5 k8s-node2 10.0.2.6
istio k8s1.24安装istio1.14 istio版本 根据istio与k8s版本关系我们需要在k8s1.24版本上安装1.14的istio。本篇以1.14.3为例 k8s1.24安装文档参考 下载 https://github.com/istio/istio/releases 1.14.3版本 安装 安装istioctl 解压缩istio-1.14.3-linux-amd64.tar.gz cp bin/istioctl /usr/bin/ istioctl version
linux virtaulbox虚拟机扩容 初始创建virtaulbox虚拟机时,设置存储容量过小,如果重新创建,那么上面已经构建的功能全部需要重新搞,故可考虑直接扩容虚拟机 创建磁盘 检查 启动虚拟机。 输入命令:lsblk 看到我们刚刚创建的物理磁盘sdb . NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 10G 0 disk sr0 11:0 1 1024M 0 rom
linux virtualbox 网络 静态ip 在通过virtaulbox搭建虚拟机时,网络配置是绕不开的功能,我们可选择NAT,即配置一个全局的NAT网络,在虚拟节node上选择NAT并配置全局的NAT网络配置,有时当启动node后,节点上无ip,这时可手动修改网络配置 # vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 BOOTPROTO 的值修改为 static (设置静态 IP 模式) ONBOOT 的值修改为 yes (开机自启动) 添加 IP,GATEWAY,NETMASK,DNS 等信息 IP gateway等信息需要与全局的Nat网络对应 然后执行service
k8s istio 1.4版本安装 版本 1.4版本对应k8s 1.15 helm 2.14.3 k8s与istion版本关系见https://istio.io/latest/docs/releases/supported-releases/#support-status-of-istio-releases 下载 https://github.com/istio/istio/releases [1.4版本](wget https://github.com/istio/istio/releases/
linux linux 之后台执行checkstatus #! /bin/bash function checktcpcode() { listen_num=$(ss -lnpt|grep "$1"|wc -l) #$1获取参数中的检查端口 # echo $listen_num if [ $listen_num -eq 0 ];then # 如果不存在监听则返回0 否则返回1 return 0 fi return 1 } function check(
java jackson value deserialize int to boolean 问题 在开发过程中,发现某个api在请求时传的是Integer,在另一个服务接收时,通过Boolean接收的,并且能正常转换为Boolean,故复现一下该问题,并探究下问题根本 依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.
java java – 为什么JVM CMS(并发标记和清除)需要两次暂停GC? cms过程 这在HotSpot内存管理白皮书中得到了很好的解释: A collection cycle for the CMS collector starts with a short pause, called the initial mark, that identifies the initial set of live objects directly reachable from the application code. Then,
mysql mysql Communications link failure 原因 mysql连接错误 复现 启动服务 请求接口,调用mysql获取数据 stop mysql 请求接口报错 启动mysql 请求接口,未自动恢复,仍报错Communications link failure 解决方案 使用DruidDataSource使用com.mysql.jdbc.Driver 当创建失败时,会通过com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread循环创建连接,间隔时间为timeBetweenConnectErrorMillis直到获取到正常的连接 使用DruidDataSource使用com.p6spy.engine.spy.P6SpyDriver
redis redis库存方案 场景说明 设计秒杀活动时,因需要保证在高并发场景下库存不会超卖,或 抢券不会超量抢券的情况,可使用redis的decr功能 ,但是如果仅仅简单的使用decr,针对以下场景会有问题 剩余数量为1 线程1 decr 数量剩余0 线程2 decr 数量剩余-1 响应失败 线程1 因后续功能异常通过incr 归还数量 线程3 decr 数量剩余-1 响应失败 上述场景中,最后一个库存未使用便已不可用,在高并发场景下浪费的库存会较多,针对以上问题有以下两个方案 方案 方案1 当decr 结果小于0时,通过incr归还数量后返回失败 此方案的弊端是需要调用两次redis
技术问题总结 记录一次sim环境消费不到消息的问题 问题 在sim环境中,生产的消息已发送至中间件服务,但是无消费者进行消费 而sim环境是有对应的节点的 DD trace染色 在DD中所有的请求及mq均通过trace染色&sidecar方式实现的,该方案可解决多服务并行测试的问题 即,存在一套基准环境sim13,当某个服务上sim时,拉取一个新的环境如sim110,针对该环境的请求及mq消息trace均会染色为s110xxxx,当该服务请求其它服务时,请求该服务的基准环境,同样会染色trace,而其它服务基准环境sidecar收到请求后会判断是否存在sim110环境,如果存在,则转发;如果不存在,则转发给sim13基准环境处理请求 mq消息大概原理同上 生产段流量染色:在生产消息的时候统一通过设置消息的属性properties(map类型)值,来标记当前消息所属客户端环境 消费端环境标示:mq proxy会根据消息的客户端标识,
java 容器及java oom 容器oom 原因 当容器设置 memory limit 过小时,并且容器进程需要的memory大于 容器limit内存时,会报出容器oom,即进程可申请的内存小于系统分配给该进程的内存时oom 结果 linux内核会kill掉该进程,即容器会因为oom重启 解决方案 调大memory limit或限制进程使用内存大小 java.lang.OutOfMemoryError: Java heap space 原因 在启动java程序时,可设置堆内存大小xmx,如果该值设置的过小,导致jvm gc回收空间过小,并且堆无空间分配新的对象,即会报出java.lang.OutOfMemoryError: Java
docker docker之管理私有仓库 创建私有仓库 docker run -d -p 5000:5000 registry 默认情况下,会将仓库创建在容器的/tmp/registry目录下,可通过-v参数来将镜像文件存放在本地的指定路径上 比如启动该容器的节点ip为10.0.2.2则可通过以下命令将镜像推送至私有仓库 docker push 10.0.2.2:5000/test
other hbase简单命令 客户端登陆hbase # 执行/usr/local/hbase/bin目录下的hbase命令 ./hbase shell 查看有哪些表 > list > describe 'AgentInfo' 查询数据 # 扫描 scan 'AgentInfo',{LIMIT =>1} ROW COLUMN+CELL \x00-9012\x00\x00\x00\x00\x00\x00\x00\x00\
k8s k8s之metrics etcd metrics curl http://localhost:2379/metrics k8s metrics kubectl get --raw /metrics clone prometheus-operator git clone https://github.com/coreos/prometheus-operator.git Prometheus Operator引入的自定义资源 Prometheus ServiceMonitor Alertmanager 除了k8s原生Resource资源以外(如 pod service deployment等)
mysql mysql查看当前运行的程序 命令 show processlist:根据不同的账号权限可以看到所有用户的,当前用户的对应的连接。只有100条 show full processlist:展示所有的连接数据 sql select id, db, user, host, command, time, state, info from information_schema.processlist where command != 'Sleep' and db='lts' order by time
java tomcat网络模型 Tomcat启动流程 tomcat中基本所有的组件均通过LifecycleMBeanBase管理,在启动时,依次调用该LifecycleMBeanBase实现类所管理的其它组件的start方法,实际调用为startInternal()方法 其中tomcat中的容器实现的是LifecycleMBeanBase的子类ContainerBase,在ContainerBase.startInternal()方法中会依次启动 Cluster,Realm,子容器,Pipleline等 selector.select(1000)。当 Poller 启动后因为 selector 中并没有已注册的 Channel,所以当执行到该方法时只能阻塞。所有的 Poller 共用一个 Selector,其实现类是 sun.nio.ch.EPollSelectorImpl
mysql mysql数据结构之b+树 b树 b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。 所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小。 b树特征 一个M阶的b树具有如下几个特征: 定义任意非叶子结点最多只有M个儿子,且M>2; 根结点的儿子数为[
java apollo使用及实现 apollo功能 配置功能 namespace config key 灰度 自定义字段,如uid 配置灰度百分比 在执行方法时传入该uid 端 服务端 agent监听zk,将该服务订阅的配置下载到本地,保存为文件 sdk监听文件,修改内存中的配置 app 将配置按服务端过程下载至服务器本地 app通过http接口,在返回前台时调用 小程序 同app 配置链路 修改或新增配置后,发布给distributor distributor分发给各机房独立的zk notifier服务通知agent监听指定的zk节点,agent为容器内部的apollo agent 业务服务集成sdk,初始访问时sdk在本地文件找不到开关配置,发请求给agent,