千家信息网

kubernetes v1.14.3 HA集群安装

发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,kubernetes v1.14.3 HA集群安装目录结构集群规划主机名ip角色组件master1-3192.168.14.138-140master+etcdetcd kube-apiserver
千家信息网最后更新 2025年02月19日kubernetes v1.14.3 HA集群安装

kubernetes v1.14.3 HA集群安装

目录结构

  1. 集群规划

    主机名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实现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. 高可用架构说明

    kubernetes架构概念

    kube-apiserver:集群核心,集群API接口、集群各个组件通信的中枢;集群安全控制;
    etcd:集群的数据中心,用于存放集群的配置以及状态信息,通过RAFT同步信息。
    kube-scheduler:集群Pod的调度中心;默认kubeadm安装情况下-leader-elect参数已经设置为true,保证master集群中只有一个kube-scheduler处于活跃状态;
    kube-controller-manager:集群状态管理器,当集群状态与期望不同时,kcm会努力让集群恢复期望状态,比如:当一个pod死掉,kcm会努力新建一个pod来恢复对应replicas set期望的状态;默认kubeadm安装情况下-leader-elect参数已经设置为true,保证master集群中只有一个kube-controller-manager处于活跃状态;
    kubelet: kubernetes node上的 agent,负责与node上的docker engine打交道;
    kube-proxy: 每个node上一个,负责service vip到endpoint pod的流量转发,原理是通过设置iptables规则实现

    负载均衡说明

    haproxy: 主要用于apiserver负载均衡
    keepalived: 主要用于apiserver高可用。
    haproxy+keepalived主要功能就是实现高可用状态的负载均衡。首先通过keepalived生成一个虚地址VIP(主机点宕机后漂移到其他机器,VIP在哪台机器上,就和本地ip地址一样,都代表本机,共用同网卡,共用本地服务service,本地接口socket),然后当访问VIP:PORT再通过haproxy负载至后端的实际端口RIP:6443,即真正的apiserver服务.

  4. 准备工作

    1、安装docker

    ​ 参考

    2、修改内核参数

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

    3、关闭Swap

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

    4、开启ipvs

    需要开启的模块是ip_vsip_vs_rrip_vs_wrrip_vs_shnf_conntrack_ipv4检查有没有开启cut -f1 -d " "  /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4没有的话,使用以下命令加载modprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4

    5、禁用selinux,关闭防火墙

    关闭selinuxsetenforce 0sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux关闭防火墙systemctl stop firewall.servicesystemctl disable firewall.service

    6、开启免密,检查网络,dns,hosts,ntp是否正常

    开启免密[master1]ssh-kengen [master1]ssh-copy-id root@hosts编辑hostsvim /etc/hosts开启ntp同步systemctl start ntpd.servicesystemctl enable ntpd.service
  5. 安装步骤

    一、安装haproxy和keepalived来创建一个负载均衡器。

    1、安装haproxy

   分发安装haproxy(所有master节点)   for i in master1 master2 master3; do ssh  root@$i  "yum install haproxy ";done   配置haproxy文件(所有master节点)   cat  /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           #后端服务器,也就是说访问192.168.255.140:8443会将请求转发到后端的三台,这样就实现了负载均衡       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   分发配置文件   for i in master1 master2 master3; do scp  /etc/haproxy/haproxy.cfg   root@$i:/etc/haproxy/haproxy.cfg;done   重启服务器   systemctl daemon-reload && systemctl restart haproxy && systemctl haproxy
