BADWOLFBAY

Run,You Clever Boy!


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

kubernetes上部署fluentd采集日志

发表于 2017-09-25 | 分类于 docker

安装es集群

假设es集群在k8s集群外,不要使用root用户。这里安装的版本是2.4.0

tar -zxvf elasticsearch-2.4.0.tar.gz

修改config文件夹下的elasticsearch.yml

1
2
3
4
5
6
7
8
9
10
cluster.name: elk_cluster
node.name: elk_node01
path.data: /csdbomc/elasticsearch-2.4.0/data
path.logs: /csdbomc/elasticsearch-2.4.0/logs
network.host: 172.21.0.201
network.port: 9201
http.cors.enabled : true //
http.cors.allow-origin: "/.*/"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : "X-Requested-With,X-Auth-Token,Content-Type, Content-Length, Authorization"

到bin目录下执行(需要提前安装java)

./elasticsearch -d

制作fluent镜像

Dockerfile内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM badwolf/fluentd-es-image
# Ensure there are enough file descriptors for running Fluentd.
#RUN ulimit -n 65536
# Disable prompts from apt.
# Copy the Fluentd configuration file.
COPY td-agent.conf /etc/td-agent/td-agent.conf
ENV LD_PRELOAD /opt/td-agent/embedded/lib/libjemalloc.so
# Run the Fluentd service.
ENTRYPOINT ["td-agent"]
阅读全文 »

Docker镜像中国加速

发表于 2017-09-25 | 分类于 docker

通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像。该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker 化应用。

Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问。该镜像库只包含流行的公有镜像。私有镜像仍需要从美国镜像库中拉取。

您可以使用以下命令直接从该镜像加速地址进行拉取:

1
$ docker pull registry.docker-cn.com/myname/myrepo:mytag

例如:

1
$ docker pull registry.docker-cn.com/library/ubuntu:16.04

注: 除非您修改了 Docker 守护进程的 --registry-mirror 参数 (见下文), 否则您将需要完整地指定官方镜像的名称。例如,library/ubuntu、library/redis、library/nginx。

阅读全文 »

调用Harbor RestAPI增加认证

发表于 2017-09-25 | 分类于 harbor

1.通过Rest API访问Harbor需要Token认证信息

curl -u username:password http://172.21.1.19/api/users

但是通过restclient访问时像curl一样添加-u参数,需要在Header中
增加参数

Authorization: Basic base64encoded(user:pass)

如:

1
2
3
Builder builder = restClient.target(url + "/api/users").request();
String auth = Base64.getEncoder().encodeToString("user:password".getBytes());
builder.header("Authorization","Basic " + auth);

在JAVA8中,可以直接使用Base64工具类。

参考链接:

https://stackoverflow.com/questions/29116595/how-to-send-u-data-of-curl-in-rest-client

MAC上安装docker

发表于 2017-09-21 | 分类于 docker

在MAC上安装docker for mac后,docker程序会在用户登录mac后自动启动,而如果用户没有登录,而是通过ssh远程登录的情况下,docker是无法启动的,在配置launchctl也无法配置自动启动命令。

经过一番搜索后,可以使用dlite来通过命令启动docker。

1.项目地址:

https://github.com/nlf/dlite

2.在release中下载编译好的二进制文件,将文件放到PATH下,最简单的放到/usr/local/bin/目录下,然后执行

sudo dlite init

注意需要给dlite可执行权限

chmod +x dlite

3.执行命令后,开始询问创建虚拟机的参数,一路回车,但是最后报错

1
2
3
4
Saving configuration: done
Creating ssh key pair: done
Adding host to ssh config: ERROR!
Adding host to ssh config: | open /var/root/.ssh/config: no such file or directory

手动创建.ssh目录以及config文件

sudo mkdir /var/root/.ssh

sudo touch /var/root/.ssh/config

然后重新执行sudo dlite init

阅读全文 »

Go 指南学习笔记九

发表于 2017-09-15 | 分类于 golang

1.接口,接口为一组方法定义的集合

