本文是基于Ansible批量部署kubernetes集群环境

支持部署k8s环境:

  • ETCD集群
  • kube-master
  • kube-node
  • kube-dashboard
  • vmware-harbor仓库

工具包测试环境信息

环境 ip
ETCD1 192.168.1.201
ETCD2 192.168.1.202
ETCD3 192.168.1.203
KUBE-MASTER 192.168.1.201
KUBE-NODE1 192.168.1.204
KUBE-NODE2 192.168.1.205
KUBE-DASHBOARD 192.168.1.204
VMWARE-HARBOR 192.168.1.205

工具版本信息

工具 版本 备注
centos 7.4 7版本的系统对docker性能支持更好
Ansible 2.5.2 因有些语法较新,需要ansible大于2.4
kubernetes 1.9.2 当前官方最新版为1.10
docker latest -
etcd v3.2.15 -
flannel v0.10.0 -
heapster 1.5.3 -
grafana v4.4.3 -
influxdb v1.3.3 -
kube-dashboard v1.8.3 -
vmware-harbor v1.5.0 支持k8s集群部署和单机部署,支持ip和域名部署访问

Ansible工具包内容

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
[root@localhost ~]# tree k8s
k8s
├── 01-kube-etcd-all.yml
├── 02-kube-master.yml
├── 03-kube-node.yml
├── 04-clean-kube-node.yml
├── 05-clean-kube-master-all.yml
├── 06-kube-dashboard.yml
├── 07-clean-kube-dashboard.yml
├── 08-vmware-harbor.yml
├── 09-clean-vmware-harbor.yml
├── epel-release-latest-7.noarch.rpm
├── hosts
├── pics
│   ├── harbor.png
│   └── kube-dashboard.png
├── python-babel-0.9.6-8.el7.noarch.rpm
├── README.md
└── roles
├── ca
│   ├── files
│   │   ├── cfssl
│   │   ├── cfssl-certinfo
│   │   └── cfssljson
│   ├── tasks
│   │   └── main.yml
│   └── templates
│   ├── ca-config.json
│   └── ca-csr.json
├── clean-dashboard
│   └── tasks
│   └── main.yml
├── clean-etcd
│   └── tasks
│   └── main.yml
├── clean-master
│   └── tasks
│   └── main.yml
├── clean-node
│   └── tasks
│   └── main.yml
├── clean-vmware-harbor
│   └── tasks
│   └── main.yml
├── common
│   ├── files
│   │   └── epel-release-latest-7.noarch.rpm
│   ├── tasks
│   │   └── main.yml
│   └── templates
│   ├── 20-nproc.conf
│   └── limits.conf
├── docker
│   ├── files
│   │   ├── daemon.json
│   │   ├── docker-ce.repo
│   │   └── docker.service
│   └── tasks
│   └── main.yml
├── etcd
│   ├── files
│   │   └── etcd-v3.2.15-linux-amd64.tar.gz
│   ├── tasks
│   │   └── main.yml
│   └── templates
│   ├── etcd-csr.json.j2
│   └── etcd.service.j2
├── flannel
│   ├── files
│   │   └── flannel-v0.10.0-linux-amd64.tar.gz
│   ├── tasks
│   │   └── main.yml
│   └── templates
│   ├── flanneld-csr.json
│   └── flanneld.service.j2
├── kube-client
│   ├── files
│   │   └── kubernetes-client-linux-amd64-v1.9.2.tar.gz
│   ├── tasks
│   │   └── main.yml
│   └── templates
│   └── admin-csr.json
├── kube-dashboard
│   ├── files
│   │   ├── heapster-1.5.3.tar.gz
│   │   ├── heapster-amd64_v1.5.3.tar.gz
│   │   ├── heapster-grafana-amd64_v4.4.3.tar.gz
│   │   ├── heapster-influxdb-amd64_v1.3.3.tar.gz
│   │   ├── kubernetes-dashboard-amd64_v1.8.3.tar.gz
│   │   └── pod-infrastructure_v3.6.173.0.49.tar.gz
│   ├── tasks
│   │   └── main.yml
│   └── templates
│   └── kubernetes-dashboard.yaml
├── kube-master
│   ├── files
│   │   └── kubernetes-server-linux-amd64-v1.9.2.tar.gz
│   ├── tasks
│   │   └── main.yml
│   └── templates
│   ├── basic-auth.csv.j2
│   ├── kube-apiserver.service.j2
│   ├── kube-controller-manager.service.j2
│   ├── kubernetes-csr.json.j2
│   ├── kube-scheduler.service.j2
│   └── token.csv.j2
├── kube-node
│   ├── files
│   │   ├── etcd
│   │   ├── etcdctl
│   │   ├── kubelet
│   │   ├── kube-proxy
│   │   └── README.txt
│   ├── tasks
│   │   └── main.yml
│   └── templates
│   ├── kubelet.service.j2
│   ├── kube-proxy-csr.json
│   └── kube-proxy.service.j2
├── prepare
│   ├── files
│   │   ├── cfssl
│   │   ├── cfssl-certinfo
│   │   ├── cfssljson
│   │   ├── etcd
│   │   └── etcdctl
│   └── tasks
│   └── main.yml
└── vmware-harbor
├── files
│   ├── csr
│   ├── docker-ce.repo
│   ├── docker-compose
│   ├── docker.service
│   └── harbor-offline-installer-v1.5.0.tgz
├── tasks
│   └── main.yml
└── templates
├── daemon.json.j2
├── docker-compose.yml
└── harbor.cfg.j2
55 directories, 84 files
[root@localhost ~]#

