构建Kubernetes高可用集群

1. 统一环境配置(构建Kubernetes基础系统镜像防止后面逐台安装)

此处为加固印象,本人重新构建,技术嘛,多动手

  • 节点配置信息规划
节点 IP 系统配置信息 配置 磁盘
kubernetes-master-01 192.168.141.150 Master Ubuntu Server 18.04 2核2G 20G
kubernetes-master-02 192.168.141.151 Master Ubuntu Server 18.04 2核2G 20G
kubernetes-master-03 192.168.141.152 Master Ubuntu Server 18.04 2核2G 20G
kubernetes-node-01 192.168.141.160 Node Ubuntu Server 18.04 2核4G 20G
kubernetes-node-02 192.168.141.161 Node Ubuntu Server 18.04 2核4G 20G
kubernetes-node-03 192.168.141.162 Node Ubuntu Server 18.04 2核4G 20G

①. 操作系统的配置项

  • 关闭交换空间
    swapoff -a
  • 避免开机启动交换空间
    vi /etc/fstab
    注释 swap 开头的行
  • 关闭防火墙
    ufw disable
  • 配置 DNS
    vi /etc/systemd/resolved.conf
    取消 DNS 行注释,并增加 DNS 配置如:114.114.114.114,修改后重启下计算机
    reboot

②. 安装 Docker
见之前博客:构建kubernetes基础系统镜像-安装Docker

③. 配置 Docker 加速器
见之前博客:构建kubernetes基础系统镜像-安装Docker(国内镜像加速器可能会很卡,请替换成你自己阿里云镜像加速器)

④. 安装 kubeadm,kubelet,kubectl
构建kubernetes基础系统镜像-基于kubeadm安装kubernetes环境

⑤. 同步时间

  • 设置时区
    dpkg-reconfigure tzdata
    选择 Asia(亚洲)
    选择 Shanghai(上海)
  • 时间同步
    • 安装 ntpdate
      apt-get install ntpdate
    • 设置系统时间与网络时间同步(cn.pool.ntp.org 位于中国的公共 NTP 服务器)
      ntpdate cn.pool.ntp.org
    • 将系统时间写入硬件时间
      hwclock –systohc
  • 确认时间
    date
    自行对照与系统时间是否一致

⑥. 配置 IPVS

  • 安装系统工具
    apt-get install -y ipset ipvsadm
  • 配置并加载 IPVS 模块
    mkdir -p /etc/sysconfig/modules/
    vim /etc/sysconfig/modules/ipvs.modules
  • 输入如下内容
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
  • 4.执行脚本,注意:如果系统重启则需要重新运行该脚本
    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    设置脚本权限,执行脚本,查看信息
    执行脚本输出如下:
    image.png

⑦. 配置内核参数

  • 配置参数
    vim /etc/sysctl.d/k8s.conf
  • 输入如下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
  • 应用参数
    sysctl –system
  • 4.应用参数输出如下(找到 Applying /etc/sysctl.d/k8s.conf 开头的日志)


    image.png

⑧. 修改 cloud.cfg
vim /etc/cloud/cloud.cfg
该配置默认为 false,修改为 true 即可

preserve_hostname: true

以上配置完成后作为Kubernetes基础系统镜像,以此为基础复制其他集群


2. 单独节点配置

为 Master 和 Node 节点单独配置对应的 IP 和 主机名

①. 配置 IP

  • 编辑配置文件
    vim /etc/netplan/50-cloud-init.yaml
    image.png
  • 配置生效
    netplan apply

②. 配置主机名

  • 修改主机名
    hostnamectl set-hostname kubernetes-master-01
  • 配置 hosts(命令)
cat >> /etc/hosts << EOF
> 192.168.2.150 kubernetes-master-01
> EOF

3. Master节点安装 HAProxy + Keepalived

①. 创建 HAProxy 启动脚本(kubernetes-master-01 执行)
mkdir -p /usr/local/kubernetes/lb
vi /usr/local/kubernetes/lb/start-haproxy.sh

  • 输入内容如下
#!/bin/bash
# 修改为你自己的 Master 地址
MasterIP1=192.168.141.150
MasterIP2=192.168.141.151
MasterIP3=192.168.141.152
# 这是 kube-apiserver 默认端口,不用修改
MasterPort=6443

# 容器将 HAProxy 的 6444 端口暴露出去
docker run -d --restart=always --name HAProxy-K8S -p 6444:6444 \
        -e MasterIP1=$MasterIP1 \
        -e MasterIP2=$MasterIP2 \
        -e MasterIP3=$MasterIP3 \
        -e MasterPort=$MasterPort \
        wise2c/haproxy-k8s
  • 设置权限
    chmod +x start-haproxy.sh

