K8s高可用集群部署(四)

k8s官网高可用部署参考:https://kubernetes.io/docs/setup/independent/high-availability/

                目录

一 ,k8s高可用集群搭建原理

二 ,k8s高可用搭建步骤


                                                一, k8s高可用集群搭建原理
 在k8s集群中,pod节点挂掉还不用担心,它会有恢复,但是如果是单节点master挂掉了,那情况就危险了,会导致
集群全部挂点,所以,需要给k8s集群做高可用,消除master的单点故障

对于k8s,要做高可用,要考虑一下几点
在kubernetes-1.15.以后的版本有些改变,如下:
****Apiserver****Apiserver****Apiserver****                                       (如果有三个,并不会影响与etcd的沟通)   
        ****ETCD****ETCD****ETCD****                                                 (当配置多主集群时,etcd会扩展)
****controller-manager****controller-manager****controller-manager         (在高可用集群中,是休眠状态,就是一个运行,其他休眠)
****scheduler****scheduler****scheduler****                                                (在高可用集群中,是休眠状态,就是一个运行,其他休眠)
                      ****kubelet****                                                                     (不需要做高可用)
                         ****Proxy****                                                                      (不需要做高可用)



上图就是要搭建的集群架构

                                    二 , k8s高可用搭建步骤

搭建目录:

注:一定要慢慢来,按步骤做,不然出差不好找问题

  • 集群的准备
  • 集群各各节点初始化
  • 安装docker-ce
  • kubeadm安装搭建主从
  • 加入主节点,和从节点
  • ETCD集群查看
  • 部署网络Flannfly(集群内)

 (1)                                                                                                  集群的准备

系      统 主  机   名 I P
Centos7.6 matser01 192.168.30.145
Centos7.6 master02 192.168.30.144
Centos7.6 master03 192.168.30.143

                                                                                           三台master节点做高可用

要求:三台master的cpu虚拟核数要>=4个  |    三台master节点机器要可以上网,可以相互连通。(确保每一台master都是一样的配置)


(2)                                                                                           集群各各节点初始化

 这里初始化参看我的笔记部署k8s集群(二)

这里初始化最后有一点不同

部署k8s集群(二)   中部署到升级完内核后,重启reboor后,需要关闭NUMA

如图:(这里是一定要是重启完后做)

其中#vim grub 修改的是:"GRUB_CMDLINE_LINUX" 这一行最后添加numa=off (关闭的意思)添加完后,是这样的:GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off"  (每个人做可能quiet前不同,只要在最后添加即可)

 按图中步骤做完后,要再次重启机器*****


 (3)                                                                                             安装docker-ce

*****所有节点都安装docker-ce*****

安装需要的依赖包

#yum install -y yum-utils   device-mapper-persistent-data lvm2

下载docker-ce源

#yum-config-manager     --add-repo      http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新软件包并安装docker-ce

#yum update -y && yum install -y docker-ce

创建docker目录

#mkdir /etc/docker

#mkdir -p /etc/systemd/system/docker.service.d

*上传文件daemon.json 到/etc/docker/   (如图:)

启动docker-ce并开机自启

#systemctl start docker && systemctl enable docker


(4)                                                                                      kubeadm安装搭建主从

开始搭建前,先部署调度

部署调度(所有节点都要做)
#modprobe br_netfilter
#cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
#chmod 755 /etc/sysconfig/modules/ && bash /etc/sysconfig/modules/ipvs.modules
#lsmod | grep -e ip_vs -e nf_conntrack_ipv4


调度做完,开始部署kubeadm

这里每个节点都采用的是睿云的镜像包,下载以下包 如图

 导入docker

#docker load -i haproxy.tar

#dcoker load -i keepalived.tar

解压

#tar zxvf kubeadm-basic.images.tar .gz

修改load-images.sh

如图:通过pwd这里先找到解压后的路径,并复制粘贴到load-images.sh中“cd”和“ls” 这两行

 

 完成后,对这个文件加权限

#chmod a+x load-images.sh

加完权限后,开始执行权限

#./load-images.sh

每个节点都做完以上操作后,解压start文件

