一万年来谁著史,三千里外欲封侯。这篇文章主要讲述kubeadm 搭建多 master 高可用 K8S 集群(亲测)相关的知识,希望能为你提供帮助。
1.kubernetes 简介
kubernetes,简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制,是一个可移植、可扩展的、开源的容器管理平台。
?可移植:在 kubernetes 中部署的应用都是基于镜像的,镜像是可移植的,可以被多个环境使用,可以从一个环境迁移到另一个环境。不受操作系统限制。
可扩展:安装 k8s 的物理节点可以根据业务规模动态扩缩容、k8s 中的 pod 应用也可以实现自动扩缩容。
开源的:源代码已经公开了,有很多技术人员在开发维护,可以被用户免费使用。
Kubernetes 提供了应用程序的快速部署、升级和回滚的能力。
利用 service 可以实现服务注册、发现;
通过 kube-proxy 可以实现负载均衡;
通过 cordns 可实现域名解析;
通过 Ingress 可以实现七层负载均衡等功能;
可以对容器自动化部署、自动化扩缩容、跨主机管理等;
可以对代码进行灰度发布、金丝雀发布、蓝绿发布、滚动更新等;
具有完整的监控系统和日志收集平台,具有故障自恢复的能力。
2.Kubernetes 组件kubectl:管理 k8s 的命令行工具,可以操作 k8s 中的资源对象。
etcd: 是一个高可用的键值数据库,存储 k8s 的资源状态信息和网络信息的,etcd 中的数据变更
是通过 api server 进行的。
apiserver: 提供 k8s api,是整个系统的对外接口,提供资源操作的唯一入口,供客户端和其它组
件调用,提供了 k8s 各类资源对象(pod,deployment,Service 等)的增删改查,是整个系统的数据总
线和数据中心,并提供认证、授权、访问控制、API 注册和发现等机制,并将操作对象持久化到 etcd
中。相当于“营业厅”。
scheduler:负责 k8s 集群中 pod 的调度的 , scheduler 通过与 apiserver 交互监听到创建 Pod
副本的信息后,它会检索所有符合该 Pod 要求的工作节点列表,开始执行 Pod 调度逻辑。调度成功后将
Pod 绑定到目标节点上,相当于“调度室”。
controller-manager:作为集群内部的管理控制中心,负责集群内的 Node、Pod 副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
kubelet: 每个 Node 节点上的 kubelet 定期就会调用 API Server 的 REST 接口报告自身状态,API Server 接收这些信息后,将节点状态信息更新到 etcd 中。kubelet 也通过 API Server 监听 Pod信息,从而对 Node 机器上的 POD 进行管理:如创建、删除、更新 Pod
kube-proxy:提供网络代理和负载均衡,是实现 service 的通信与负载均衡机制的重要组件,kube-proxy 负责为 Pod 创建代理服务,从 apiserver 获取所有 service 信息,并根据 service 信息创建代理服务,实现 service 到 Pod 的请求路由和转发,从而实现 K8s 层级的虚拟转发网络,将到service 的请求转发到后端的 pod 上。
Calico:Calico 是一个纯三层的网络插件,calico 的 bgp 模式类似于 flannel 的 host-gw,calico在 kubernetes 中可提供网络功能和网络策略
Cordns:k8s1.11 之前使用的是 kube dns,1.11 之后才有 coredns,coredns 是一个 DNS 服务器,能够为 Kubernetes services 提供 DNS 记录
Docker:是一个容器引擎,用于运行容器
附加组件:
Web UI(Dashboard):Dashboard 是 k8s 集群的一个 web ui 界面,通过这个界面可以对 k8s资源进行操作,如创建 pod,创建存储,创建网络等,也可以监控 pod 和节点资源使用情况。
prometheus+alertmanager+Grafana:监控系统,可以对 kubernetes 集群本身的组件监控,也可对物理节点,容器做监控,对监控到的超过报警阀值的数据进行报警,这个报警会发送到指定的目标,如钉钉,微信,qq,slack 等。
efk-(全称 elasticsearch、fluentd、kibana):日志管理系统,可以对物理节点和容器的日志进行统一收集,把收集到的数据在 kibana 界面展示,kibana 提供按指定条件搜索和过滤日志。
Metrics:用于收集资源指标,hpa 需要基于 metrics 实现自动扩缩容
3.Kubernetes功能说明1)Kubernetes 支持多种网络插件,如 flannel,calico,canel 等,每个插件都有独特的性能,可以分别适用于多种场景,我们可以利用 calico 的 network policy(网络策略)解决 k8s 中的网络隔离,对于多租户场景,可以每一个用户一个名称空间(namespace),然后对这个名称空间设置网络隔离。
2)高可用,高可扩展性
kubernetes 中支持多种高可用解决方案,如 keepalive+nginx,keepalived+haproxy 等,可以使访问流量分发到不同的主机节点,减轻节点压力,如果某个节点出现故障,可以实现秒级切换,达到高可用,保证业务不中断。
3)用户数据的持久化存储
kubernetes 支持多种持久化存储解决方案,保证数据可以得到很好的备份,降低用户数据丢失的风险,kubernetes 中可使用的存储方案如下:
本地存储:emptyDir,hostPath
网络连接类存储:
SAN(存储局域网络):iSCSI
NAS(网络附加存储):nfs,cifs
分布式存储:glusterfs,ceph-块级别的存储,cephfs-文件系统级别的存储
云存储:Azure Disk 等
4)拥有多种更新回滚策略
通过管理 kubernetes 的控制器和 service 等,可以实现灰度发布,蓝绿部署,金丝雀发布等,达到业务的快速部署和回滚等操作,用以满足不同客户的不同升级需求。
5)弹性伸缩
根据访问的流量压力,可以实现 pod 的水平扩容和缩减,达到秒级扩容,让 pod 始终处于满足业务正常运行时所需的数量即可,避免了资源的浪费。
6)节省资源,优化硬件资源的使用
根据流量进行业务组件的扩缩容,可节省机器资源。
4.实验开始
1.环境说明(centos7.9)
2.架构图IP
主机名
角色
内存
CPU
192.168.3.200
master1
master1
4G
4vCPU
192.168.3.201
master2
master2
4G
4vCPU
192.168.3.202
work1
node1
4G
4vCPU
192.168.3.222
虚拟负载
3.配置静态 IP
把虚拟机或者物理机配置成静态 ip 地址,这样机器重新启动后 ip 地址也不会发生改变。以master1主机为例,修改静态 IP:
修改/etc/sysconfig/network-scripts/ifcfg-ens33 文件,变成如下:
cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c1b3a69b-0dcc-44cd-847c-c3681ff5eb16
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.3.200
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=192.168.3.1
?#修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:
?systemctl restart network?
注:/etc/sysconfig/network-scripts/ifcfg-ens33 文件里的配置说明:
NAME=ens33 #网卡名字,跟 DEVICE 名字保持一致即可
DEVICE=ens33 #网卡设备名,大家 ip addr 可看到自己的这个网卡设备名,每个人的机器可能
这个名字不一样,需要写自己的
BOOTPROTO=none #static或者none 表示静态 ip 地址
ONBOOT=yes #开机自启动网络,必须是 yes
IPADDR=192.168.3.200 #ip 地址,需要跟自己电脑所在网段一致
NETMASK=255.255.255.0 #子网掩码,需要跟自己电脑所在网段一致
GATEWAY=192.168.3.1 #网关,在自己电脑打开 cmd,输入 ipconfig /all 可看到
DNS1=192.168.3.1 #DNS,在自己电脑打开 cmd,输入 ipconfig /all 可看到
4.配置主机名
在 192.168.3.200 上执行如下:
hostnamectl set-hostname master1 &
&
bash
在 192.168.3.201 上执行如下:
hostnamectl set-hostname master2 &
&
bash
在 192.168.3.202 上执行如下:
hostnamectl set-hostname work1 &
&
bash
5.配置 hosts 文件
修改每台机器的/etc/hosts 文件,增加如下三行:
192.168.3.200 master1
192.168.3.201 master2
192.168.3.202 work1
6.配置主机之间无密登录
生成 ssh 密钥对
[root@master1 ~]# ssh-keygen #一路回车,不输入密
把本地的 ssh 公钥文件安装到远程主机对应的账户
[root@master1 ~]# ssh-copy-id master1
[root@master1 ~]# ssh-copy-id master2
[root@master1 ~]# ssh-copy-id work1
[root@master2 ~]# ssh-keygen #一路回车,不输入密
把本地的 ssh 公钥文件安装到远程主机对应的账户
[root@master2 ~]# ssh-copy-id master1
[root@master2 ~]# ssh-copy-id master2
[root@master2 ~]# ssh-copy-id work1
[root@work1 ~]# ssh-keygen #一路回车,不输入密
把本地的 ssh 公钥文件安装到远程主机对应的账户
[root@work1 ~]# ssh-copy-id master1
[root@work1 ~]# ssh-copy-id master2
[root@work1 ~]# ssh-copy-id work1
6.关闭 firewalld 防火墙
centos7.9默认只有firewalld,没有IPtable,如果开启了IPtable也需要禁用掉
[root@master1 ~]# systemctl stop firewalld ;
systemctl disable firewalld
[root@master2 ~]# systemctl stop firewalld ;
systemctl disable firewalld
[root@work1 ~]# systemctl stop firewalld ;
systemctl disable firewalld
7.关闭 selinux
[root@master1 ~]# sed -i s/SELINUX=enforcing/SELINUX=disabled/g
/etc/selinux/config
[root@master2 ~]# sed -i s/SELINUX=enforcing/SELINUX=disabled/g
/etc/selinux/config
[root@work1 ~]# sed -i s/SELINUX=enforcing/SELINUX=disabled/g
/etc/selinux/config
?注意:修改 selinux 配置文件之后,reboot重启机器,selinux 才能永久生效
[root@master1 ~]#getenforce
Disabled
[root@master2 ~]#getenforce
Disabled
[root@work1 ~]#getenforce
Disabled
8.关闭交换分区 swap
[root@master1 ~]# swapoff -a
[root@master2 ~]# swapoff -a
[root@work1 ~]# swapoff -a
永久关闭:注释 swap 挂载
当内存不足时,linux 会自动使用 swap,将部分内存数据存放到磁盘中,这个这样会使性能下降。
关闭 swap 主要是为了性能考虑。设计者在设计 k8s 的时候,初衷就是解决性能问题
如果没有关闭 swap,可以指定--ignore-preflight-errors=Swap 忽略报错。
[root@master1 ~]# vim /etc/fstab
systemctl restart network重启3台主机网络
9.修改内核参数
三台主机同样方法
[root@master1~]# modprobe br_netfilter
[root@master1~]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter
[root@master1 ~]# vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@master1 ~]# sysctl -p /etc/sysctl.d/k8s.conf
?为什么要要开启 ip_forward
如果容器的宿主机上的 ip_forward 未打开,那么该宿主机上的容器则不能被其他宿主机访问
为什么要开启 net.bridge.bridge-nf-call-ip6tables
默认情况下,从容器发送到默认网桥的流量,并不会被转发到外部。要开启转发:
net.bridge.bridge-nf-call-ip6tables = 1
为什么要加载 br_netfilter 模块?
在/etc/sysctl.conf 中添加:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
执行 sysctl -p 时出现:
解决办法:
modprobe br_netfilter
10.配置阿里云 repo 源
三台主机通配
yum-config-manager --add-repo
?http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo?
11.配置阿里云安装 k8s 需要的 repo 源
三台主机通配
[root@master1 ~]# vi
/etc/yum.repos.d/kubemetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
12.安装基础软件包
三台主机安装
?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 zlibdevel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet
13.配置服务器时间跟网络时间同步
三台主机通配
[root@master1 ~]# ntpdate cn.pool.ntp.org
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
[root@master1 ~]# systemctl restart crond
14.开启 ipvs
三台通配
开启 IPVS,不开启 ipvs 将会使用 iptables,但是效率低,所以官网推荐需要开通 ipvs 内核
#上传 ipvs.modules 到 master1机器的/etc/sysconfig/modules/目录下
[root@master1 ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules &
&
bash
/etc/sysconfig/modules/ipvs.modules &
&
lsmod | grep ip_vs
ip_vs_ftp 13079 0
nf_nat 26583 1 ip_vs_ftp
ip_vs_sed 12519 0
ip_vs_nq 12516 0
ip_vs_sh 12688 0
ip_vs_dh 12688 0
15.安装 docker-ce
三台通配
[root@master1 ~]# yum install docker-ce -y
[root@master1 ~]# systemctl start docker &
&
systemctl enable docker
[root@master1 ~]# tee /etc/docker/daemon.json <
<
EOF
"registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.dockercn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hubmirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
EOF
[root@master1 ~]# systemctl daemon-reload
[root@master1 ~]# systemctl restart docker
[root@master1]# systemctl enable docker
[root@master1]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service;
enabled;
vendor preset:
disabled)
Active: active (running) since Sun 2022-01-20 22:22:40 CST;
7s ago
Docs: https://docs.docker.com
Main PID: 16748 (dockerd)
Active 是 running,表示 docker 运行正常
为什么要指定 native.cgroupdriver=systemd?
在安装 kubernetes 的过程中,会出现:
failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
文件驱动默认由 systemd 改成 cgroupfs, 而我们安装的 docker 使用的文件驱动是 systemd, 造成不一致, 导致镜像无法启动
docker info 查看
Cgroup Driver: systemd
修改 docker:
修改或创建/etc/docker/daemon.json,加入下面的内容:
"exec-opts": ["native.cgroupdriver=systemd"]
重启 docker 即可
16.安装初始化 k8s 需要的组件
三台通配
在 master 和 node 上安装 kubeadm、kubelet、kubectl 组件,用于后期安装 k8s 使用:
[root@master1 ~]# yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1
【kubeadm 搭建多 master 高可用 K8S 集群(亲测)】[root@master1 ~]# systemctl enable kubelet
注:每个软件包的作用
kubelet :运行在集群所有节点上,用于启动 Pod 和容器等对象的工具
kubeadm :用于初始化集群,启动集群的命令工具
kubectl :用于和集群通信的命令行,通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
17.通过 keepalive+nginx 实现 k8s apiserver 节点高可用
1.安装 nginx 主备在 master1 和 master2 上做 nginx 主备安装
[root@master1 ~]# yum install nginx keepalived -y
[root@master2 ~]# yum install nginx keepalived -y
2.修改 nginx 配置文件。主备一样[root@master1 ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events
worker_connections 1024;
# 四层负载均衡,为两台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.3.200:6443;
# Master1 APISERVER IP:PORT
server 192.168.3.201:6443;
# Master2 APISERVER IP:PORT
server
listen 16443;
# 由于nginx与master节点复用,这个监听端口不能是6443,否则会冲突
proxy_pass k8s-apiserver;
http
log_format
main
$remote_addr - $remote_user [$time_local] "$request"
$status $body_bytes_sent "$http_referer"
"$http_user_agent" "$http_x_forwarded_for";
access_log
/var/log/nginx/access.log
main;
sendfile
on;
tcp_nopush
on;
tcp_nodelay
on;
keepalive_timeout
65;
types_hash_max_size 2048;
include
/etc/nginx/mime.types;
default_type
application/octet-stream;
server
listen
80 default_server;
server_name
_;
location /
3.keepalive 配置
主 keepalived[root@master1 ~]# 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 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.3.222/24
track_script
check_nginx
#vrrp_script:指定检查nginx工作状态脚本(根据nginx状态判断是否故障转移)
#virtual_ipaddress:虚拟IP(VIP)
[root@master1 ~]# cat /etc/keepalived/check_nginx.sh
#!/bin/bash
#1、判断Nginx是否存活
counter=`ps -C nginx --no-header | wc -l`
if [ $counter -eq 0 ];
then
#2、如果不存活则尝试启动Nginx
service nginx start
sleep 2
#3、等待2秒后再次获取一次Nginx状态
counter=`ps -C nginx --no-header | wc -l`
#4、再次进行判断,如Nginx还不存活则停止Keepalived,让地址进行漂移
if [ $counter -eq 0 ];
then
service
keepalived stop
fi
fi
[root@master1 ~]#
chmod +x /etc/keepalived/check_nginx.sh
备 keepalive[root@master2 ~]# 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 127.0.0.1
smtp_connect_timeout 30
router_id NGINX_BACKUP
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.3.222/24
track_script
check_nginx
#vrrp_script:指定检查nginx工作状态脚本(根据nginx状态判断是否故障转移)
#virtual_ipaddress:虚拟IP(VIP)
[root@master2 ~]# cat /etc/keepalived/check_nginx.sh
#!/bin/bash
#1、判断Nginx是否存活
counter=`ps -C nginx --no-header | wc -l`
if [ $counter -eq 0 ];
then
#2、如果不存活则尝试启动Nginx
service nginx start
sleep 2
#3、等待2秒后再次获取一次Nginx状态
counter=`ps -C nginx --no-header | wc -l`
#4、再次进行判断,如Nginx还不存活则停止Keepalived,让地址进行漂移
if [ $counter -eq 0 ];
then
service
keepalived stop
fi
fi
[root@master2 ~]# chmod +x /etc/keepalived/check_nginx.sh
#注:keepalived 根据脚本返回状态码(0 为工作正常,非 0 不正常)判断是否故障转移。
报错:
Jul 11 14:33:16 master1 nginx[17367]: nginx: [emerg] unknown directive "stream" in
/etc/ngi...:13
解决办法如下:
[root@master1 ~]# yum install nginx-mod-stream -y
[root@master1 ~]# systemctl start nginx
[root@master1 ~]# systemctl start keepalived
[root@master2 ~]# systemctl daemon-reload
[root@master2 ~]# systemctl enable nginx keepalived
[root@master2 ~]# systemctl start nginx
报错:
Jul 11 14:33:16 master1 nginx[17367]: nginx: [emerg] unknown directive "stream" in
/etc/ngi...:13
解决办法如下:
[root@master2 ~]# yum install nginx-mod-stream -y
[root@master2 ~]# systemctl start nginx
[root@master2 ~]# systemctl start keepalived
4.测试 vip 是否绑定成功[root@master1 ~]# ip addr
1: lo: <
LOOPBACK,UP,LOWER_UP>
mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <
BROADCAST,MULTICAST,UP,LOWER_UP>
mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
link/ether 00:0c:29:79:9e:36 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.200/24 brd 192.168.3.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.3.222/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::b6ef:8646:1cfc:3e0c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
停掉 master1 上的 keepalived。Vip 会漂移到 master2
[root@master1 ~]# service keepalived stop
[root@master2 ~]# ip addr
1: lo: <
LOOPBACK,UP,LOWER_UP>
mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <
BROADCAST,MULTICAST,UP,LOWER_UP>
mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
link/ether 00:0c:29:83:4d:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.3.201/24 brd 192.168.3.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.3.222/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::a5e0:c74e:d0f3:f5f2/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::b6ef:8646:1cfc:3e0c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::91f:d383:3ce5:b3bf/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
启动 master1 上的 keepalived。Vip 又会漂移到 master1
[root@master1 ~]# service keepalived start
[root@master1 ~]# ip addr
1: lo: <
LOOPBACK,UP,LOWER_UP>
mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <
BROADCAST,MULTICAST,UP,LOWER_UP>
mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
link/ether 00:0c:29:79:9e:36 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.200/24 brd 192.168.3.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.3.222/24 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::b6ef:8646:1cfc:3e0c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
18.初始化集群
导入 docker 镜像把 k8s-imagesv1.23.1.tar.gz 上传到 master1 上,3 台机器都导入一下,避免 node 节点找不到镜像。
[root@master1 ~]# docker load -i k8s-images-v1.23.1.tar.gz
[root@master1 ~]# scp k8s-ima
推荐阅读
- 部署LVS-DR群集
- SecureCRT连接SUSE Linux异常处理
- #yyds干货盘点# springcloud整合stream,rabbitmq实现消息驱动功能
- 视频课程上线(域账号到期提前邮件提醒-AD域日常维护实战)
- #yyds干货盘点# 二叉搜索树
- #yyds干货盘点#CCNA学习记录8
- #yyds干货盘点#Project Reactor
- 准时下班系列!Excel合集之第5集—如何用Excel实现微信通讯录查找功能
- CENTOS 7(LINUX 7)关于禁用透明大页的实验#干货盘点#