Saltstack 部署安装

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
36
37
38
39
40
环境:关闭firewalld,iptables,selinux,设置dns或者hosts解析
python 版本: 2.7 <= python < 3
master和slave设置hosts解析:
192.168.1.117 saltstack-master
192.168.1.118 saltstack-slave

####安装saltstack

服务端安装:
yum -y install epel-release
yum -y install salt-master salt-minion

服务端配置修改:
# vim /etc/salt/minion //在第16行添加,冒号后有一个空格
master: saltstack-master

客户端安装:
yum -y install epel-release
yum -y install salt-minion

客户端配置修改:
# vim /etc/salt/minion //在第16行添加,冒号后有一个空格
master: saltstack-master

客户端和服务端启动服务:
service salt-master start #只有服务端安装了该服务
service salt-minion start #服务端和客户端都安装此服务

配置认证:
服务端操作:
salt-key -a saltstack-master
salt-key -a saltstack-slave
salt-key

说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已经签名的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件

测试验证:
示例1: salt '*' test.ping //检测通讯是否正常,也可以指定其中一个 'saltstack-master'

示例2: salt '*' cmd.run 'df -h' //远程执行命令

Saltstack 错误总结

1
2
3
4
5
6
1、错误信息 Minion did not return. [Not connected]
删除客户端公钥:rm -rf /etc/salt/pki/minion/minion_master.pub
service salt-minion restart #重启client服务

2、错误信息:Failed building wheel for uwsgi
yum -y install python-devel(python2.7)

Pdsh

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
##pdsh安装##
yum -y install gcc gcc-c++ perl-devel readline-devel bzip2 #安装依赖

下载源码包:https://sourceforge.net/projects/pdsh/files/latest/download

tar -xjvf pdsh-2.26.tar.bz2

cd pdsh-2.26

./configure --prefix=/usr/local/globle/softs/tools/pdsh/2.26/ --with-timeout=60 --with-ssh --with-exec --with-nodeupdown --with-readline --with-machines=/etc/pdsh/machines --with-dshgroups

make && make install

参数详解:
选项 解释
--prefix 指定安装目录
--with-timeout=60 指定pdsh默认执行超时时间
--with-ssh 编译ssh模块
--with-exec 编译exec模块
--with-nodeupdown 编译节点宕机功能
--with-readline 编译readline功能
--with-rcmd-rank-list 指定默认模式为ssh
--with-machines 指定默认主机列表
--with-dshgroups 调用组-g选项(默认文件位置:/root/.dsh/group/userhosts or /etc/dsh/group/userhosts)

把pdsh安装机器公钥存放到个远端服务器/root/.ssh/authorized_keys

ln -s /usr/local/pdsh/bin/pdsh /usr/sbin/pdsh #设置软连接
阅读全文 »

kubernetes 工作原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、Master节点包括API Server、Scheduler、Controller manager、etcd

API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”
Scheduler负责对集群内部的资源进行调度,相当于“调度室”
Controller manager负责管理控制器,相当于“大总管

2、Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选)、pod

Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口

Docker 创建容器的
Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等
Kube-proxy,主要负责为Pod对象提供代理
Fluentd,主要负责日志收集、存储与查询

