Kubeasz部署K8s基础测试环境简介
下面介绍使用Kubeasz部署K8s集群环境。
https://github.com/easzlab/kubeasz
在需要使用kubeeasz项目安装的k8s时,需要将所有需要它来部署的节点上,都安装python2.7,最新的kubeeasz可能已经支持python3了,这个要具体查看说明。
另外 ,0.6.x的版本中bin目录下的二进制文件,以前是打包好放在网盘上的,但在最新版中都改为直接在线下载了。
#需要注意的是, 此项目在0.6.x以上版本中,将其中一些添加新master,node等节点的功能去掉了,因此在下载项目时,一定要仔细看看其example/目录下支持的hosts,看看hosts模板中是否有需要的功能。
git clone -b 0.6.1 https://github.com/easzlab/kubeasz.git
这是我测试K8s的逻辑拓扑图:
建议,测试K8s,OpenStack等环境时,先将拓扑图画出来,然后,根据拓扑图来部署环境,这样便于理清思路,深入学习。
使用Kubeasz部署K8s集群注意事项:
1. 最小化安装一台ubuntu 或 centos
#以ubuntu18.10为例:
2. 卸载如下包:
1) apt remove ufw #ufw是Ubuntu上默认安装的防火墙.
2) snap remove lxd && apt remove snapd
3. 关闭云服务工具: cloud-init
systemctl disable cloud-init-local cloud-init cloud-config cloud-final
4. 修改系统时区
timedatectl set-timezone Asia/Shanghai
5. 安装chronyd
apt-get install chronyd && chronyc sources -v
6. 安装docker-ce,已经python2.7环境
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
apt-get install apt-transport-https ca-certificates curl software-properties-common chrony \
nfs-common conntrack jq socat bash-completion rsync ipset ipvsadm
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce python2.7
ln -s /usr/bin/pyton2.7 /usr/bin/python
7. 创建SSH证书
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
ssh-copy-id 192.168.10.130 #注意:这是我制作用于克隆其它VM的基础主机的IP.
这样制作出来的VM,启动后,就会自动做好SSH无密钥认证.
通过上面的操作,就制作好一台通用的K8s基础环境的主机。
接着就可以使用VMware将该主机克隆出多个连接克隆,做如下操作。
1. 至少做2台链接克隆的Ubuntu做为Master节点。
2. 至少做3台链接克隆的Ubuntu作为Node节点
3. 至少在做一台作为LB节点,实现Master的高可用。另外它也可以再兼职Harbor.
4.分别依次启动每个VM,并修改其IP地址.可按上面拓扑图的方案来配置,也可自行设计.
5.确保每个节点都能互相通信,并且都能联网。
6. 在其中一个Master节点上安装ansible.
git clone -b 0.6.1 https://github.com/easzlab/kubeasz.git
cd kubeasz/ && cp -rf ./* /etc/ansible/
到我的网盘地址去下载所需的K8s集群所需的二进制打包文件:
https://pan.baidu.com/s/1njpwNdNEkVnuuXy029gXjw
下载完成后,解压到/etc/ansible/bin/下面,然后就可以做之后的操作了。
然后进入 /etc/ansible/ 执行以下命令.
1. 将git克隆的kubeasz项目整体拷贝文件到/etc/ansible中,这是ansible默认执行目录,所以放这里可避免手动指定hosts文件.
1) cp example/hosts.m-masters.example /etc/ansible/hosts
2) vim /etc/ansible/hosts
#deploy段,是指定克隆Kubeasz项目的那台主机,因为我将kubeasz克隆到Master1上了,因此我这里写Master1的IP
#另外我已经事先配置好Chrony-Server,并且将所有节点和它同步了时间,因此我将NTP_ENABLED设置为no,若你没有配置时间同步,可设为yes.
#但一定要保障你的所有节点都能联网。
[deploy]
192.168.111.84 NTP_ENABLED=no
# ETCD数据库我是将其安装到Node节点上了,这样做可节省VM的数量
[etcd]
192.168.111.80 NODE_NAME=etcd1
192.168.111.81 NODE_NAME=etcd2
192.168.111.82 NODE_NAME=etcd3
#这里设置K8sMaster有哪些,这里我是两台做高可用.因此写两个
[kube-master]
192.168.111.84 NEW_MASTER=yes
192.168.111.85 NEW_MASTER=yes
#这里配置K8s的Node节点.
[kube-node]
192.168.111.80 NEW_NODE=yes
192.168.111.81 NEW_NODE=yes
192.168.111.82 NEW_NODE=yes
[all:vars]
# ---------集群主要参数---------------
#集群部署模式:allinone, single-master, multi-master
#这里配置为多master,因为这里要做Master的高可用
DEPLOY_MODE=multi-master
#集群主版本号,目前支持: v1.8, v1.9, v1.10,v1.11, v1.12, v1.13
#安装的版本是K8s的v1.13.5,因此这里选择v1.13
K8S_VER="v1.13"
# 这里设置LB(负载均衡)上的VIP,也就是192.168.111.100,它是一个HAProxy+keepalived,
#我配置是HAProxy反向代理两台Master.
MASTER_IP="192.168.111.100"
KUBE_APISERVER="https://{{ MASTER_IP }}:6443"
# 集群网络插件,目前支持calico, flannel, kube-router, cilium
#这里我使用calico来部署K8s的网络,这是为了方便后面配置网络策略,使用flannel的话,也可以,不过这就要参考官网资料,
#将calico集成到flannel网络中,让flannel提供网络,calico提供网络策略.
CLUSTER_NETWORK="calico"
#Services网段,每个Service都是一组Pod的前端LB
SERVICE_CIDR="172.30.0.0/16"
# POD 网段 (Cluster CIDR),注意不要与内网已有网段冲突
CLUSTER_CIDR="10.10.0.0/16"
#这些预留的端口是为外网用户访问K8s集群时使用的,即K8s集群的Node节点要选出几个节点,
#暴露这些端口,然后,在前端入口LB上,配置调度时,指定转发给这些节点的那些端口。
NODE_PORT_RANGE="30000-60000"
#这个是为CoreDNS或其它K8s内部DNS预留的IP
CLUSTER_DNS_SVC_IP="172.30.254.254"
# 集群 DNS 域名
CLUSTER_DNS_DOMAIN="zcf.local."
#这是当部署完K8s的Dashboard后,登录时,使用的用户名和密码。
BASIC_AUTH_USER="admin"
BASIC_AUTH_PASS="zhangcf"
2. 确保所有需要kubeeasz来部署服务端节点上,都安装了python2.7,并可直接执行 python 命令.
for i in {80..85}; do ssh 192.168.10.$i "apt-get install python2.7 -y"; done
for i in {80..85}; do ssh 192.168.10.$i "hostname; ln -s /usr/bin/python2.7 /usr/bin/python; python --version"; done
3. 在node 和 master检查docker是否能正常工作
systemctl start docker
docker ps -a
4. 以上检查和配置完成后,就可以做以下操作了.
4.1.下载必须的镜像文件:
从阿里云的谷歌镜像仓库中下载:
#下载启动K8s各系统Pod所需要的基础镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64
修改 roles/kube-node/defaults/main.yml
# 默认使用kube-proxy的 'iptables' 模式,可选 'ipvs' 模式(experimental)
PROXY_MODE: "iptables"
# 基础容器镜像
SANDBOX_IMAGE: "harbor.zcf.com/k8s/pause-amd64:3.1" #这里我是将其下载后,上传到我的harbor上了.
#接着去下载Calico3.3.6的版本,因为K8sv1.13.5官方changlog中说明了,对此版本的Calico是测试稳定的.
https://github.com/projectcalico/calico/releases?after=v3.5.5 到这里去找Calico3.3.6的版本去下载.
下载完成后,解压后,其中会包含Calico的镜像和客户端工具,只需要将Calico镜像上传到自己的Harbor上,然后修改以下内容:
vim roles/calico/defaults/main.yml
# 更新支持calico 版本: [v3.2.x] [v3.3.x] [v3.4.x]
calico_ver: "v3.3.6"
CALICO_NODE: "harbor.zcf.com/k8s/calico/node:{{ calico_ver }}"
CALICO_CNI: "harbor.zcf.com/k8s/calico/cni:{{ calico_ver }}"
CALICO_CTRL: "harbor.zcf.com/k8s/calico/kube-controllers:{{ calico_ver }}"
vim roles/calico/templates/calico-v3.3.yaml.j2
#修改calico的DaemonSet控制器中三个Pod模板使用的镜像
- name: calico-node
image: {{ CALICO_NODE }}
。。。
- name: install-cni
image: {{ CALICO_CNI }}
。。。。
- name: calico-kube-controllers
image: {{ CALICO_CTRL }}
4.2 以上配置修改完成后,就可以继续下面的步骤了.
顺序执行下面几个playbook,若遇到报错,第一次可忽略,然后再次运行,若两次都失败,就需要具体查原因了:
ansible-playbook 01.prepare.yml
02.etcd.yml
03.docker.yml #若在初始化环境时,安装了docker,这一步可不做!!
04.kube-master.yml
05.kube-node.yml
06.network.yml
5. 以上若全部执行完成,你就已经部署了一个最基本的K8s高可用的运行环境。
#注意:我上面没有对HAProxy+Keepalived+Harbor的配置,这些建议参考其它文章来自行学习,因为这些都不难.
6. 需要配置Kube-DNS,这里我还有些问题,没有完全弄明白,仅提供思路.
6.1 首先从kubernetes官方github上下载kube-dns这个Addons(附件)的配置清单
wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dns/kube-dns/kube-dns.yaml.in
#下载可能会失败,多试几次即可。注意:kubernetes的各种Addons都在不断更新,所以一定要注意,下面提供的参数可能会有变!
下载完成,做以下修改:
#从阿里云的谷歌镜像仓库下载镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-kube-dns:1.14.13
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-dnsmasq-nanny:1.14.13
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-sidecar:1.14.13
spec:
selector:
k8s-app: kube-dns
clusterIP: {{ pillar['dns_server']}}
#将{{ pillar['dns_server']}} 修改为 CLUSTER_DNS_SVC_IP它的值,因为我在hosts设置其为"172.30.254.254"
clusterIP: 172.30.254.254
.。。。。。
- name: kubedns
image: k8s.gcr.io/k8s-dns-kube-dns:1.14.13
#注意:我是提前下载好镜像,并上传到harbor上后,修改为image为:
image: harbor.zcf.com/k8s/k8s-dns-kube-dns:1.14.13
.....
- name: dnsmasq
# image: k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:v1.14.13
image: harbor.zcf.com/k8s/k8s-dns-dnsmasq-nanny-amd64:v1.14.13
......
- name: sidecar
# image: k8s.gcr.io/k8s-dns-sidecar:1.14.13
image: harbor.zcf.com/k8s/k8s-dns-sidecar:1.14.13
。。。。。
limits:
memory: {{ pillar['dns_memory_limit'] }}
#将其修改Pod可使用内存硬限制大小,如我设置为: 100Mi
。。。。。
- --domain={{ pillar['dns_domain'] }}.
#修改所有类似 “{{ pillar['dns_domain'] }}” 为 CLUSTER_DNS_DOMAIN的值。
#注意:此yaml文件中多处都引用了它,我并没有全部列出来.
#我这里在Hosts文件配置为: CLUSTER_DNS_DOMAIN="zcf.local."
#因此我的是修改为 - --domain=zcf.local. #注意域名最后是有一个点的.
.......
#- --server=/{{ pillar['dns_domain'] }}/127.0.0.1#10053
#修改上面pillar为你的集群域名。如,我的修改为:
- --server=/zcf.local/127.0.0.1#10053
#然后添加以下内容,注意:这可能不是必须的,因此测试中,发现Pod不能访问公网,所以才添加了以下内容。
#但这并没有解决根本问题,根本问题还是需要让kube-dns能读取node节点上的/etc/resolv.conf文件,来获取公网DNS的地址.
#我测试没有通过,因此才有了下面的方式.
- --server=/.com/114.114.114.114#53
- --server=/.cn/114.114.114.114#53
- --server=/.org/114.114.114.114#53
- --server=/.net/114.114.114.114#53
6.2. 以上kube-dns的yaml文件都修改好,接着就可以执行:
mv kube-dns.yaml.in kube-dns.yaml
kubectl apply -f kube-dns.yaml
7. 以上步骤全部做完后,一个基本意义上的K8s已经部署完成。
至于Dashboard如何部署,这里就不说明了。后面有时间在补充吧,或者也可参考其它文章来部署。
Kubeasz部署K8s基础测试环境简介的更多相关文章
- 【Kubernetes学习笔记】-使用Minikube快速部署K8S单机学习环境
介绍 https://minikube.sigs.k8s.io/docs/ Minikube 用于快速在本地搭建 Kubernetes 单节点集群环境,它对硬件资源没有太高的要求,方便开发人员学习试用 ...
- Jenkins+Maven+SVN搭建自动部署、自动测试环境
.打开http://10.3.15.78:8080/jenkins/,第一次进入里面没有数据,我们需要创建job,我们这有2个项目,需要创建2个job.http://10.3.34.163:9890/ ...
- 使用kubeadm部署k8s集群[v1.18.0]
使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...
- centos7.8 安装部署 k8s 集群
centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...
- kubernetes实战之consul篇及consul在windows下搭建consul简单测试环境
consul是一款服务发现中间件,1.12版本后增加servicemesh功能.consul是分布式的,可扩展的,高可用的根据官方文档介绍,目前已知最大的consul集群有5000个节点,consul ...
- ELK系列(7) - 测试环境下Logstash异常退出:block in multi_receive_encoded
问题与分析 在本地测试无误后将ELK部署到了测试环境,结果第二天发现Logstash挂掉了,一开始以为是自动部署之类导致的问题.之后几天时间里Logstash总是会down掉,查看了下日志文件,发现报 ...
- 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作
本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...
- redis cluster安装部署(测试环境)
redis 应用于web前端,做缓存和数据存取的速度是挺可观的,最近看了一些资料,手痒了,就弄了一个测试环境,两台方案,试用一下. ##Redis 集群部署## 一,方案调研: 参考博客: http: ...
- 微服务架构 - 离线部署k8s平台并部署测试实例
一般在公司部署或者真实环境部署k8s平台,很有可能是内网环境,也即意味着是无法连接互联网的环境,这时就需要离线部署k8s平台.在此整理离线部署k8s的步骤,分享给大家,有什么不足之处,欢迎指正. 1. ...
随机推荐
- .NET Core中如何对Url进行编码和解码
我们在.NET Core项目中,可以用WebUtility类对Url进行编码和解码,首先我们要确保项目中引入了nuget包:System.Runtime.Extensions 当然这个nuget包默认 ...
- php 计算文件大小
计算文件大小 主要计算文件的 size 大小,默认的为Bytes的,所以运用三元运算符,来进行转换. 转换成 Bytes->KB->MB->GB /** * @param $size ...
- 浅浅的叙WPF之数据驱动与命令
之前一直开发Winfrom程序,由于近一段时间转开发Wpf程序,刚好拜读刘铁锰<深入浅出WPF>对此有一些理解,如有误导指出,还望斧正!!! 说道WPF数据驱动的编程思想,MVVM,是为W ...
- C#中真正的属性
引言 我们以前课堂上说的类当中的“属性”,其实官方叫法是“字段”或者“域”域(Field).正常使用,把它们当属性理解更加方便快捷,也没有什么问题. 如果要在微软的mvc中充分利用类带来的便利,就有必 ...
- vue 鼠标右击事件
使用@contextmenu.prevent即可 参考:https://www.cnblogs.com/sxz2008/p/6953082.html
- 图像上划矩形(cv.line()函数)
在图像上划矩形 import numpy as npimport cv2 as cvimg=np.zeros((400,400),np.uint8)cv.line(img,(100,100),(350 ...
- MySQL之简介以及数据类型(一)
一:关系型数据库 所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据. 二:关系型数据库的主要产品: oracle:在以前的大型项目中使用 ...
- hadoop中HDFS的NameNode原理
1. hadoop中HDFS的NameNode原理 1.1. 组成 包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统),等等. 1.2. HDFS架构 ...
- 另类WebShell监测机制--基于auditd
鸣 谢 VSRC感谢业界小伙伴——老陈投稿精品原创类文章.VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们为您准备的丰富奖品包括但不仅限于:MacbookAir.VSRC定制 ...
- CTFd平台搭建以及一些相关问题解决
CTFd平台搭建以及一些相关问题解决 一.序言 因为想给学校工作室提高一下学习氛围,随便带学弟学妹入门,所以做了一个ctf平台,开源的平台有CTFd和FBCTF,因为学生租不起高端云主机所以只能选择占 ...