一,安装环境

1,硬件要求

内存:2GB或更多RAM

CPU: 2核CPU或更多CPU

硬盘: 30GB或更多

2,本次环境说明:

操作系统:CentOS 7.9

内核版本:3.10.0-1160

虚拟机

IP地址

节点

k8s-master

192.168.1.20

master

k8s-master2

192.168.1.25

master

k8s-node-2

192.168.1.26

node

二,环境前期准备工作(三台机器同步执行)

1,防火墙关闭

systemctl stop firewalld && systemctl disable firewalld

2,selinux关闭

sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0

3,关闭swap

sed -ri 's/.*swap.*/#&/' /etc/fstab

4,设置主机名

在三台主机分别执行:

hostnamectl set-hostname k8s-master && bash

hostnamectl set-hostname k8s-master2 && bash

hostnamectl set-hostname k8s-node-2 && bash

5,修改hosts文件

添加三台主机的地址及主机名

6,开启包转发功能和修改内核参数

modprobe br_netfilter

echo "modprobe br_netfilter" >> /etc/profile

cat > /etc/sysctl.d/k8s.conf <<EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

EOF

7,配置生效

sysctl -p /etc/sysctl.d/k8s.conf

8,时间同步

yum install ntpdate -y

ntpdate cn.pool.ntp.org

echo "* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org >> /tmp/tmp.txt" >> /var/spool/cron/root

service crond restart

9,安装基础软件包

yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm openssh-clients

10,安装docker

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

yum install -y docker-ce-20.10.7-3.el7

systemctl start docker && systemctl enable docker

cat > /etc/docker/daemon.json <<EOF