kubernetes kubeadm 部署

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
[镜像地址](https://download.csdn.net/download/qq_33432713/10775173) :https://download.csdn.net/download/qq_33432713/10775173

系统环境:CentOS Linux release 7.3.1611 (Core)

1、关闭selinux,关闭firewalld,关闭swap
systemctl stop firewalld `&&` systemctl disable firewalld

swapoff -a

2、配置主机映射和修改主机名

hostnamectl set-hostname k8s-master

3、yum -y install docker `&&` systemctl start docker `&&` systemctl enable docker

4、 yum -y install kubectl kubelet kubernetes-cni kubeadm (这几个软件需要去google的yum源下载,建议下本地vpnFQ,把软件包下载下来)

5、systemctl start kubelet `&&` systemctl enable kubelet

6、master端导入需要镜像(详细见软件包)

7、kubeadm进行初始化:

kubeadm init --kubernetes-version=v1.9.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=10.2.0.35,127.0.0.1,k8s-master

--apiserver-cert-extra-sans #该参数指定自己内网地址和映射

在执行过程中,要等几分钟,然后执行以下命令:

然后执行如下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
成功以后可以指定一下命令进行查看:

kubectl get cs

kubectl get nodes

8、注意:

记住该条命令:kubeadm join --token d506ef.63c05fa829529565 10.2.0.37:6443 --discovery-token-ca-cert-hash sha256:4cd1954bf2a1c0904f92328d33bc25471604abd918e019b3c1905289fb8130f2 #在node节点执行该条命令,--token是有有效期的,默认是24小时

9、部署 flannel

mkdir -p ~/k8s/
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml #执行会输出一下内容:

10、kubectl get pod -n kube-system #注意红框内出现Running状态然后在node节点

在node节点部署

1、同master节点前五步一样部署

2、导入镜像:其实我导入多了,只需要导入一下几个就可以了:gcr.io/google_containers/kube-apiserver-amd64、gcr.io/google_containers/etcd-amd64、quay.io/coreos/flannel、gcr.io/google_containers/etcd-amd64

3、执行master的第8步,就可以了,然后在master上执行:kubectl get nodes,看到如下图:

注意:要想在node节点执行该条命令,需要再node上执行以下命令:

sudo cp /etc/kubernetes/admin.conf $HOME/

sudo chown $(id -u):$(id -g) $HOME/admin.conf

export KUBECONFIG=$HOME/admin.conf
不然会出现以下错误:The connection to the server localhost:8080 was refused - did you specify the right host or port?(单独开终端也会出现)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
最后是版本对应:
master:
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/google_containers/kube-apiserver-amd64 v1.9.1 e313a3e9d78d 7 days ago 210.4 MB
gcr.io/google_containers/kube-scheduler-amd64 v1.9.1 677911f7ae8f 7 days ago 62.7 MB
gcr.io/google_containers/kube-proxy-amd64 v1.9.1 e470f20528f9 7 days ago 109.1 MB
gcr.io/google_containers/kube-controller-manager-amd64 v1.9.1 4978f9a64966 7 days ago 137.8 MB
quay.io/coreos/flannel v0.9.1-amd64 2b736d06ca4c 8 weeks ago 51.31 MB
gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.7 db76ee297b85 11 weeks ago 42.03 MB
gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.7 5d049a8c4eec 11 weeks ago 50.27 MB
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.7 5feec37454f4 11 weeks ago 40.95 MB
gcr.io/google_containers/etcd-amd64 3.1.10 1406502a6459 4 months ago 192.7 MB
gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 20 months ago 746.9 kB

node节点对应:

REPOSITORY TAG IMAGE ID CREATED SIZE

gcr.io/google_containers/kube-apiserver-amd64 v1.9.1 e313a3e9d78d 7 days ago 210.4 MB

quay.io/coreos/flannel v0.9.1-amd64 2b736d06ca4c 8 weeks ago 51.31 MB

gcr.io/google_containers/etcd-amd64 3.1.10 1406502a6459 4 months ago 192.7 MB

gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 20 months ago 746.9 kB

#以下是另一种网络版本对应:

REPOSITORY TAG IMAGE ID CREATED SIZE

quay.io/calico/node v2.6.2 6763a667e3ba 12 weeks ago 281.6 MB

quay.io/calico/cni v1.11.0 c3482541970f 3 months ago 70.88 MB

错误信息总结:

1、错误:Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

解决方案:设置环境变量:

sudo cp /etc/kubernetes/admin.conf $HOME/

sudo chown $(id -u):$(id -g) $HOME/admin.conf
export $KUBECONFIG=$HOME/.kube/admin.conf

2、错误:[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

解决方案:cat /etc/sysctl.conf    
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

3、获取登录token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
阅读全文 »

docker

docker常识积累
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
docker CE社区版官方免费支持(7个月)
docker EE企业版官方免费支持(24个月)

国内支持仓库云服务商: 时速云镜像仓库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像

###centos 安装docker-ce

$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装依赖包:
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

添加yum源:
sudo yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

官网源:
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo

如果需要测试版本的 Docker CE 请使用以下命令:
$ sudo yum-config-manager --enable docker-ce-test

如果需要每日构建版本的 Docker CE 请使用以下命令:
$ sudo yum-config-manager --enable docker-ce-nightly

更新 yum 软件源缓存,并安装 docker-ce
$ sudo yum makecache fast
$ sudo yum install docker-ce

使用脚本自动安装
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

启动 Docker CE
$ sudo systemctl enable docker
$ sudo systemctl start docker

添加内核参数
如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
请添加内核配置参数以启用这些功能。

$ sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后重新加载 sysctl.conf 即可
$ sudo sysctl -p

查看镜像大小

docker system df #查看镜像、容器、数据卷所占用的空间

docker images 等于 docker image ls #查看镜像实际占用磁盘空间

docker image ls -f dangling=true #显示虚悬镜像(虚悬镜像:是指没有仓库名和标签的镜像)

docker image prune #删除虚悬镜像

# docker image ls -f before=crond_new:1.0.1 #查看crond_new:1.0.1之前建立镜像

# docker image ls -f since=crond_dev:1.0.0 #查看crond_dev:1.0.0之后建立镜像

# docker image ls -q #只列出镜像ID

# docker image ls --format "{{.ID}}: {{.Repository}}" #只列出镜像ID和仓库名

# docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" #指定间隔符号

# docker image ls --digests #获取精确镜像摘要

# docker rm node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228 #根据镜像摘要进行删除

# docker image rm $(docker image ls -q redis) #删除redis实列
docker volume
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
docker volume ls

docker volume inspect my-vol

docker run -d -P --name web --mount source=my-vol,target=/webapp training/webapp python app.py #挂载实列

docker inspect web #查看逻辑卷信息

docker volume rm my-vol #删除逻辑卷

docker volume prune #删除无主逻辑卷

docker run -itd --name test_local --restart=always --mount type=bind,source=/opt/app,target=/kuaibao/www alpine /bin/sh #挂载本地目录至容器中,和-v选项区别是:本地目录不存在时会报错,而-v则会自己创建

docker run -itd --name test --restart=always --mount source=my-vol,target=/kuaibao/www alpine /bin/sh #挂载本地创建的volume挂载至容器中

Docker 挂载主机目录的默认权限是 读写,用户也可以通过增加 readonly 指定为 只读。

docker run -itd --name test_read --restart=always --mount type=bind,source=/opt/app,target=/kuaibao/www,readonly alpine /bin/sh #只读模式,如下测试
[root@k8s-slave ~]# docker exec -it test_read touch /kuaibao/www/1.txt
touch: /kuaibao/www/1.txt: Read-only file system

docker run -itd --name test_file --restart=always --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history alpine /bin/sh #挂载文件至容器中
docker 选项
1
2
3
4
5
6
7
8
9
10
EXPOSE  记录服务可用端口,但是并不创建喝宿主机之间的映射
--export 运行时暴露端口,但是并不创建喝宿主机之间的映射
-p 创建端口映射规则,比如 -p ip:hostPort:containerPort| ip::containerPort | hostPort:containerPort | containerPort
必须指定containerPort,如果没有指定hostPort,Docker 会自动分配端口

-P 将Dockerfile里暴露的所有容器端口映射到动态分配的宿主机端口上

--link 在消费和服务容器之间创建链接,比如 --link name:alias
这会创建一系列环境变量,并在消费者容器的/etc/hosts文件里添加入口项
必须暴露或发布端口
docker log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

案列:
#查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

#查看最近30分钟的日志
docker logs --since 30m CONTAINER_ID

#查看某时间之后的日志:
docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

#查看某时间段日志
docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
docker-compose
阅读全文 »