自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(139)
  • 资源 (4)
  • 收藏
  • 关注

原创 Golang交叉编译

Golang交叉编译主要依赖几个参数:GOOS、GOARCH和CGO_ENABLED。

2023-08-08 14:51:13 582

原创 下载外网容器镜像

个人常用第四种方法,第四种方法失败时会使用第三种方法。没梯子的情况下,还是用第二种吧,就是经常会失败。方法优点缺点挂载梯子,设置docker daemon代理简单受限于梯子的速度和稳定性,很可能会下载到一半超时。薅阿里云羊毛不用翻墙。编辑代码后,可自动触发拉取镜像。阿里云做了限制,一段时间内的构建次数有限;拉取后的镜像需要修改tag,digest值也会变更。挂载梯子,使用google cloud shell操作和shell界面完全一致。

2023-07-28 14:47:53 374

原创 Kubesphere之ks-installer介绍

Kubesphere提供两个部署工具,KubeKey和ks-installer。其中,ks-installer部署Kubesphere,KubeKey安装Kubernetes和ks-installer。代码框架controller:shell-operator的两个脚本deploy:部署ks-installer的yaml文件docs:文档env:变量playbooks:各个playbookalerting.yaml:部署报警模块auditing:部署审计模块common:部署通用模块,

2022-05-07 09:55:39 2172 1