{

"registry-mirrors": ["https://k73dxl89.mirror.aliyuncs.com"],

"exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

systemctl daemon-reload && systemctl restart docker

三,k8s安装

1,备份原repo文件,替换阿里云yum源(两台master节点上执行)

mkdir /root/repo.bak

mv /etc/yum.repos.d/* /root/repo.bak/

cd /etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

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

cat > /etc/yum.repos.d/kubernetes.repo <<EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=0

EOF

yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6

systemctl enable kubelet

2,创建kubeadm-config.yaml文件(k8s-master节点上执行)

apiVersion: kubeadm.k8s.io/v1beta2

kind: ClusterConfiguration

kubernetesVersion: v1.20.6

controlPlaneEndpoint: 192.168.1.27:16443 #vip地址

imageRepository: registry.aliyuncs.com/google_containers

apiServer:

certSANs:

- 192.168.1.20

- 192.168.1.25

- 192.168.1.26

- 192.168.1.27 #keepalived虚拟地址

networking:

podSubnet: 10.244.0.0/16

serviceSubnet: 10.96.0.0/16

---

apiVersion: kubeproxy.config.k8s.io/v1alpha1

kind: KubeProxyConfiguration

mode: ipvs #选择ipvs模式,性能更佳

3,k8s-master主机上执行命令:

kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=SystemVerification

看到此段证明安装成功;

根据提示执行以下命令:

mkdir -p $HOME/.kube

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

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

4,添加k8s-master2节点(k8s-master2节点上执行)

在k8s-master2节点创建证书存放目录

cd /root && mkdir -p /etc/kubernetes/pki/etcd &&mkdir -p ~/.kube/

在k8s-master节点复制证书到k8s-master2节点

scp /etc/kubernetes/pki/ca.crt k8s-master2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/ca.key k8s-master2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/sa.key k8s-master2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/sa.pub k8s-master2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-master2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/front-proxy-ca.key k8s-master2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/etcd/ca.crt k8s-master2:/etc/kubernetes/pki/etcd/

scp /etc/kubernetes/pki/etcd/ca.key k8s-master2:/etc/kubernetes/pki/etcd/

在k8s-master2节点上执行kubeadm join命令加入控制节点

kubeadm join 192.168.1.27:16443 --token e7pewl.w1ausg0dryxnl74x \

--discovery-token-ca-cert-hash sha256:5ec8b6c00e2fe41047044691962050068e8dd9022ee17a28fbb0120fd5b2359e \

--control-plane --ignore-preflight-errors=SystemVerification

查看节点状态

kubectl get nodes -owide

5,添加node工作节点(node节点上执行)

kubeadm join 192.168.1.27:16443 --token e7pewl.w1ausg0dryxnl74x \

--discovery-token-ca-cert-hash sha256:5ec8b6c00e2fe41047044691962050068e8dd9022ee17a28fbb0120fd5b2359e

6,安装calico.yaml网络组件

wget -O https://docs.projectcalico.org/manifests/calico.yaml

kubectl apply -f calico.yaml

kubectl get nodes -owide

四,keepalive+nginx实现k8s apiserver节点高可用(master节点上操作)

1,安装keepalived+nginx

yum install nginx keepalived -y

vim /etc/nginx/nginx.conf

# 四层负载均衡,为两台Master apiserver组件提供负载均衡

stream {

log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';

access_log /var/log/nginx/k8s-access.log main;

upstream k8s-apiserver {

server 192.168.1.20:6443; # Master1 APISERVER IP:PORT

server 192.168.1.25:6443; # Master2 APISERVER IP:PORT

}

server {

listen 16443; # 由于nginx与master节点复用,这个监听端口不能是6443,否则会

冲突

proxy_pass k8s-apiserver;

}

}

2,配置主keepalived

cat > /etc/keepalived/keepalived.conf <<EOF

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id NGINX_MASTER

}

vrrp_script check_nginx {

script "/etc/keepalived/check_nginx.sh"

}

vrrp_instance VI_1 {

state MASTER

interface ens33 # 修改为实际网卡名

virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的

priority 100 # 优先级,备服务器设置 90

advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒

authentication {

auth_type PASS

auth_pass 1111

}

# 虚拟IP

virtual_ipaddress {

192.168.1.27/24

}

track_script {

check_nginx

}

}

EOF

3,配置备keepalived

cat > /etc/keepalived/keepalived.conf <<EOF

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id NGINX_MASTER

}

vrrp_script check_nginx {

script "/etc/keepalived/check_nginx.sh"

}

vrrp_instance VI_1 {

state BACKUP

interface ens33 # 修改为实际网卡名

virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的

priority 90 # 优先级,备服务器设置 90

advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒

authentication {

auth_type PASS

auth_pass 1111

}

# 虚拟IP

virtual_ipaddress {

192.168.1.27/24

}

track_script {

check_nginx

}

}

EOF

4,nginx工作状态检查脚本

cat > /etc/keepalived/check_nginx.sh <<EOF

#!/bin/bash

counter=$(ps -ef |grep nginx | grep sbin | egrep -cv "grep|$$" )

if [ $counter -eq 0 ]; then

service nginx start

sleep 2

counter=$(ps -ef |grep nginx | grep sbin | egrep -cv "grep|$$" )

if [ $counter -eq 0 ]; then

service keepalived stop

fi

fi

EOF

chmod +x /etc/keepalived/check_nginx.sh

#启动服务

systemctl daemon-reload

yum install nginx-mod-stream -y

systemctl start nginx

systemctl start keepalived

systemctl enable nginx keepalived

5,查看vip是否绑定

ip addr

五,愿为江水,与君相逢

到此k8s master高可用集群就安装完成了,想要安装三个master节点的根据上面安装nginx+keepalived和执行kubeadm join添加即可

如有问题或遗漏请留言指正。

谨以此文记录我们学习kubernetes的经历,希望能认识更多志同道合的朋友,一起分享遇到的问题和学习经验。

【kubernetes】k8s v1.20高可用多master节点部署相关推荐

  1. 基于kubeadm快速部署kubernetes K8S V1.17.4集群-无坑完整版

    基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源 主机配置规划 服务器名称(hostname) ...

  2. 最新版Kubernetes(k8s)-v1.22.3版本高可用集群

    目录 一.环境准备 二.安装Docker 三.配置环境变量 四.所有master节点安装keepalived和haproxy服务 五.部署集群 六.部署k8s的dashboard 本文采用的是etcd ...

  3. k8s高可用集群搭建部署

    简介 k8s普通搭建出来只是单master节点,如果该节点挂掉,则整个集群都无法调度,K8s高可用集群是用多个master节点加负载均衡节点组成,外层再接高可用分布式存储集群例如ceph集群,实现计算 ...

  4. 高可用网络架构的部署

    2 案例2:部署LNMP动态网站 2.1 问题 部署LNMP动态网站,实现以下目标: 安装LNMP平台相关软件 配置Nginx实现动静分离 配置数据库,创建账户与密码 上线Wordpress代码 使用 ...

  5. kubeadm安装kubernetes之MASTER节点部署

    kubernetes MASTER节点部署 1.初始化环境,基础组件安装 #各个节点配置主机名 hostnamectl set-hostname k8smaster #关闭防火墙 systemctl ...

  6. 【kubernetes系列】master节点部署Pod处于Pending状态

    目录 一.绪论 二.情景再现 三.解决方案 一.绪论 产生问题的原因是master节点部署Pod,导致无法启动: 问题描述: Warning FailedScheduling 40s (x28 ove ...

  7. 【kubernetes】k8s集群高可用部署安装和概念详细说明【含离线部署】,客户端连接haproxy访问高可用流程

    文章目录 说明 高可用原理 K8S多master节点架构图 测试环境说明 部署高可用 安装包准备[可选] 高可用架构说明 配置haproxy 说明[必看] 安装haproxy 编辑配置文件 配置etc ...

  8. 一行命令快速安装Kubernetes(V1.18)高可用集群

    一条命令部署 Kubernetes 高可用集群 

  9. K8S高可用集群架构部署 dashborad插件部署 Nginx实现动静分离 K8S在线升级

    K8S官方文档 注意:该集群每个master节点都默认由kubeadm生成了etcd容器,组成etcd集群.正常使用集群,etcd的集群不能超过一半为down状态. docker的namespace: ...

最新文章

  1. UOJ #310 黎明前的巧克力 (FWT)
  2. PCB中加入logo
  3. 谈谈C#中的三个关键词new , virtual , override
  4. C++静态库与动态库(转)
  5. Web前端优化,提高加载速度
  6. 剑指offer面试题[23]-从上往下打印二叉树(按层序打印)
  7. java ssm 答辩_基于SSM的网上书店商城设计现场答辩记录
  8. HTML制作个简单的网页
  9. IOS网络编程常用的代码
  10. EMD+EEMD+CEEMD+CEEMDAN分解论文代码复现
  11. win10 共享文件夹 nplayer查看共享文件
  12. discuz制作自己的门户列表模板
  13. Dart 实现字符串 进行 gbk编码的 urlencode
  14. 利用canvas和vue_qrcodes生成带二维码头像的海报(一)
  15. 自动化情侣微信早安信息定时推送
  16. 14种旅游消费陷阱警示录
  17. MySQL 必知必会系列(一)
  18. 公司口碑及待遇评价的网站
  19. 响应式onresize监听窗口大小
  20. 语音质量指标Python(PESQ、STOI、SegSNR、LLR、WSS、CD、LSD、CSIG、CBAK、COVL)

热门文章

  1. 决策树的可视化及通过决策树筛选变量
  2. Kaggle竞赛Corporación Favorita Grocery Sales Forecasting方案总结
  3. 模拟点击 collections
  4. [转载]PID由入门到精通
  5. 基于at89c52的矿井空气检测仪
  6. 软件工程 - 3、项目开发
  7. JDK8 API 英文版
  8. 大蒜怎么做好吃 这几种做法很美味
  9. WPS批量打印的技巧
  10. 跳来跳去,最后竟成了“跳梁小丑”!