溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

kubernetes v1.14.3 HA集群安裝

發(fā)布時間:2020-07-24 06:16:58 來源:網(wǎng)絡(luò) 閱讀:1340 作者:moakia 欄目:云計算

kubernetes v1.14.3 HA集群安裝

目錄結(jié)構(gòu)

  1. 集群規(guī)劃

    主機名 ip 角色 組件
    master1-3 192.168.14.138-140 master+etcd etcd kube-apiserver kube-controller-manager kubectl kubeadm kubelet kube-proxy flannel
    worker1 192.168.14.141 node kubectl kubeadm kubelet kube-proxy flannel
    vip 192.168.14.142 實現(xiàn)apiserver的高可用
  2. 組件版本

    組件 版本
    centos 7.3.1611
    kernel 3.10.0-957.el7.x86_64
    kubeadm v1.14.3
    kubelet v1.14.3
    kubectl v1.14.3
    kube-proxy v1.14.3
    flannel v0.11.0
    etcd 3.3.10
    docker 18.09.5
    kubernetes-dashboard v1.10.1
    keepalived 1.3.5
    haproxy 1.5.18
  3. 高可用架構(gòu)說明

    kubernetes v1.14.3 HA集群安裝

    kubernetes架構(gòu)概念

    kube-apiserver:集群核心,集群API接口、集群各個組件通信的中樞;集群安全控制;
    etcd:集群的數(shù)據(jù)中心,用于存放集群的配置以及狀態(tài)信息,通過RAFT同步信息。
    kube-scheduler:集群Pod的調(diào)度中心;默認kubeadm安裝情況下–leader-elect參數(shù)已經(jīng)設(shè)置為true,保證master集群中只有一個kube-scheduler處于活躍狀態(tài);
    kube-controller-manager:集群狀態(tài)管理器,當集群狀態(tài)與期望不同時,kcm會努力讓集群恢復(fù)期望狀態(tài),比如:當一個pod死掉,kcm會努力新建一個pod來恢復(fù)對應(yīng)replicas set期望的狀態(tài);默認kubeadm安裝情況下–leader-elect參數(shù)已經(jīng)設(shè)置為true,保證master集群中只有一個kube-controller-manager處于活躍狀態(tài);
    kubelet: kubernetes node上的 agent,負責與node上的docker engine打交道;
    kube-proxy: 每個node上一個,負責service vip到endpoint pod的流量轉(zhuǎn)發(fā),原理是通過設(shè)置iptables規(guī)則實現(xiàn)

    負載均衡說明

    haproxy: 主要用于apiserver負載均衡
    keepalived: 主要用于apiserver高可用。
    haproxy+keepalived主要功能就是實現(xiàn)高可用狀態(tài)的負載均衡。首先通過keepalived生成一個虛地址VIP(主機點宕機后漂移到其他機器,VIP在哪臺機器上,就和本地ip地址一樣,都代表本機,共用同網(wǎng)卡,共用本地服務(wù)service,本地接口socket),然后當訪問VIP:PORT再通過haproxy負載至后端的實際端口RIP:6443,即真正的apiserver服務(wù).

  4. 準備工作

    1、安裝docker

    ? 參考

    2、修改內(nèi)核參數(shù)

    cat <<EOF >  /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward=1
    EOF
    sysctl --system

    3、關(guān)閉Swap

    sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
    setenforce 0

    4、開啟ipvs

    需要開啟的模塊是
    ip_vs
    ip_vs_rr
    ip_vs_wrr
    ip_vs_sh
    nf_conntrack_ipv4
    
    檢查有沒有開啟
    cut -f1 -d " "  /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4
    
    沒有的話,使用以下命令加載
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4

    5、禁用selinux,關(guān)閉防火墻

    關(guān)閉selinux
    setenforce 0
    sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
    關(guān)閉防火墻
    systemctl stop firewall.service
    systemctl disable firewall.service

    6、開啟免密,檢查網(wǎng)絡(luò),dns,hosts,ntp是否正常

    開啟免密
    [master1]ssh-kengen 
    [master1]ssh-copy-id root@hosts
    編輯hosts
    vim /etc/hosts
    開啟ntp同步
    systemctl start ntpd.service
    systemctl enable ntpd.service
  5. 安裝步驟

    一、安裝haproxy和keepalived來創(chuàng)建一個負載均衡器。

    1、安裝haproxy

   分發(fā)安裝haproxy(所有master節(jié)點)
   for i in master1 master2 master3; do ssh  root@$i  "yum install haproxy ";done
   配置haproxy文件(所有master節(jié)點)
   cat <EOF > /etc/haproxy/haproxy.cfg
   global
       log         127.0.0.1 local2
       chroot      /var/lib/haproxy
       pidfile     /var/run/haproxy.pid
       maxconn     4000
       user        haproxy
       group       haproxy
       daemon

   defaults
       mode                    tcp
       log                     global
       retries                 3
       timeout connect         10s
       timeout client          1m
       timeout server          1m

   frontend kubernetes
       bind *:8443              #配置端口為8443
       mode tcp
       default_backend kubernetes-master

   backend kubernetes-master           #后端服務(wù)器,也就是說訪問192.168.255.140:8443會將請求轉(zhuǎn)發(fā)到后端的三臺,這樣就實現(xiàn)了負載均衡
       balance roundrobin
       server master1  192.168.14.138:6443 check maxconn 2000
       server master2  192.168.14.139:6443 check maxconn 2000
       server master3  192.168.14.140:6443 check maxconn 2000
   EOF
   分發(fā)配置文件
   for i in master1 master2 master3; do scp  /etc/haproxy/haproxy.cfg   root@$i:/etc/haproxy/haproxy.cfg;done
   重啟服務(wù)器
   systemctl daemon-reload && systemctl restart haproxy && systemctl haproxy
