下面介绍使用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基础测试环境简介的更多相关文章

  1. 【Kubernetes学习笔记】-使用Minikube快速部署K8S单机学习环境

    介绍 https://minikube.sigs.k8s.io/docs/ Minikube 用于快速在本地搭建 Kubernetes 单节点集群环境,它对硬件资源没有太高的要求,方便开发人员学习试用 ...

  2. Jenkins+Maven+SVN搭建自动部署、自动测试环境

    .打开http://10.3.15.78:8080/jenkins/,第一次进入里面没有数据,我们需要创建job,我们这有2个项目,需要创建2个job.http://10.3.34.163:9890/ ...

  3. 使用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 ...

  4. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

  5. kubernetes实战之consul篇及consul在windows下搭建consul简单测试环境

    consul是一款服务发现中间件,1.12版本后增加servicemesh功能.consul是分布式的,可扩展的,高可用的根据官方文档介绍,目前已知最大的consul集群有5000个节点,consul ...

  6. ELK系列(7) - 测试环境下Logstash异常退出:block in multi_receive_encoded

    问题与分析 在本地测试无误后将ELK部署到了测试环境,结果第二天发现Logstash挂掉了,一开始以为是自动部署之类导致的问题.之后几天时间里Logstash总是会down掉,查看了下日志文件,发现报 ...

  7. 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作

    本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...

  8. redis cluster安装部署(测试环境)

    redis 应用于web前端,做缓存和数据存取的速度是挺可观的,最近看了一些资料,手痒了,就弄了一个测试环境,两台方案,试用一下. ##Redis 集群部署## 一,方案调研: 参考博客: http: ...

  9. 微服务架构 - 离线部署k8s平台并部署测试实例

    一般在公司部署或者真实环境部署k8s平台,很有可能是内网环境,也即意味着是无法连接互联网的环境,这时就需要离线部署k8s平台.在此整理离线部署k8s的步骤,分享给大家,有什么不足之处,欢迎指正. 1. ...

随机推荐

  1. .NET Core中如何对Url进行编码和解码

    我们在.NET Core项目中,可以用WebUtility类对Url进行编码和解码,首先我们要确保项目中引入了nuget包:System.Runtime.Extensions 当然这个nuget包默认 ...

  2. php 计算文件大小

    计算文件大小 主要计算文件的 size 大小,默认的为Bytes的,所以运用三元运算符,来进行转换. 转换成 Bytes->KB->MB->GB /** * @param $size ...

  3. 浅浅的叙WPF之数据驱动与命令

    之前一直开发Winfrom程序,由于近一段时间转开发Wpf程序,刚好拜读刘铁锰<深入浅出WPF>对此有一些理解,如有误导指出,还望斧正!!! 说道WPF数据驱动的编程思想,MVVM,是为W ...

  4. C#中真正的属性

    引言 我们以前课堂上说的类当中的“属性”,其实官方叫法是“字段”或者“域”域(Field).正常使用,把它们当属性理解更加方便快捷,也没有什么问题. 如果要在微软的mvc中充分利用类带来的便利,就有必 ...

  5. vue 鼠标右击事件

    使用@contextmenu.prevent即可 参考:https://www.cnblogs.com/sxz2008/p/6953082.html

  6. 图像上划矩形(cv.line()函数)

    在图像上划矩形 import numpy as npimport cv2 as cvimg=np.zeros((400,400),np.uint8)cv.line(img,(100,100),(350 ...

  7. MySQL之简介以及数据类型(一)

    一:关系型数据库 所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据. 二:关系型数据库的主要产品: oracle:在以前的大型项目中使用 ...

  8. hadoop中HDFS的NameNode原理

    1. hadoop中HDFS的NameNode原理 1.1. 组成 包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统),等等. 1.2. HDFS架构 ...

  9. 另类WebShell监测机制--基于auditd

    鸣  谢 VSRC感谢业界小伙伴——老陈投稿精品原创类文章.VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们为您准备的丰富奖品包括但不仅限于:MacbookAir.VSRC定制 ...

  10. CTFd平台搭建以及一些相关问题解决

    CTFd平台搭建以及一些相关问题解决 一.序言 因为想给学校工作室提高一下学习氛围,随便带学弟学妹入门,所以做了一个ctf平台,开源的平台有CTFd和FBCTF,因为学生租不起高端云主机所以只能选择占 ...