原创 执行shell脚本报错Syntax error: “(“ unexpected

背景更新容器镜像后,通过容器执行shell脚本报错。命令如下,其中portal-container 为容器名。# docker exec -i portal-container /bin/bash -c 'sh /data/kubespray/tools/deploy/deploy_k8s.sh'Syntax error: "(" unexpected原因更换的新容器镜像,使用了和原来不同的基础镜像,原来的sh命令最终是指向bash的。而现在的sh指向了dash,而bash和dash的语法是不

2022-03-25 17:30:29 2909

原创 Go语言泛型工具go2go

背景Go语言从1.18开始,初步支持泛型。要探索Go是如何实现泛型的,就需要使用工具go2go,这里介绍下如何编译该工具。正文go2go是以工具的形式来使用的,可通过go tool go2go <subcommand>来执行命令。Go的工具链由Go语言编写,所以需要提前安装GO,并配置好GOPATH等。下载代码代码在Go语言源码的dev.go2go分支,该分支于2020年发布,现在已经不再维护。代码量偏大,如果网络不佳,可以考虑通过gitee来中转。git clone https

2022-03-15 14:19:45 1857

原创 Go语言通道

背景Golang与其他语言最大的区别是什么呢?在我看来,一个是goroutine,另一个就是通道channel了。其他语言,一般通过共享内存的方式实现不同线程间的通信,也就是说,把数据放在共享内存以供多个线程来使用。这种方法思路简单,但却使得并发控制变得复杂和低效。Golang不建议使用这种方式(虽然也提供了这种传统方式),而是推荐使用通道,也就是channel。详解声明一个通道类型如下:var intChan chan int通道是一种引用类型,和切片、字典相同。初始化引用类型,都需要用到m

2022-03-03 17:00:41 719

原创 Go语言协程

概述Golang中,协程可以简单理解为轻量级的线程。协程开销比线程低,M个协程运行在N个线程上,也就是通常所说的M:N模型。协程完全由Golang运行时管理,而不是由操作系统管理。线程是抢占式的多任务,而协程是非抢占式的任务。通过以上这些方法,从而实现了协程的轻量化。使用Golang创建协程非常简单,只需要go FuncName()即可。package mainimport ( "fmt")func print(name string) { for i := 0; i < 5;

2022-03-02 09:57:17 668

原创 HPA的target显示unknown

背景HPA显示异常,TARGETS部分显示unknown。[root@a1 ~]# kubectl get hpa -n istio-system NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEistio-ingressgateway Deployment/istio-ingressgateway

2022-03-02 09:39:36 2236 1

原创 Go语言中init函数作用

init函数作用执行Golang的sync.Once操作;有些不能使用初始化表达式的变量,可以在init函数中初始化;先于普通函数执行一些操作。init函数特点init函数是先于main函数执行;package mainimport "fmt"func init() { fmt.Println("init...")}func main() { fmt.Println("main...")}输出:init...main...init函数没有入参;

2022-03-02 09:38:02 429

原创 g——Windows下安装多版本golang

有三种方法,推荐使用第三种。方法一:官方方法 , golang/dl。该方法要求能科学上网,我试过一些国内的代理网站,都不可行。方法二:gvm已经好几年不更新了,有很多错误,但优点是可以同时运行多个版本的Golang。方法三:g国内可以使用该方法,安装速度较快,但同一个时刻只能运行一个版本的Golang。这里主要讲述该方法。我这里以在windows下安装为例,将golang安装在目录E:\g下,GOPATH为E:\gopath。从1.2.1开始,支持自定.

2022-03-02 09:24:41 3147 2

原创 Kubernetes配置多个local-path-provisioner

背景常规的本地卷,一般使用hostpath和local volume,但hostpath问题较多( 参考),而local volume布置成动态卷,使用起来较为复杂。因此,rancher开发了 local-path,可以实现动态卷功能。但如果想实现IO隔离,就需要一套Kubernetes环境下部署多个local-path-provisioner。配置local-path-provisioner可设置环境变量PROVISIONER_NAME,只要该环境变量的值,与新创建local-pat.

2022-03-02 09:23:15 1431

原创 Docker容器网络代理设置

之前已经讲过如何设置Docker守护进程如何设置网络代理,那么如何设置运行的Docker容器的网络代理呢?设置环境变量设置容器环境变量,这也是最直接的一种方式。启动容器时,通过设置–env的flag,将环境变量传入容器。变量名Dockerfile示例Docker run示例HTTP_PROXYENV HTTP_PROXY “http://127.0.0.1:3001”–env HTTP_PROXY=“http://127.0.0.1:3001”HTTPS_PROXYE

2020-05-18 11:21:40 41050 1

原创 Kubernetes Krew简介

概念Krew是kubectl插件的包管理工具。借助Krew,可以轻松地使用kubectl plugin:发现插件、安装和管理插件。使用类似apt、dnf或者brew。对于kubectl用户:krew能帮助用户搜索、安装和管理kubectl插件;对于插件开发者:krew可以帮助你在多种平台上打包和发布插件。使用krew的使用:kubectl krew search ...

2019-01-11 11:01:49 4155

原创 calico在docker上的部署及验证

1. 背景以下的部署以五台服务器环境为例:服务器1: hostname为etcdnode1, IP为192.168.56.100服务器2: hostname为etcdnode2, IP为192.168.56.101服务器3: hostname为etcdnode3, IP为192.168.56.102服务器2: hostname为hostnode1, IP为192.168.56....

2018-05-07 06:51:41 2885

原创 docker-maven-plugin插件设置Docker的buildArgs

docker-maven-plugin是spotify出品的一款针对spring boot项目的docker插件,可将spring boot项目打包到docker镜像中。如果在编译docker镜像时需要设置build arg,只需要在maven的配置文件pom.xml中,configuration下增加buildArgs。标签的key和值对应build arg的key和值,如下所示,dock...

2018-03-22 21:50:49 3646

原创 dcos下rexray服务的配置

在dcos环境下,rexray服务的默认配置文件为/opt/mesosphere/etc/rexray.conf,而其服务文件则是/etc/systemd/system/dcos-rexray.service。 # vim /etc/systemd/system/dcos-rexray.service[Unit]Description=REX-Ray: A vendor agno...

2018-03-18 22:35:14 660

原创 calicoctl命令简介

背景在calico中,有多种网络资源。以v1.6.1为例,网络资源包含:node,bgpPeer,hostEndpoint,workloadEndpoint,ipPool,policy,profile等。 下面我将讲解如何使用calicoctl命令行工具来控制这些网络资源。 用法create创建一个网络资源。比如说我们要创建一个“profile” 的网络资源,那么...

2018-03-01 05:41:36 11199

原创 使用Rest api管理Ceph网关

背景  开发基于Ceph RadosGW的微服务,需要实现调用方可以通过rest api就能创建用户,获取用户信息等功能。 实现  Ceph的RadosGW自身就有该功能,这些创建用户、获取用户信息、获取使用情况等的功能被称为Admin Operation(管理操作)。我们直接通过RadosGW的URL再加上/admin就可以访问执行管理操作了,比如RadosGW的URL为htt

2018-02-05 05:36:32 2164 1

原创 CentOS7.0安装Ceph(jewel)及以上版本

背景  由于docker的Ceph插件rexray对Ceph版本有一定的要求,当Ceph版本为hammer (0.94.10)时,rexray无法成功创建rbd设备。CentOS 7及以上版本,默认安装的就是hammer版本,因此,我们需要安装更高的jewel版本。Ceph的版本可参见。 安装  为了安装速度,我们可以选用国内源。通常大家使用的国内源包括:   网易 ht

2018-02-01 06:23:25 4622 1

原创 rexray在CentOS上不能创建ceph rbd的docker volume问题定位

背景  我们通过docker的rexray插件来创建ceph rbd设备的docker volume,但总提示创建失败。 # docker volume create --driver=rexray --opt=size=5 --name=cephrbd-bookError response from daemon: create test_cephrbd_volume: Volu

2018-01-24 06:49:10 1381

原创 制作ssh互信的docker镜像

DockerfileFROM ubuntu:16.04# packageRUN apt-get update; apt-get -y install sshCOPY ssh_config /etc/ssh/ssh_config# sshRUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config && sed -i 's

2018-01-12 07:04:09 553

原创 CI脚本异常退出问题定位

背景  在CI脚本中,使用类似如下脚本进行项目编译的计时,但在执行过程中,有时会出现CI脚本(命名为ci.sh)未完全执行的情况: #!/bin/bash -esleep_time=$1start_time=`date "+%s"`# do sth, this sleep would simulate project compilationsleep $sleep_timeend_time

2017-11-06 23:39:42 745

原创 容器中使用iptables报错can't initialize iptables table Permission denied (you must be root)

背景  在docker容器中部署了一微服务,该服务需要docker push镜像到docker registry。因此,docker容器中需要安装docker服务。但在启动容器的时候,却报错: can't initialize iptables table `filter': Permission denied (you must be root)Perhaps iptables or your

2017-10-19 07:00:27 28531 2

原创 nohup介绍

背景  我们通常使用&将前台任务变为后台任务执行,但是如果只是使用&,那么在突然断网或者关闭启动该任务的终端(ps:可使用putty来测试,部分软件如mobaxterm做了优化,关闭终端是友好关闭的)时,内核就会给后台任务发送SIGHUP信号,从而导致后台任务停止。这时,我们就需要使用nohup来启动该后台任务。 简介  nohup,顾名思义,就是使得运行的命令可以忽略HANGUP信号。因此,即使

2017-09-05 06:54:43 8513

原创 docker创建ceph集群

背景  Ceph官方现在提供两类镜像来创建集群,一种是常规的,每一种Ceph组件是单独的一个镜像,如ceph/daemon、ceph/radosgw、ceph/mon、ceph/osd等;另外一种是最新的方式,所有的Ceph组件都集成在一个镜像ceph/daemon中,如果要创建对应的Ceph组件容器,只需要指定类型即可。这里,我们使用第一种方式来创建Ceph集群。   另外,这里所有的容器,都

2017-08-17 07:44:24 3429

原创 maven单元测试设置代理

背景  环境需要设置代理才能够访问外部网络,如果只是运行java程序来访问网络,我们可以通过java -jar test.jar -DproxyHost=proxy_ip -DproxyPort=proxy_port,但如果是java的maven项目中,单元测试需要访问网络,只执行mvn test则会导致单元测试的代码无法访问网络。 解决  Maven单元测试,使用的是Surefire Maven

2017-08-02 07:41:30 820

原创 Kubernetes服务之“运行单实例的有状态服务”

目标  在你的环境中创建一个PV   创建一个MySQl的Deployment   在集群中以DNS名称的方式,将MySQL暴露给其他的pod 开始之前  你需要一个Kubernetes集群,一个可以连接到集群的kubectl命令行工具。如果你没有集群,你可以使用Minikube来创建。   我们会创建一个PV(PersistentVolume)用于数据存储。点击这里来查看PV支持的类型,该

2017-07-11 06:57:11 2384

原创 关闭chrome浏览器的developer tools

背景  Chrome使用过程中,很容易启动Chrome developer tools,一些误触如按到F12、CTRL+Shift+C等都会启动developer tools。对于不开发Web的人来说,并不需要这个功能,但是又却很容器启动该功能。然而,Chrome本身并没有提供关闭该功能的设置。下面介绍下网友总结出的经验。 方法打开Chrome  按下F12,打开devloper tools,并通

2017-07-03 06:51:25 7352 1

原创 Kubernetes服务之StatefulSets简介

StatefulSets在v1.5时还是个beta特性,它取代了v1.4的PetSets特性。PetSets的用户可以参考v1.5的升级指导,将正在运行的PeetSets升级到StatefulSets。   StatefulSet是一个给Pod提供唯一标志的控制器,它可以保证部署和扩展的顺序。 使用StatefulSet  当应用有以下任意要求时,StatefulSet的价值就体现出来了。

2017-06-26 06:25:20 16699

原创 Kubernetes存储之Persistent Volumes简介

注意  以下内容适用于Kubernetes v1.6.0及以下。简介  管理存储和管理计算有着明显的不同。PersistentVolume子系统给用户和管理员提供了一套API,从而抽象出存储是如何提供和消耗的细节。在这里,我们介绍两种新的API资源:PersistentVolume(简称PV)和PersistentVolumeClaim(简称PVC)。   PersistentVolume(持久卷

2017-05-16 06:32:00 11119

原创 Kubernetes v1.6开始支持RBAC

Kubernetes v1.6的一个亮点就是RBAC认证特性成为了beta版本。RBAC,基于角色的访问控制(Role-Based Access Control),是用于管理Kubernetes资源访问权限的认证机制。RBAC支持灵活的认证策略配置,使得集群在不重启的情况下就可以升级权限。   本文重点聚焦在一些有趣的新特性和实践上。 RBAC vs ABAC  当前Kubernetes已经支持

2017-04-20 06:54:29 1490

原创 Docker aufs存储驱动layer、diff、mnt目录的区别

Docker基础信息  首先,先查询Docker使用的后端存储。使用命令docker info,主要关注Storage Driver相关的部分。 $ docker info...Server Version: 1.12.6Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs:

2017-04-18 07:00:06 8215

原创 Kubernetes DNS 简介

环境$ sudo lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 16.04.2 LTSRelease: 16.04Codename: xenial$ kubectl versionClient Version: version.Info{Major:

2017-04-10 07:01:54 11546

原创 Kubernetes volumes简介

容器中的磁盘文件生命周期比较短暂,在一些比较复杂的容器应用中会产生一些问题。一、容器crash后,kubelet会重启该容器,但这些文件会丢失掉。二、pod中的多个容器经常需要共享文件。因此,Kubernetes的Volume应然而生,用于解决这些问题。 背景  在Docker中,也有volumes这个概念,volume只是磁盘上一个简单的目录,或者其他容器中的volume。生命周期也不受管理,并

2017-04-07 06:31:08 19523

原创 Ubuntu上手动安装Kubernetes

背景  两台Ubuntu16.04服务器:ip分别为192.168.56.160和192.168.56.161。。   Kubernetes版本:1.5.5   Docker版本:1.12.6   etcd版本:2.2.1   flannel版本:0.5.6   其中160服务器既做Kubernetes的master节点,又做node节点;161服务器只做node节点。   master

2017-04-05 07:18:13 9297 3

原创 使用Docker容器来源码编译etcd

背景  etcd是CoreOS公司开发的分布式键值对存储库。在Kubernetes中,我们需要使用etcd作为所有REST API对象的持久化存储。   不幸的是,在github的release中,CoreOS将etcd的二进制可执行文件都放在了亚马逊的S3存储上,在国内访问非常慢。因此,我们只能通过源码编译etcd。 过程  1. 下载etcd源码。 $ git clone https://

2017-03-27 07:02:52 1817

原创 Docker版本升级至17.03

2017/3/3,Docker官方发表了一篇博客,Docker版本从1.13.*直接跳入17.03,该版本的意思是17年3月。同时,还声明了Docker以后会以CE(Community Edition)和EE(Enterprise Edition)的形式发布。其中,CE版本每个月发布一次,也就是说,随后的版本就是17.03、17.04、17.05等,而EE的版本是没三个月发布一次,对应的就是17.0

2017-03-23 07:10:31 8907

原创 重启osd服务失败:Start request repeated too quickly

背景  OS:Ubuntu 16.04   修改了osd的一些配置,修改后,需要重启osd服务才能生效。第一次重启后,配置立刻生效。再改了一些配置,重启osd服务后,配置却不再生效了。ps命令查看进程,发现osd进程都没有启动。 分析  osd进程未启动,第一直觉就是配置出错,osd进程启动后又挂掉。于是,进入/var/log/ceph目录,查看ceph-osd.0.log,发现日志末尾只有关闭

2017-03-20 06:38:44 43416 1

原创 ceph -s集群报错too many PGs per OSD

背景集群状态报错,如下:# ceph -s cluster 1d64ac80-21be-430e-98a8-b4d8aeb18560 health HEALTH_WARN <-- 报错的地方 too many PGs per OSD (912 > max 300) monmap e1: 1 mons at {node1=109.105.11

2017-03-17 05:43:46 6291 1

原创 ceph-deploy出错UnableToResolveError Unable to resolve host

背景  ps:在本文中,假设我系统的hostname为node1。   使用ceph-deploy命令搭建Ceph集群,执行ceph new node1时,出现如下错误: [node1][INFO ] Running command: /bin/ip addr show[node1][DEBUG ] IP addresses found: ['192.168.56.16', '172.17.

2017-03-16 06:22:56 1459

etcd-v2.2.1-linux-amd64.tar.gz

etcd-v2.2.1-linux-amd64.tar.gz

2017-03-26

重构改善既有代码的设计

重构改善既有代码的设计,代码重构优化。

2015-07-22

STL源码剖析简体中文完整版(清晰扫描带目录)

STL源码剖析简体中文完整版(清晰扫描带目录)

2015-07-20

Introduction To Algorithms,算法导论英文版

Introduction To Algorithms,算法导论英文版

2015-07-20

空空如也

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

TA关注的人

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