和其它语言不同,类型实现接口不需要显示声明,不需要implements关键字

定义接口和实现接口互不依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
type Abser interface {
Abs() float64
}
type MyFloat float64
func (f MyFloat) Abs() float64 {
if f < 0 {
return float64(-f)
}
return float64(f)
}
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
var a Abser
f := MyFloat(-math.Sqrt2)
v := Vertex{3, 4}
a = f // a MyFloat 实现了 Abser
a = &v // a *Vertex 实现了 Abser
// 下面一行,v 是一个 Vertex(而不是 *Vertex)
// 所以没有实现 Abser。
a = v
fmt.Println(a.Abs())
}

Go 指南学习笔记八

发表于 2017-09-11 | 分类于 golang

1.结构体方法

Go语言不像JAVA,没有类的定义,但是依然可以为结构体定义方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X * v.X + v.Y * v.Y)
}
func main(){
v := &Vertex{3,4}
fmt.Println(v.Abs()) // 5
}

2.还可以对包内任意类型定义任意方法,但是不能对包外的类型或者基础类型定义方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main
import (
"fmt"
"math"
)
type MyFloat float64
func (f MyFloat) Abs() float64 {
if f < 0 {
return float64(-f)
}
return float64(f)
}
func main(){
f := MyFloat(-math.Sqrt2)
fmt.Println(f.Abs()) // 1.4142135623730951
}

3.方法可以与类型和类型的指针相关联

如1中的Abs方法是作用的*Vertex指针类型上

1
2
3
4
func (v *Vertex) Scale(f float64){
v.X = v.X * f
v.Y = v.Y * f
}

与

1
2
3
4
func (v Vertex) Scale(f float64){
v.X = v.X * f
v.Y = v.Y * f
}

的区别

v := *Vertex(3,5)
v.Scale(5)

前边的是用*Vertex指针类型接受,是引用传递,所以会改变接受者v的原始值,而后边的是用变量(后者说是对象)接受,是值传递,会对v进行一份copy,而不会对原始值做更改。

Go 指南学习笔记七

发表于 2017-09-07 | 分类于 golang

闭包

  • 函数也是一个值,也可以像其它值一样传递。函数值也可以作为参数或者返回值
  • 闭包是一个函数值,他引用了函数体之外的变量
  • 这个函数值可以对引用的变量进行修改或者赋值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main
import (
"fmt"
)
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
pos, neg := adder(), adder()
for i := 0; i < 10; i++ {
fmt.Println(pos(i), neg(-2*i))
}
}

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Running] go run "/Users/badwolf/Documents/go/hello/tempCodeRunnerFile.go"
0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90
[Done] exited with code=0 in 0.605 seconds

zookeeper安装

发表于 2017-09-06 | 分类于 Java

1.下载安装文件,下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/

这里的下载的版本为zookeeper-3.4.10.tar.gz

2.解压下载的安装文件

tar -zxvf zookeeper-3.4.10.tar.gz

3.修改配置文件

zookeeper-3.4.10/conf
mv zoo_sample.cfg zoo.cfg

zoo.cfg可以根据需要修改配置信息,如clientPort=2181

4.启动zookeeper

cd ../bin
./zkServer.sh start

启动成功信息:

ZooKeeper JMX enabled by default

Using config: /root/zookeeper-3.4.10/bin/../conf/zoo.cfg

Starting zookeeper … STARTED

查看端口占用信息:

netstat -an|grep 2181

5.客户端连接测试

./zkCli.sh -server 127.0.0.1

连接成功后执行help命令可以查看帮助命令

[zk: 127.0.0.1(CONNECTED) 0] help

ZooKeeper -server host:port cmd args

stat path [watch]

set path data [version]

ls path [watch]

delquota [-n|-b] path

ls2 path [watch]

setAcl path acl

setquota -n|-b val path

history 

redo cmdno

printwatches on|off

delete path [version]

sync path

listquota path

rmr path

get path [watch]

create [-s] [-e] path data acl

addauth scheme auth