②. 创建 Keepalived 启动脚本(kubernetes-master-01 执行)
mkdir -p /usr/local/kubernetes/lb
vi /usr/local/kubernetes/lb/start-keepalived.sh

  • 输入内容如下
#!/bin/bash
# 修改为你自己的虚拟 IP 地址
VIRTUAL_IP=192.168.141.200
# 虚拟网卡设备名
INTERFACE=ens33
# 虚拟网卡的子网掩码
NETMASK_BIT=24
# HAProxy 暴露端口,内部指向 kube-apiserver 的 6443 端口
CHECK_PORT=6444
# 路由标识符
RID=10
# 虚拟路由标识符
VRID=160
# IPV4 多播地址,默认 224.0.0.18
MCAST_GROUP=224.0.0.18

docker run -itd --restart=always --name=Keepalived-K8S \
        --net=host --cap-add=NET_ADMIN \
        -e VIRTUAL_IP=$VIRTUAL_IP \
        -e INTERFACE=$INTERFACE \
        -e CHECK_PORT=$CHECK_PORT \
        -e RID=$RID \
        -e VRID=$VRID \
        -e NETMASK_BIT=$NETMASK_BIT \
        -e MCAST_GROUP=$MCAST_GROUP \
        wise2c/keepalived-k8s

VIRTUAL_IP:可为自定义网段的任意ip,未被占用即可,此处ip指代下文中的VIP

  • 设置权限
    chmod +x start-keepalived.sh

③. 复制脚本到其它 Master 地址

  • 分别在 kubernetes-master-02 和 kubernetes-master-03 执行创建工作目录命令
    mkdir -p /usr/local/kubernetes/lb
  • 将 kubernetes-master-01 中的脚本拷贝至其它 Master
    scp start-haproxy.sh start-keepalived.sh 192.168.2.151:/usr/local/kubernetes/lb
    scp start-haproxy.sh start-keepalived.sh 192.168.2.152:/usr/local/kubernetes/lb
    image.png

    如上输入yes,并输入对应服务器的密码
  • 分别在 3 个 Master 中启动容器(执行脚本)
    sh /usr/local/kubernetes/lb/start-haproxy.sh && sh /usr/local/kubernetes/lb/start-keepalived.sh
  • 查看容器运行情况和网卡绑定的虚拟 IP
    image.png

    image.png

    特别注意:Keepalived 会对 HAProxy 监听的 6444 端口进行检测,如果检测失败即认定本机 HAProxy 进程异常,会将 VIP 漂移到其他节点,所以无论本机 Keepalived 容器异常或 HAProxy 容器异常都会导致 VIP 漂移到其他节点

4. 部署 Kubernetes 集群

初始化 Master
①. 创建工作目录
mkdir -p /usr/local/kubernetes/cluster
导出配置文件到工作目录
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
②. 修改配置文件,如图:

image.png

在1.19版本之前,kubeadm部署方式启用ipvs模式时,初始化配置文件需要添加以下内容:
image.png

之后如下:
image.png

见配置项:https://kubernetes.io/docs/reference/config-api/kube-proxy-config.v1alpha1/
③. kubeadm 初始化
kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
image.png

配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
验证是否成功
kubectl get node
image.png

④. 安装网络插件
参考官方文档安装:https://docs.projectcalico.org/getting-started/kubernetes/quickstart
下载文件,方便更改
wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml
更改默认的网段,前面有说明
vim calico.yaml
将 192.168.0.0/16 修改为 10.244.0.0/16
命令快速查找
显示行号::set number
查找字符:/要查找的字符,输入小写 n 下一个匹配项,输入大写 N 上一个匹配项
安装(Master 节点操作)
kubectl apply -f calico.yaml
image.png

确认安装是否成功
watch kubectl get pods --all-namespaces
需要等待所有状态为 Running,注意时间可能较久,3 - 5 分钟的样子
⑤. 加入master节点

  • 查看kubeadm-init.log文件,获取join操作命令
    cat /usr/local/kubernetes/cluster/kubeadm-init.log
  • kubernetes-master-02和kubernetes-master-03分别执行


    image.png

    ⑥. 6.加入node节点
    kubernetes-node-01,kubernetes-node-02,kubernetes-node-03分别执行


    image.png

根据次版本核配置,本人已搭建集群与高可用集群环境,如遇到相关问题,未在文章中说明,可联系本人
谢谢大家关注,点个赞呗~
如需转载请标明出处,谢谢~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容