项目致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件, 详细查看文档
部署结构
注意事项:
- 所有集群中都需要安装python(看版本而定,目前是Python27)
- 管理节点需要安装ansible
- 管理节点需要对所有的master节点,node节点,etcd集群互通
- 对配置上镜像地址尽可能都测试下是否可以正常拉取
- 已安装harbor集群的话,目前不支持自助在所有集群上自助配置harbor证书,需要(1、在docker的配置文件上加上信任host列表;2、修改原role脚本支持harbor证书的颁发)
- 默认flannel上directing为false, 建议改为true
00-集群规划和基础参数设定
认真查看各组件版本支持, 不要盲目选取最高版本。后续如果有个别组件升级则需要安装完基本集群后才能升级
# 下载工具脚本easzup,举例使用kubeasz版本2.0.2
export release=2.0.2
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/easzup
chmod +x ./easzup
# 使用工具脚本下载
# 举例使用 k8s 版本 v1.18.2,docker 19.03.5
./easzup -D -d 19.03.5 -k v1.18.2
如果上述没有报错则可以进行下一步安装,默认会把配置文件都放在/etc/ansible上
一般情况下需要修改easzup
脚本内容,如加速域名的添加,image地址的修改
01-创建证书和环境准备
此项是配置kuberbetes证书的,在配置前需要配置好hosts文件,在example下有hosts文件样例
如果执行了playbook,后续又要需要修改证书,则需要删除.cluster目录才能重新执行playbook
root@K8S-Master1:ansible# cat roles/deploy/defaults/main.yml
# CA 证书相关参数
CA_EXPIRY: "876000h"
CERT_EXPIRY: "438000h"
# apiserver 默认第一个master节点
KUBE_APISERVER: "https://{{ groups['kube-master'][0] }}:6443"
# kubeconfig 配置参数,注意权限根据‘USER_NAME’设置:
# 'admin' 表示创建集群管理员(所有)权限的 kubeconfig
# 'read' 表示创建只读权限的 kubeconfig
CLUSTER_NAME: "cluster1"
USER_NAME: "admin"
CONTEXT_NAME: "context-{{ CLUSTER_NAME }}-{{ USER_NAME }}"
02-安装etcd集群
此项安装Etcd集群,如果需要修改service文件就修改执行playbook就好了,问题不大
03-安装docker服务
此步骤有两个playbook03.containerd.yml
和03.docker.yml
执行docker的playbook时需要配置harbor的域名到docker的配置文件下才进行分发到各节点,还有加速域名,不然就要后续手动配置了。
04-安装kube-master节点
此项安装master集群,如果需要修改service文件就修改执行playbook就好了,问题不大
05-安装kube-node节点
此项安装node集群,如果需要修改service文件就修改执行playbook就好了,问题也不大
06-安装网络组件
注意网络组件的镜像地址,建议使用fannel+directrouting
到了这步骤结束后,就可以使用k8s集群了,可以自由添加deployment/service/RC/daemonSet,可以加入busybox容器测试可否正常使用。
07-CoreDns
core-dns不在kubeasz的安装内容,不过他会制作镜像。
core-dns安装非常复杂,因为我们不会默认安装kube-dns,下载后进入kubernetes目录
# dnsIp 最好使用写死,通过安装的k8s集群dnsip为SERVICE_CIDR的第二个ip, 如192.168.0.0/16, dnsIp就是192.168.0.2
# CLUSTER_DNS_DOMAIN 配置k8s的域名
# CLUSTER_CIDR node集群ip范围
./deploy.sh -i ${dnsIp} -d ${CLUSTER_DNS_DOMAIN} -r ${CLUSTER_CIDR} > coredns.yaml
kubectl apply -f coredns.yaml
测试,下载busybox容器加入k8s集群,启动busybox
域名组装格式SvcName.NameSpace.Svc.CLUSTER_DNS_DOMAIN
kubectl exec -it ${podName} sh
# 查看域名解析时候成功
nslookup kubenetes.kube-system.svc.${CLUSTER_DNS_DOMAIN}
如果测试不通过进入测试容器,查看/etc/resovle.conf看看配置的dns地址与coredns开启的service ClusterIP是否一样
通过以下命令查看
kubectl get svc -n kube-system