工具包大小:

1
2
3
[root@localhost ~]# du -sh k8s/
2.1G k8s/
[root@localhost ~]#

工具包README

本ansible脚本测试执行环境为:centos 7.4,kubernetes v1.9.2
Author:Jack_wang
Blog:http://www.yfshare.vip

准备工作
  1. ansible当前服务器自己root互信
  2. ansible服务器和其他所有各个节点root互信
    命令: ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip

注:ansible需要使用2.4以上的版本,因有些语法2.4以下不支持.
当前ansible版本为2.5.2。

安装步骤
1
2
yum -y install https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum -y install ansible

注:这里安装ansible-2.5.2时,yum源里会缺少python-babel-0.9.6-8.el7.noarch.rpm包,可以在https://pkgs.org/download/python-babel 这里下载.在当前目录也提供了该依赖包.
按要求修改hosts文件相关参数
操作步骤:

  1. ansible-playbook -i hosts 01-kube-etcd-all.yml #部署etcd
  2. ansible-playbook -i hosts 02-kube-master.yml #部署kube-master
  3. ansible-playbook -i hosts 03-kube-node.yml #部署kube-node

部署成功后,可执行以下命令,查看是否安装成功.

1
2
3
kubectl get componentstatuses
kubectl get csr
kubectl get nodes

也可以安装POD测试
下面提供一个测试yml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80

保存文件为nginx-deployment.yaml

执行安装POD命令,等待安装完成.

1
kubectl apply -f nginx-deployment.yaml

卸载Kubernetes集群步骤

按要求修改hosts文件相关参数.

  • 卸载 kube-node 操作步骤:
    只删除指定的kube-node节点.

    1
    ansible-playbook -i hosts 04-clean-kube-node.yml
  • 卸载整个Kubernetes集群集群步骤:
    删除整个K8s集群,包括kube-node,kube-master,etcd。

    1
    ansible-playbook -i hosts 05-clean-kube-master-all.yml
部署kube-dashboard

按要求修改hosts文件相关参数.

1
ansible-playbook -i hosts 06-kube-dashboard.yml

安装完成后,访问https://ip:8443 打开kube-dashboard WEB页面。访问 http://ip:3000 打开Grafana WEB页面。
配置Grafana略.

卸载kube-dashboard

按要求修改hosts文件相关参数.

1
ansible-playbook -i hosts 07-clean-kube-dashboard.yml

部署vmware-harbor docker仓库

按要求修改hosts文件相关参数.

1
ansible-playbook -i hosts 08-vmware-harbor.yml

卸载vmware-harbor docker仓库

按要求修改hosts文件相关参数.

1
ansible-playbook -i hosts 09-clean-vmware-harbor.yml

部署结果

1
2
3
4
5
6
7
8
[root@localhost ~]# kubectl get componentstatuses
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
etcd-1 Healthy {"health": "true"}
etcd-2 Healthy {"health": "true"}
[root@localhost ~]#
1
2
3
4
5
[root@localhost ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.1.204 Ready <none> 3h v1.9.2
192.168.1.205 Ready <none> 2m v1.9.2
[root@localhost ~]#

kube-dashboard
vmware-harbor

如想获取该Ansible工具包,请扫描下方微信支付宝付款二维码支持下作者(100元以上请备注获取Ansible部署TLS K8S工具包并留下联系方式),谢谢

遇到此工具包相关问题,可联系作者QQ:838554604


本作品采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自Jack Wang Blog,并保持转载后文章内容的完整。本人保留所有版权相关权利。
打赏
本文出自”Jack Wang Blog”:http://www.yfshare.vip/2018/05/21/Ansible部署TLS-K8S/