quit 

getAcl path

close 

connect host:port

Go 指南学习笔记六

发表于 2017-09-05 | 分类于 golang

1.map

map在使用之前必须使用make来创建,值为nil的map是空的,并且不能对它赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
import (
"fmt"
)
type Vertex struct{
Lat, Long float64
}
var m map[string]Vertex
func main() {
m = make(map[string]Vertex)
m["Bell Labs"] = Vertex{40.68433, -74.39967}
fmt.Println(m["Bell Labs"])// {40.68433 -74.39967}
}

2.和结构体语法类似

1
2
3
4
5
var n = map[string]Vertex {
"Bell Labs": Vertex{40.68433, -74.39967,},
"Google":Vertex{37.42202, -122.08408,},
}
fmt.Println(n) //map[Bell Labs:{40.68433 -74.39967} Google:{37.42202 -122.08408}]

如果map的value值只是一个类型,可以在{}中将类型省略

1
2
3
4
var k = map[string]Vertex{
"Bell Labs": {40.68433, -74.39967},
"Google": {37.42202, -122.08408},
}

3.修改map

  • 插入或者修改元素: m[key] = elem
  • 获得元素: elem = m[key]
  • 删除元素: delete(m,key)
  • 检测是否存在: elem, ok = m[key]

Go 指南学习笔记五

发表于 2017-09-03 | 分类于 golang

1.数组:类型[n]T是有n个值的类型为T的数组

var a [10] int

变量a是一个有10个整数的数组。

数组不能改变大小

1
2
3
4
5
6
7
8
9
10
package main
import "fmt"
func main() {
var a [10]string
a[0] = "hello"
a[1] = "world"
fmt.Println(a[0], a[1]) //hello world
fmt.Println(a) // [hello world
}

2.slice(切片),[]T为一个类型为T的slice,len(s)返回切片s的长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
s := []int{2, 3, 5, 7, 11, 13}
fmt.Println("s == ", s)
for i := 0; i < len(s); i++ {
fmt.Printf("s[%d] = %d\n", i, s[i])
}
//输出结果
s == [2 3 5 7 11 13]
s[0] = 2
s[1] = 3
s[2] = 5
s[3] = 7
s[4] = 11
s[5] = 13

3.slice 可以包含任意的类型,包括另一个 slice。

1
2
3
4
5
6
game := [][] string{
[]string{"","",""},
[]string{"","",""},
[]string{"","",""},
}

4.对slice切片

s[lo:hi] // 包含lo元素,不包含hi元素

5.构造slice,slice由make创建,这会分配一个全是零值的数组并返回一个slice并指向这个数组

1
a := make([]int, 5)

可以传递第三个参数来执行容量

1
b := make([]int, 0 , 5) // len(b) = 0, cap(b) = 5

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func printlnSlice(s string, x []int) {
fmt.Printf("%s len=%d, cap=%d %v\n", s, len(x), cap(x), x)
}
func main() {
a := make([]int, 5)
printlnSlice("a", a) // a len=5, cap=5 [0 0 0 0 0]
b := make([]int, 0, 5)
printlnSlice("b", b) // b len=0, cap=5 []
c := b[:2]
printlnSlice("c", c) // c len=2, cap=5 [0 0]
d := c[2:5]
printlnSlice("d", d) //d len=3, cap=3 [0 0 0]
}

6.向slice结尾添加元素,append

1
2
3
4
var a []int
append(a, 0)
append(a, 1)
append(a, 2, 3, 4)

如果slice底层数组的不能分配更多的数组时,会自动分配一个更大的数组,返回的slice指向新的数组。

7.切片是数组之上的抽象数据类型。

初始化不同,切片不需要指定固定长度:var a [10]int//数组var a []int//切片

切片的零值是nil

更多的slice切片:用法与本质

12345
badwolf

badwolf

Run,You Clever Boy!

43 日志
12 分类
16 标签
RSS
Links
  • badwolfbay
  • Gluon-deepmind
  • 浮生志
© 2020 badwolf
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.2