离线使用kubeadm安装安全高可用kubernetes集群
文章目录
使用kubeadm安装安全高可用kubernetes集群
安装包地址 如非高可用安装请忽略此教程,直接看产品页的三步安装。
单个master流程:
- 解压后在master 上 cd shell && sh init.sh ,然后sh master.sh(注意因为脚本用的相对路径所以不再当前目录会找不到文件)
- 在node上 cd shell && sh init.sh 。然后在node上执行master输出的join命令即可
高可用如下
提前准备
假设构建一个3master+2node的k8s集群,需要5台节点共同的条件如下:
- (
yum install -y docker是1.12.6版本需要改cg
) 17.06安装教程: ```bash #0.删除老旧的 $ yum remove -y docker* #如果默认之前yum安装的1.12版本,可以这样删没装可以跳过此步 #1.安装需要的包 $ yum install -y yum-utils
device-mapper-persistent-data
lvm2
#2.添加源,不然默认的找不到
$ yum-config-manager
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo
#3.根据实际查找当前版本 (可选) $ yum list docker-ce –showduplicates | sort -r #4.如果确定了版本,直接安装,如果要装17。03直接修改下面数字即可 $ yum install docker-ce-17.06.1.ce # 主意版本填写包名的格式. #5.开启docker服务,和开机启动 $ systemctl start docker && systemctl enable 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 |
2. 建议二进制方法提前部署好docker-compose,步骤参考后文 3. 建议永久关闭selinux和swap以免后续问题 4. 建议停止并关闭firewalld/iptables等防火墙 5. 新的节点启动后记得改网络名 `hostnamectl set-hostname masterX` 6. 节点之间要能互通内网环境稳定 7. 安装中出了问题要看日志journalctl -n 10 ,运行中的日志查看`tail -f 10 /var/log/messages` ## 系统架构图 ```bash kubectl dashboard | V +------------------------+ join | LB 10.1.245.94 | <--- Nodes +------------------------+ | |--master1 manager1 schedule1 10.1.245.93 |--master2 manager2 schedule2 10.1.245.95 =============> etcd cluster http://10.1.245.93:2379,http://10.1.245.94:2379,http://10.1.245.95:2379 |--master3 manager3 schedule3 10.1.245.94 |
安装包介绍
解压完之后看到如下目录:
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 |
├── bin 所需要的k8s相关的bin文件 │ ├── kubeadm │ ├── kubectl │ └── kubelet ├── image 依赖的所有镜像包 │ └── images.tar ├── out 所有的配置文件 │ ├── dashboard dashboard相关配置 │ │ ├── dashboard-admin.yaml │ │ └── kubernetes-dashboard.yaml │ ├── etcd etcd相关配置 │ │ ├── etcd-docker-compose-0.yml │ │ ├── etcd-docker-compose-1.yml │ │ └── etcd-docker-compose-2.yml │ ├── haproxy haproxy相关配置 │ │ └── haproxy.cfg │ ├── heapster heapster相关yaml配置 │ │ ├── influxdb │ │ │ ├── grafana.yaml │ │ │ ├── heapster.yaml │ │ │ └── influxdb.yaml │ │ └── rbac │ │ └── heapster-rbac.yaml │ ├── kube k8s自身配置 │ │ ├── 10-kubeadm.conf │ │ ├── config kubeadm配置 │ │ └── kubelet.service │ ├── kubeinit.json 忽略 │ └── net 网络相关配置 │ ├── calico.yaml │ └── calicoctl.yaml └── shell 初始化脚本 ├── init.sh 初始化节点,安装bin文件,systemd配置等 └── master.sh 执行kubeadm init和其它组件 |
初始化节点
因为解压后包,然后scp -r xxx root@ip:/root
的方式分发解压后的包到其他节点
集群中所有节点都需要执行cd shell && sh init.sh
(如果只跑单个master那么还需要执行 sh master.sh
,多master勿跑 )
有以下需要注意的事项:
1. 修改init.sh脚本在后面添加,如果二进制程序没可执行权限chmod +x /usr/bin/kube*
2. cgroups驱动需要选择docker17.0x版本,就不需要去调整了,如果是1.1x版本的docker需要手动修改kubelet的启动文件里面的cgroups配置为systemd
(修改位置/etc/systemd/system/kubelet.service.d
) 与 docker info|grep Cg一致 3. 提前修改默认的init 或者手动执行sysctl -w net.ipv4.ip_forward=1
不然第七行报错
执行完成后通过命令查看kubectl get pod -n kube-system
,状态全为Running正常
起动etcd集群
etcd集群安装使用docker-compose方式部署
A.使用docker-compose启动,如果没装:
|
|
B.使用二进制包启动docker-compose(离线可选)
|
|
在out/etcd目录下有相关模板etcd-docker-compose-x.yam
,启动多个节点时修改成自己的ip地址 其它两个节点照抄,修改ip即可, image那行 应改为 gcr.io/google_containers/etcd-amd64:3.1.11
,实际就是版本号改一下即可。
|
|
三个节点分别启动:
|
|
检查是不是安装成功:
|
|
kubeadm配置
修改配置 out/kube/config
文件
|
|
然后执行:
|
|
把成功后的kubeadm join命令存在文件里,那东西不能丢了
启动calico等
mkdir ~/.kube && cp /etc/kubernetes/admin.conf ~/.kube/config
(如果已经存在请校验一下是否相同,不确定建议删掉重新cp过去)
修改calico配置,把etcd地址换成你安装好的集群地址: out/net/calico.yaml:
1 2 3 4 5 6 7 8 9 |
kind: ConfigMap apiVersion: v1 metadata: name: calico-config namespace: kube-system data: # The location of your etcd cluster. This uses the Service clusterIP # defined below. etcd_endpoints: "http://10.96.232.136:6666" # 这里改成etcd集群地址如 "http://172.31.244.232:2379,http://172.31.244.233:2379,http://172.31.244.234:2379" |
|
|
启动多个master
第一个master我们称之为master0 (假设其他master已经init.sh过),现在把第一个master的/etc/kubernetes/pki目录拷贝到别的master节点上
|
|
删除pki目录下的apiserver.crt 和 apiserver.key文件rm -rf apiserver.crt apiserver.key
,注意如果不删除会只能看到一个master,是不正常的。
同样使用master0上的out/kube/config文件,复制内容,拷贝到master1上,scp out/kube/config root@10.230.204.151:/root/
执行kubeadm init --config ~/config
master2节点同master1
启动loadbalance
我比较推荐使用四层代理 HAproxy配置out/haproxy目录:
vi out/haproxy/haproxy.cfg
|
|
先mkdir /etc/haproxy
然后把这个文件拷贝在cp out/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg
|
|
修改kubeproxy配置
|
|
找到master地址,修改成LB地址,6444端口 (这里关键在于怎么知道LB的地址到底是哪一个呀?上面配置之后三个masterIP 轮询并不知道哪个是LB地址)
|
|
join node节点
还是在node节点执行第一个master输出的命令
|
|
修改node节点kubelet配置
vi /etc/kubernetes/kubelet.conf
同样把地址修改成LB地址,如:10.1.245.94:6444
,修改如下第五行(展示的例子已经修改过)
|
|
kubectl配置
修改~/.kube/config
文件,server的ip改成LB的ip 10.1.245.94:6444
或者通过命令修改:
|
|
启动多DNS副本
|
|
replicas: 3
|
|
这样,启动了三个dns
验证与测试
|
|
杀非LB的master,多次测试看创建pod与dns是否正常,还可以telnet 10.96.0.1 443 去验证clusterip是否正常
公众号:
微信群:
文章作者 fanux
上次更新 2014-07-11