#tar zxvf start.keep.tar.gz

#mv data /

#cd /data/lb/  

 这里的yaml文件是Kubeadm的配置文件,另外两个sh文件是启动脚本

进入etc目录下,有一个haproxy的文件,修改,再最后一行加入本负载节点IP与端口

保存退出后,修改start-haproxy,sh文件,如下图(修改前几行,加入节点IP)

 

 启动haproxy

#./start-haproxy.sh

查看一下是否成功监听

修改keepalived文件 如下图(定义一个VIP在第一行添加修改,第二行是当前网卡名)

 其他不做修改,保存退出即可

启动#./start-keepalived.sh

查看一下是否开启

#ip a


(4)                                                                加入主节点,和从节点

************以上做完后,就可以 创建集群了(开始安装kubeadm)

加入源

 #yum -y install kubeadm-1.15.1  kubectl-1.15.1  kubelet-1.15.1

#systemc  enable  kubelet.service

Kub,生成yaml文件 如图

#cd /usr/local/kubernetes/install

#kubeadm config print init-defaults > kubeadm-config.yaml

 修改kubeadm-config.yaml (红色为必要修改内容)

cat

*******************************************************************

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:2
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.30.145
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master01
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.30.140:6444"
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.15.1
networking:
  dnsDomain: cluster.local
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs

***********************************************************************************

修改完成后,可以初始化了

#kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs  |tee kubeadm-init.log

这里初始化完成后,跟以前单节点不一样,会多出一些信息,如图

 先按文件要求走三步,如图,

 #mkdir -p $HOME/.kube

#sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

#sudo chown $(id -u):$(id -g) $HOME/.kube/config

做完后,查看是否生效

#kubelct  get  node

 此时,一个节点就部署完成

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

加入其他主节点,要和这个节点安装的包要一致

首先在此节点上

#scp -r /data 192.168.30.144:/

#scp -r /data 192.168.30.143:/

导入docker

#docker load -i haproxy.tar

#dcoker load -i keepalived.tar

安装kubadm(跟上面一样)注意不要初始化,到改完配置文件即可

#systemctl  enable  kubelet.service 

最后,也是最重要一步:在主节点上找到Log文件,复制粘贴到其他节点并运行,如图

 这里注意,要添加的节点要做完三步后,再拷贝主节点的配置文件内容到本节点初始化如图

复制以下部分到其他要加入节点(192.168.30.144)

 此时,加入完成后,在主节点需改haproxy.cfg文件

 在最后加入节点IP(注意:这里最好是在节点部署都完成后,最后加入节点IP,如果是提前加,可能启动会识别不到,会报错)

 在第一台主机上重新做一下docker镜像

#docker ps -a 

#docker  rm -f HAProxy-K8S && bash  /data/lb/start-haproxy.sh

 然后把haproxy.cfg文件拷贝到要加入的节点机器,并也运行以上命令,如图

最后,查询是否加入成功

# kubectl get pod -n kube-system

 到这里基本上部署已经完成了,再加入节点和以上方法一样


(5)                                                                   ETCD集群查看

 查看状态:

#kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml

#kubectl get endpoints kube-scheduler --namespace=kube-system -o yaml


(6)                                                                  部署网络Flannfly(集群内)

部署网络:这里部署网络让每一个节点可以通网(方法和单机部署一样,都是部署Flannly)

#mkdir k8s-flannly

#cd  k8s-flannly

#wget  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#kubectl create -f kube-flannel.yml

*******在这里可能下载不稳定,做一下域名映射到ip*********

查询IP:https://site.ip138.com/raw.githubusercontent.com/

会出现出个IP,选择离我们最近的,目前最近的是中国香港 :   151.101.76.133

然后在/etc/hosts文件里加入:   151.101.76.133  raw.githubusercontent.com

保存退出后,再次尝试wget下载,就可以了

*******************************************************************

启动网络部署

#kubectl apply -f   kube-flannel.yml

查看是否运行成功

#kubectl get pod -n kube-system

#kubectl  get nodes   

 此刻网络状态便通了

原文地址:https://www.cnblogs.com/123456likun/p/13903163.html