kubernetesv1.14.3HA集群安裝-創(chuàng)新互聯(lián)

kubernetes v1.14.3 HA集群安裝

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

  1. 集群規(guī)劃

    資源網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),資源網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為資源上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的資源做網(wǎng)站的公司定做!
    主機(jī)名 ip 角色 組件
    master1-3192.168.14.138-140master+etcdetcd kube-apiserver kube-controller-manager kubectl kubeadm kubelet kube-proxy flannel
    worker1192.168.14.141nodekubectl kubeadm kubelet kube-proxy flannel
    vip192.168.14.142實(shí)現(xiàn)apiserver的高可用
  2. 組件版本

    組件 版本
    centos7.3.1611
    kernel3.10.0-957.el7.x86_64
    kubeadmv1.14.3
    kubeletv1.14.3
    kubectlv1.14.3
    kube-proxyv1.14.3
    flannelv0.11.0
    etcd3.3.10
    docker18.09.5
    kubernetes-dashboardv1.10.1
    keepalived1.3.5
    haproxy1.5.18
  3. 高可用架構(gòu)說明

    kubernetes v1.14.3 HA集群安裝

    kubernetes架構(gòu)概念

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

    負(fù)載均衡說明

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

  4. 準(zhǔn)備工作

    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)建一個(gè)負(fù)載均衡器。

    1、安裝haproxy

   分發(fā)安裝haproxy(所有master節(jié)點(diǎn))
   for i in master1 master2 master3; do ssh  root@$i  "yum install haproxy ";done
   配置haproxy文件(所有master節(jié)點(diǎn))
   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ā)到后端的三臺,這樣就實(shí)現(xiàn)了負(fù)載均衡
       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é)點(diǎn))
   for i in master1 master2 master3; do ssh  root@$i  "yum install keepalived ";done
   配置keepalived文件(所有master節(jié)點(diǎn))

   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ā)送通知郵件時(shí)郵件源地址是誰
      smtp_server 192.168.200.1 #表示發(fā)送email時(shí)使用的smtp服務(wù)器地址
      smtp_connect_timeout 30 #連接smtp連接超時(shí)時(shí)間
      router_id LVS_docker1  #主機(jī)標(biāo)識,每臺機(jī)器上修改
      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、驗(yàn)證keepalived是否正常工作。
   登錄主節(jié)點(diǎn)
   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é)點(diǎn)上,將kubelet設(shè)置為開機(jī)啟動

   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é)點(diǎn))

   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é)點(diǎn)

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

? 集群版本是v1.14.3

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

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

? 模板文件生成參考:

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

? 說明:

apiServer:
  timeoutForControlPlane: 4m0s #超時(shí)時(shí)間
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標(biāo)志用于將應(yīng)在所有控制平面實(shí)例之間共享的證書上載到群集,主控制平面的證書被加密并在上傳的kubeadm-certs sercert

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

   其他的master節(jié)點(diǎn)加入控制平面的命令
   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é)點(diǎn)加入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命令補(bǔ)選

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

? 2、初始化控制平面其他master 主機(jī)

   其他的master節(jié)點(diǎn)加入控制平面的命令
   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個(gè)小小時(shí)后過期。重新生成證書方法如下

  控制平面生成證書的解密密鑰
  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é)點(diǎn)重新加入集群的方法
  kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

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

   kubectl get nodes

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

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

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

   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)建單個(gè)集群

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

通過kubeadm配置集群中的每個(gè)kubelet

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁題目:kubernetesv1.14.3HA集群安裝-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://www.muchs.cn/article46/dsschg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、全網(wǎng)營銷推廣、網(wǎng)站設(shè)計(jì)公司面包屑導(dǎo)航、自適應(yīng)網(wǎng)站、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)