使用kubeadm搭建高可用集群-k8s相关组件及1.16版本的安装部署

本文通过kubeadm详细介绍如何搭建一个高可用的kubernetes 1.16.3集群,包括master和node组件的部署,以及集群的扩展和缩容,使用了keepalived和haproxy实现master的高可用。
摘要由CSDN通过智能技术生成

 

本文是向大家分享k8s相关组件及1.16版本的安装部署,它能够让大家初步了解k8s核心组件的原理及k8s的相关优势,有兴趣的同学可以部署安装下。


什么是kubernetes

  1. kubernetes是Google 开源的容器集群管理系统,是大规模容器应用编排系统,是在众多容器之上的又一抽象层
  2. 它支持自动部署,大规模可伸缩,应用容器化管理
  3. kubernetes是Google 开源的一个容器编排引擎,它支持自动化部署,大规模可伸缩,应用容器化管理
  4. 在kubernetes中部署应用是一件容易的事,因其有着弹性伸缩,横向扩展的优势并同时提供负载均衡能力以及良好的自愈性(自动部署,自动重启,自动复制,自动扩展等)

主要功能包括:

  • 基于容器的应用部署,维护和滚动升级
  • 负载均衡和服务发现
  • 跨机器和跨地区的集群调度
  • 自动伸缩
  • 无状态服务和有状态服务
  • 插件机制保证扩展性

kubernetes特点:

  • 可移植性:支持公有云,私有云,混合云,多重云
  • 可扩展性:模块化,插件化,可挂载,可组合
  • 自动化:自动部署,自动重启,自动复制,自动扩展/伸缩

kubernetes 核心组件:

1. master组件

  • kube-apiserver 提供了资源操作的唯一入口,任何资源的请求/调用操作都是通过它,并提供认证,授权,访问控制,API 注册和发现机制
  • kube -controller-manager 集群控制器,负责维护集群的状态,比如故障检测,自动扩展,滚动更新等
  • kube- scheduler 负责资源的调度,按照预定的调度策略将pod调度到相应的机器上,为pod选择一个node
  • etcd 保存了整个集群的状态信息,分布式键值对(k/v)存储服务
  • core DNS 第三方插件,提供集群的dns服务,实现服务注册和服务发现,为service提供dns记录

2.Node 组件

  • kubelet 负责维护容器的生命周期,同时也负责volume(CVI )和网络(CNI )的管理
  • kube- proxy 负责为service提供cluster内部的服务发现和负载均衡(负责将后端pod访问规则具体为节点上的iptables/ipvs规则)
  • container runtime (docker)负责镜像管理以及pod和容器的真正运行(CRI)

1、部署环境说明

本文通过kubeadm搭建一个高可用的k8s集群,kubeadm可以帮助我们快速的搭建k8s集群,高可用主要体现在对master节点组件及etcd存储的高可用,文中使用到的服务器ip及角色对应如下:

版本号: v1.16.3

2、集群架构及部署准备工作

2.1、集群架构说明

高可用主要体现在master相关组件及etcd,master中apiserver是集群的入口,搭建三个master通过keepalived提供一个vip实现高可用,并且添加haproxy来为apiserver提供反向代理的作用,这样来自haproxy的所有请求都将轮询转发到后端的master节点上。如果仅仅使用keepalived,当集群正常工作时,所有流量还是会到具有vip的那台master上,因此加上了haproxy使整个集群的master都能参与进来,集群的健壮性更强。对应架构图如下所示:

2.2、修改hostshostname

所有节点修改主机名和hosts文件,文件内容如下

172.30.66.222    master.k8s.io   k8s-vip
172.30.66.190    master01.k8s.io k8s-master-01
172.30.66.191    master02.k8s.io k8s-master-02
172.30.66.192    master03.k8s.io k8s-master-03
172.30.66.193    node01.k8s.io   k8s-node-01
172.30.66.194    node02.k8s.io   k8s-node-02
172.30.66.195    node03.k8s.io   k8s-node-03

2.3、其他准备

所有节点操作

· 主机时间同步时间同步可以通过chrony或者ntp来实现,这里不再赘述

· 关闭防火墙关闭centos7自带的firewalld防火墙服务

· 关闭selinux

· 禁用swap kubeadm会检查当前主机是否禁用了swap,如果启动了swap将导致安装不能正常进行,所以需要禁用所有的swap。