2、安裝keepalived
   分發(fā)安裝haproxy(所有master節(jié)點)
   for i in master1 master2 master3; do ssh  root@$i  "yum install keepalived ";done
   配置keepalived文件(所有master節(jié)點)

   cat <EOF > /etc/keepalived/keepalived.conf
   global_defs {
      notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
      }
      notification_email_from Alexandre.Cassen@firewall.loc #表示發(fā)送通知郵件時郵件源地址是誰
      smtp_server 192.168.200.1 #表示發(fā)送email時使用的smtp服務(wù)器地址
      smtp_connect_timeout 30 #連接smtp連接超時時間
      router_id LVS_docker1  #主機標識,每臺機器上修改
      vrrp_skip_check_adv_addr
      vrrp_strict
      vrrp_garp_interval 0
      vrrp_gna_interval 0
   }

   vrrp_instance VI_1 {
       state MASTER         #備服務(wù)器上改為BACKUP
       interface ens160       #改為自己的接口
       virtual_router_id 51   # VRID 不可更改
       priority 100         #備服務(wù)器上改為小于100的數(shù)字,90,80
       advert_int 1
       authentication {
           auth_type PASS
           auth_pass 1111
       }
       virtual_ipaddress {
           192.168.14.142          #虛擬vip,自己設(shè)定
       }
   }
   EOF
   keepalived配置不太一樣,要求修改后分發(fā)。
   重啟服務(wù)器
   systemctl daemon-reload && systemctl restart keepalived && systemctl keepalived
3、驗證keepalived是否正常工作。
   登錄主節(jié)點
   ip a

二、安裝 kubeadm, kubelet 和 kubectl

1、添加國內(nèi)yum源

   cat <<EOF > /etc/yum.repos.d/kubernetes.repo
   [kubernetes]
   name=Kubernetes
   baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
   enabled=1
   gpgcheck=0
   repo_gpgcheck=0
   gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
   EOF

2、指定版本安裝

   更新倉庫
   yum makecache fast
   查找相應(yīng)版本軟件
   yum search --showduplicates kubeadm

3、在所有安裝kubelet的節(jié)點上,將kubelet設(shè)置為開機啟動

   yum install  -y kubectl-1.14.3  kubeadm-1.14.3 kubelet-1.14.3
   systemctl daemon-reload && systemctl restart kubelet && systemctl kubelet 

四、提前下載所有需要用到的鏡像(谷歌鏡像,通過代理下載)

1、查看需要下載的鏡像

   kubeadm config images list

2、通過代理轉(zhuǎn)換鏡像(命令行直接輸入)(所有節(jié)點)

   for i  in kube-apiserver:v1.14.3 kube-controller-manager:v1.14.3  kube-scheduler:v1.14.3 kube-proxy:v1.14.3 pause:3.1 etcd:3.3.10 coredns:1.3.1 ;do docker pull gcr.akscn.io/google_containers/$i ;docker tag gcr.akscn.io/google_containers/$i  k8s.gcr.io/$i; done

 國內(nèi)鏡像參考
 https://kubernetes.feisky.xyz/fu-lu/mirrors

五、初始化master

1、初始化master,所有master算作控制平面節(jié)點

1) 在master1編寫集群的的初始化配置文件

? 集群版本是v1.14.3

? 指定集群的api端口和地址

? 使用flannel,指定pod端口范圍"10.244.0.0/16"

? 模板文件生成參考:

    kubeadm config print init-defaults --component-configs KubeletConfiguration

? 說明:

apiServer:
  timeoutForControlPlane: 4m0s #超時時間