2、安装keepalived
   分发安装haproxy(所有master节点)   for i in master1 master2 master3; do ssh  root@$i  "yum install keepalived ";done   配置keepalived文件(所有master节点)   cat  /etc/keepalived/keepalived.conf   global_defs {      notification_email {        acassen@firewall.loc        failover@firewall.loc        sysadmin@firewall.loc      }      notification_email_from Alexandre.Cassen@firewall.loc #表示发送通知邮件时邮件源地址是谁      smtp_server 192.168.200.1 #表示发送email时使用的smtp服务器地址      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         #备服务器上改为BACKUP       interface ens160       #改为自己的接口       virtual_router_id 51   # VRID 不可更改       priority 100         #备服务器上改为小于100的数字,90,80       advert_int 1       authentication {           auth_type PASS           auth_pass 1111       }       virtual_ipaddress {           192.168.14.142          #虚拟vip,自己设定       }   }   EOF   keepalived配置不太一样,要求修改后分发。   重启服务器   systemctl daemon-reload && systemctl restart keepalived && systemctl keepalived
3、验证keepalived是否正常工作。
   登录主节点   ip a

二、安装 kubeadm, kubelet 和 kubectl

1、添加国内yum源

   cat < /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   查找相应版本软件   yum search --showduplicates kubeadm

3、在所有安装kubelet的节点上,将kubelet设置为开机启动

   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、通过代理转换镜像(命令行直接输入)(所有节点)

   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 国内镜像参考 https://kubernetes.feisky.xyz/fu-lu/mirrors

五、初始化master

1、初始化master,所有master算作控制平面节点

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_PORTcontrollerManager: {}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: ""  #子网类型,和插件有关  serviceSubnet: 10.96.0.0/12  #service地址设定scheduler: {}

​ 最终配置文件

   cat   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) 执行初始化

   kubeadm init    --config=kubeadm-config.yaml --experimental-upload-certs   #--pod-network-cidr=10.244.0.0/16 设置flannel子网地址访问   # --experimental-upload-certs标志用于将应在所有控制平面实例之间共享的证书上载到群集,主控制平面的证书被加密并在上传的kubeadm-certs sercert

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

   其他的master节点加入控制平面的命令   kubeadm join 192.168.14.142:8443 --token g9up4e.wr2zvn1y0ld2u9c8     --discovery-token-ca-cert-hash sha256:d065d5c2bfce0f5e0f784ed18cb0989dd19542721969c12888f04496b03f121c     --experimental-control-plane --certificate-key ddad01f830084f0dd4a9f89e914020cf1001aa31f4550cf5fccce9bad2d6d599   node节点加入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 的权限

      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节点加入控制平面的命令   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  : --discovery-token-ca-cert-hash sha256: --experimental-control-plane --certificate-key cert  work节点重新加入集群的方法  kubeadm join --token  : --discovery-token-ca-cert-hash sha256:

4、检查三台master是否初始化成功

   kubectl get nodes 

六、 将worker节点加入集群

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

七、安装网络插件Flannel(主节点运行即可)

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

八、查看集群状态

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

参考链接:

kubeadm高可用安装kubernetes v1.14.3

通过kubeadm创建单个集群

通过kubeadm创建高可用集群

通过kubeadm配置集群中的每个kubelet

后续继续补充,mark!

集群 节点 配置 控制 状态 服务 命令 地址 版本 平面 文件 服务器 证书 镜像 生成 均衡 主机 端口 组件 参考 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 浙江超级服务器 .数据库技术的根本目的 数据库并行处理技术研究 学软件开发还是学软件测试 苏州高新区对日软件开发公司 计算机网络技术 简历 服务器 io 性能 亳州市网络安全和信息化工作会议 剑网三最新服务器是哪个 大连软件开发电话 软件开发中重要的名词 网络安全手抄报复杂又好看 网络安全研究创新点子 软件开发投标书收费 数据库id自增长删除后 企业网络安全架构实验 网络安全水抄报 云南小粒咖啡数据库 西安电子软件开发 华师大互联网科技有限公司 济南职业学院网络技术技能考试 网络安全标准体系 京东计算机网络技术的使用情况 手机版我的世界战墙服务器 广西信息化网络安全工程包括什么 静安区海航软件开发质量保障 远程办公需要提高网络安全要求 餐饮服务器维修 七日杀链接服务器组件有问题 内蒙古软件开发培训哪个好
0