# 临时关闭
# swapoff -a && sysctl -w vm.swappiness=0
# 永久关闭,在文件中添加注释
# vim /etc/fstab
...
UUID=7bf41652-e6e9-415c-8dd9-e112641b220e /boot                   xfs     defaults        00
#/dev/mapper/centos-swap swap                    swap    defaults        00
# 或者利用sed命令完事儿
# sed -ri '/^[^#]*swap/s@^@#@'/etc/fstab

· 设置系统其它参数

开启路由转发

vim /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward =1
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
# modprobe br_netfilter
# sysctl -p /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward =1
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1

设置资源配置文件

# echo "* soft nofile 65536">>/etc/security/limits.conf
# echo "* hard nofile 65536">>/etc/security/limits.conf
# echo "* soft nproc 65536"  >>/etc/security/limits.conf
# echo "* hard nproc 65536"  >>/etc/security/limits.conf
# echo "* soft  memlock  unlimited"  >>/etc/security/limits.conf
# echo "* hard  memlock  unlimited"  >>/etc/security/limits.conf

· 安装相关包

# yum install -y conntrack-tools libseccomp libtool-ltdl

3、部署keepalived

在三台master操作

3.1、安装

# yum install -y keepalived

3.2、配置

默认的keepalived配置较复杂,这里用更为简明的方式进行配置,另外的两台master配置和上面类似,只需要修改对应的state配置为BACKUP,priority权重值不同即可,配置中的其他字段这里不做说明。

k8s-master-01的配置:

cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
router_id k8s
}

vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 3
weight -2
fall 10
rise 2
}

vrrp_instance VI_1 {
state MASTER
interfaceens160
virtual_router_id 51
priority 250
advert_int 1
authentication {
auth_type PASS
auth_pass ceb1b3ec013d66163d6ab
}
virtual_ipaddress {
172.30.66.222
}
track_script {
check_haproxy
}

}
EOF

k8s-master-02的配置:

cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
router_id k8s
}

vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 3
weight -2
fall 10
rise 2
}

vrrp_instance VI_1 {
state BACKUP
interfaceens160
virtual_router_id 51
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass ceb1b3ec013d66163d6ab
}
virtual_ipaddress {
172.30.66.222
}
   track_script {
check_haproxy
}

}
EOF

k8s-master-03的配置:

cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
router_id k8s
}

vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 3
weight -2
fall 10
rise 2
}

vrrp_instance VI_1 {
state BACKUP
interfaceens160
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass ceb1b3ec013d66163d6ab
}
virtual_ipaddress {
172.30.66.222
}
   track_script {
check_haproxy
}

}
EOF

3.3、启动和检查

在三台master节点都启动服务

# 设置开机启动
# systemctl enable keepalived.service
# 启动keepalived
# systemctl start keepalived.service
# 查看启动状态
# systemctl status keepalived.service

启动后查看k8s-master-01的网卡信息

[root@k8s-master-01~]# ip a s ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:50:56:b7:2c:71 brd ff:ff:ff:ff:ff:ff
inet 172.30.66.190/24 brd 172.30.66.255 scope global ens160
valid_lft forever preferred_lft forever
inet 172.30.66.222/32 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::923a:1078:ee79:b965/64 scope link 
valid_lft forever preferred_lft forever    inet6 

尝试停掉k8s-master-01的keepalived服务,查看vip是否能漂移到其他的master,并且重新启动k8s-master-01的keepalived服务,查看vip是否能正常漂移回来,证明配置没有问题。

4、部署haproxy

在三台master操作

4.1、安装

# yum install -y haproxy

4.2、配置

三台master节点的配置均相同,配置中声明了后端代理的三个master节点服务器,指定了haproxy运行的端口为16443等,因此16443端口为集群的入口,其他的配置不做赘述。

cat >/etc/haproxy/haproxy.cfg <<EOF
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in/var/log/haproxy.log you will
# need to:
# 1) configure syslog to accept network log events.  This is done
#    by adding the '-r' option to the SYSLOGD_OPTIONSin
#    /etc/sysconfig/syslog
# 2) configure local2 events to go to the /var/log/haproxy.log
#   file. A line like the following can be added to
#   /etc/sysconfig/syslog
#
#    local2.*                       /var/log/haproxy.log
#
log         127.0.0.1 local2

chroot      /var/lib/haproxy
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
daemon 

# turn on stats unix socket
stats socket /var/lib/haproxy/stats
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值