apiVersion: kubeadm.k8s.io/v1beta1 #版本信息
certificatesDir: /etc/kubernetes/pki #證書位置
clusterName: kubernetes #集群名稱
controlPlaneEndpoint: ""  #控制平面LOAD_BALANCER_DNS:LOAD_BALANCER_PORT
controllerManager: {}
dns:
  type: CoreDNS  #dns類型
etcd:
  local:
    dataDir: /var/lib/etcd  #etcd位置
imageRepository: k8s.gcr.io #鏡像倉庫
kind: ClusterConfiguration  #類型是集群配置
kubernetesVersion: v1.14.0  # kubernetes版本
networking:
  dnsDomain: cluster.local #dns
  podSubnet: ""  #子網(wǎng)類型,和插件有關(guān)
  serviceSubnet: 10.96.0.0/12  #service地址設(shè)定
scheduler: {}

? 最終配置文件

   cat <EOF >  kubeadm-config.yaml
   apiVersion: kubeadm.k8s.io/v1beta1
   kind: ClusterConfiguration
   kubernetesVersion: v1.14.3
   controlPlaneEndpoint: "192.168.14.142:8443"
   networking:
     podSubnet: "10.244.0.0/16"
   EOF

2) 執(zhí)行初始化

   kubeadm init    --config=kubeadm-config.yaml --experimental-upload-certs
   #--pod-network-cidr=10.244.0.0/16 設(shè)置flannel子網(wǎng)地址訪問
   # --experimental-upload-certs標志用于將應(yīng)在所有控制平面實例之間共享的證書上載到群集,主控制平面的證書被加密并在上傳的kubeadm-certs sercert

3) 初始化完成后的主要提示如下

   其他的master節(jié)點加入控制平面的命令
   kubeadm join 192.168.14.142:8443 --token g9up4e.wr2zvn1y0ld2u9c8     --discovery-token-ca-cert-hash sha256:d065d5c2bfce0f5e0f784ed18cb0989dd19542721969c12888f04496b03f121c     --experimental-control-plane --certificate-key ddad01f830084f0dd4a9f89e914020cf1001aa31f4550cf5fccce9bad2d6d599
   node節(jié)點加入node的命令
   kubeadm join 192.168.14.131:6443 --token xl9aa5.2lxz30aupuf9lbhh     --discovery-token-ca-cert-hash sha256:0fa135166d86ad9e654f7b92074b34a42a5a25152c05e9253df62af8541c7bad
   配置kubeconfig的命令提示
   mkdir -p $HOME/.kube
   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
   sudo chown $(id -u):$(id -g) $HOME/.kube/config

4)配置kubectl,主要是配置訪問apiserver 的權(quán)限

      mkdir -p $HOME/.kube
   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
   sudo chown $(id -u):$(id -g) $HOME/.kube/config

5)kubectl命令補選

 echo "source <(kubectl completion bash)"  >>  ~/.bashrc
 source ~/.bashrc

? 2、初始化控制平面其他master 主機

   其他的master節(jié)點加入控制平面的命令
   kubeadm join 192.168.14.142:8443 --token g9up4e.wr2zvn1y0ld2u9c8     --discovery-token-ca-cert-hash sha256:d065d5c2bfce0f5e0f784ed18cb0989dd19542721969c12888f04496b03f121c     --experimental-control-plane --certificate-key 

? 3、集群證書和hash值,2個小小時后過期。重新生成證書方法如下

  控制平面生成證書的解密密鑰
  sudo kubeadm init phase upload-certs --experimental-upload-certs
  集群重新生成token
  kubeadm token create
  集群重新生成hash值
  openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
  控制平面重新加入集群的方法
  kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash> --experimental-control-plane --certificate-key cert
  work節(jié)點重新加入集群的方法
  kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

4、檢查三臺master是否初始化成功

   kubectl get nodes 

六、 將worker節(jié)點加入集群

   kubeadm join 192.168.14.131:6443 --token xl9aa5.2lxz30aupuf9lbhh     --discovery-token-ca-cert-hash sha256:0fa135166d86ad9e654f7b92074b34a42a5a25152c05e9253df62af8541c7bad

七、安裝網(wǎng)絡(luò)插件Flannel(主節(jié)點運行即可)

   kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml

八、查看集群狀態(tài)

 master1   Ready      master   4h51m   v1.14.3
master2   Ready      <none>   4h46m   v1.14.3
master3   Ready      master   4h60m   v1.14.3
worker1   Ready      master   4h49m   v1.14.3

參考鏈接:

kubeadm高可用安裝kubernetes v1.14.3

通過kubeadm創(chuàng)建單個集群

通過kubeadm創(chuàng)建高可用集群

通過kubeadm配置集群中的每個kubelet

后續(xù)繼續(xù)補充,mark!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI