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等環境時,先將拓撲圖畫出來,而後,根據拓撲圖來部署環境,這樣便於理清思路,深刻學習。node

  

 使用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無密鑰認證.python

 

經過上面的操做,就製做好一臺通用的K8s基礎環境的主機。
接着就可使用VMware將該主機克隆出多個鏈接克隆,作以下操做。
1. 至少作2臺連接克隆的Ubuntu作爲Master節點。
2. 至少作3臺連接克隆的Ubuntu做爲Node節點
3. 至少在作一臺做爲LB節點,實現Master的高可用。另外它也能夠再兼職Harbor.
4.分別依次啓動每一個VM,並修改其IP地址.可按上面拓撲圖的方案來配置,也可自行設計.
5.確保每一個節點都能互相通訊,而且都能聯網。linux

6. 在其中一個Master節點上安裝ansible. 
   git  clone  -b 0.6.1 https://github.com/easzlab/kubeasz.git 
   cd  kubeasz/  &&  cp  -rf  ./*  /etc/ansible/git

   到個人網盤地址去下載所需的K8s集羣所需的二進制打包文件:
  https://pan.baidu.com/s/1njpwNdNEkVnuuXy029gXjwgithub

 下載完成後,解壓到/etc/ansible/bin/下面,而後就能夠作以後的操做了。
   
   而後進入 /etc/ansible/ 執行如下命令.docker

 

  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=noubuntu

    # ETCD數據庫我是將其安裝到Node節點上了,這樣作可節省VM的數量
    [etcd]
    192.168.111.80 NODE_NAME=etcd1
    192.168.111.81 NODE_NAME=etcd2
    192.168.111.82 NODE_NAME=etcd3vim

    #這裏設置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如何部署,這裏就不說明了。後面有時間在補充吧,或者也可參考其它文章來部署。    

相關文章
相關標籤/搜索