美文网首页
基于kubeadm的kubernetes高可用集群部署<->

基于kubeadm的kubernetes高可用集群部署<->

作者: zoluo | 来源:发表于2019-01-18 22:54 被阅读0次
    image

    部署概要说明

    kubernetes高可用的核心架构是master的高可用,kubectl、客户端以及nodes访问load balancer实现高可用。

    详细部署架构图:

    image

    kubernetes组件说明

    1.kube-apiserver:集群核心,集群API接口、集群各个组件通信的中枢;集群安全控制;

    2.etcd:集群的数据中心,用于存放集群的配置以及状态信息,非常重要,如果数据丢失那么集群将无法恢复;因此高可用集群部署首先就是etcd是高可用集群;

    3.kube-scheduler:集群Pod的调度中心;默认kubeadm安装情况下--leader-elect参数已经设置为true,保证master集群中只有一个kube-scheduler处于活跃状态;

    4.kube-controller-manager:集群状态管理器,当集群状态与期望不同时,kcm会努力让集群恢复期望状态,比如:当一个pod死掉,kcm会努力新建一个pod来恢复对应replicas set期望的状态;默认kubeadm安装情况下--leader-elect参数已经设置为true,保证master集群中只有一个kube-controller-manager处于活跃状态;

    5.kubelet: kubernetes node agent,负责与node上的docker engine打交道;

    6.kube-proxy: 每个node上一个,负责service vip到endpoint pod的流量转发,当前主要通过设置iptables规则实现。

    负载均衡

    keepalived集群设置一个虚拟ip地址,虚拟ip地址指向k8s-master1、k8s-master2、k8s-master3。
    nginx用于k8s-master1、k8s-master2、k8s-master3的apiserver的负载均衡。外部kubectl以及nodes访问apiserver的时候就可以用过keepalived的虚拟ip(172.24.12.80)以及nginx端口(8443)访问master集群的apiserver。

    部署安装

    主节点安装清单

    主机名 IP地址 说明 安装组件
    K8s-master1 172.24.12.32 master节点1 keepalived、nginx、etcd、kubelet、kube-apiserver、kube-scheduler、kube-proxy、kube-dashboard、heapster、docker
    K8s-master2 172.24.12.33 master节点2 keepalived、nginx、etcd、kubelet、kube-apiserver、kube-scheduler、kube-proxy、kube-dashboard、heapster、docker
    K8s-master3 172.24.12.34 master节点3 keepalived、nginx、etcd、kubelet、kube-apiserver、kube-scheduler、kube-proxy、kube-dashboard、heapster、docker
    172.24.12.80 keepalived虚拟IP
    K8s-node1~ 172.24.12.35~ node节点 kubelet、kube-proxy、docker

    安装前准备

    版本信息
    • linux版本:
    [root@k8s-master1 yaml]# cat /etc/redhat-release
                             CentOS Linux release 7.5.1804 (Core)
    
    • docker版本:
    [root@k8s-master1 yaml]# docker version
                      Client:
                      Version:         1.13.1
                      API version:     1.26
                      Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
                      Go version:      go1.9.4
                      Git commit:      94f4240/1.13.1
                      Built:           Fri May 18 15:44:33 2018
                      OS/Arch:         linux/amd64
                       
                      Server:
                      Version:         1.13.1
                      API version:     1.26 (minimum version 1.12)
                      Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
                      Go version:      go1.9.4
                      Git commit:      94f4240/1.13.1
                      Built:           Fri May 18 15:44:33 2018
                      OS/Arch:         linux/amd64
                      Experimental:    false
    
    • kubeadm版本:
    v1.10.3
    
    • kubeletl版本:
    v1.10.3
    
    docker镜像准备
    • 执行脚本:
    #!/bin/bash
    images=(kube-proxy-amd64:v1.10.3 kube-scheduler-amd64:v1.10.3 kube-controller-manager-amd64:v1.10.3 kube-apiserver-amd64:v1.10.3
    etcd-amd64:3.1.12 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8
    k8s-dns-dnsmasq-nanny-amd64:1.14.8 heapster-amd64:v1.5.2)
    for imageName in ${images[@]} ; do
      docker pull keveon/$imageName
      docker tag keveon/$imageName k8s.gcr.io/$imageName
      docker rmi keveon/$imageName
    done
    
    • 额外镜像
    docker pull nginx
    docker pull keveon/flannel:v0.9.1-amd64
    docker tag keveon/flannel:v0.9.1-amd64 quay.io/coreos/flannel:v0.9.1-amd64
    
    系统设置

    以下在kubernetes所有节点上都是使用root用户进行操作:
    1.在kubernetes所有节点上增加kubernetes仓库:

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    EOF
    

    2.在kubernetes所有节点上进行系统更新

    [root@k8s-master1 yaml]# yum update -y
    

    3.在kubernetes所有节点上关闭防火墙

    systemctl disable firewalld && systemctl stop firewalld && systemctl status firewalld
    

    4.在kubernetes所有节点上设置SELINUX为permissive模式

    $ vi /etc/selinux/config
    SELINUX=permissive
    

    5.在kubernetes所有节点上设置iptables参数,否则kubeadm init会提示错误

    $ vi /etc/sysctl.conf
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    

    6.关闭各节点swap

    swapoff -a #会关闭所有swap
    

    7.主机名修改

    hostnamectl --static set-hostname  k8s-master1
    

    8.在kubernetes所有节点上重启主机

    reboot
    

    由于篇幅太长,我就用两章来介绍高可用 Kubernetes 的安装过程。下一张是最重要的安装内容!

    相关文章

      网友评论

          本文标题:基于kubeadm的kubernetes高可用集群部署<->

          本文链接:https://www.haomeiwen.com/subject/nagodqtx.html