安装Kubernetes高可用V1.19.2

本文将介绍k8s集群中安装多个master节点。

配置要求

对于 Kubernetes 初学者,在搭建K8S集群时,(您也可以使用自己的虚拟机、私有云等您最容易获得的 Linux 环境)

  • 至少4台​2核4G​的服务器
  • Cent OS 7.6 / 7.7 / 7.8

安装后的软件版本为

  • Kubernetes v1.19.2
  • calico 3.13.1
  • nginx-ingress 1.5.5
  • Docker 19.03.11

Kubernetes高可用集群V1.19.2安装 (一)_kubernetes

准备环境

hostname

主机IP

角色

k8s-master01

10.0.21.120

master-a

k8s-master02

10.0.21.121

master-b

k8s-node01

10.0.21.122

node

k8s-node02

10.0.21.123

node

修改 hostname

如果您需要修改 hostname,可执行如下指令:

检查网络是否通信

[root@k8s-master01 ~]# ip add
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:ac:64:eb brd ff:ff:ff:ff:ff:ff
inet 10.0.21.120/24 brd 10.0.21.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever

安装 docker / kubelet


使用 root 身份在所有节点执行如下代码,以安装软件:

  • docker
  • nfs-utils
  • kubectl / kubeadm /kubelet

快速安装

# 在 master 节点和 node 节点都要执行

export REGISTRY_MIRROR=https://
curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1.19.2

Kubernetes高可用集群V1.19.2安装 (一)_docker_02


初始化API Server

后端端口:6443

开启 按源地址保持会话

假设完成创建以后,Load Balancer的 ip 地址为 x.x.x.x


根据每个人实际的情况不同,实现 LoadBalancer 的方式不一样,本文不详细阐述如何搭建 LoadBalancer,请读者自行解决,可以考虑的选择有:

  • nginx

  • haproxy

  • keepalived

  • 云供应商提供的负载均衡产品

拿keepalived 创建Vip地址为例

#所有master节点操作
[root@k8s-master ~]# yum -y install keepalived
[root@k8s-master ~]# cat <<-EOF > /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
router_id master ##此处k8s-master02主机改为
backup}

vrrp_instance VI_1 {
state MASTER
interface ens192
virtual_router_id 51
priority 100 ##此处k8s-master02改为80
advert_int 1
authentication {
auth_type k8s
auth_pass k8s
}
virtual_ipaddress {
10.0.21.119
}
}

EOF
[root@k8s-master ~]# systemctl start keepalived && systemctl enable keepalived

进行keepalived高可用测试。


初始化 第一个master 节点


在第一个 master 节点 k8s-master01 上执行

# 只在第一个 master 节点执行
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.19.x/init_master.sh | sh -s 1.19.2

执行结果

执行结果中: 将其进行复制

  • 黄框,用于初始化第二、个 master 节点
  • 红框,用于初始化 node 节点
    Kubernetes高可用集群V1.19.2安装 (一)_docker_03


检查 master 初始化结果



# 只在 master 节点执行

# 查看 master 节点初始化结果
kubectl get nodes -o wide

# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide

Kubernetes高可用集群V1.19.2安装 (一)_初始化_04


初始化 第二个master节点


在 master 节点上执行

# 只在第二、 master 节点  k8s-master02 执行
# 替换 x.x.x.x 为 ApiServer LoadBalancer 的 IP 地址 我这里是10.0.21.119
export APISERVER_IP=x.x.x.x
# 替换 apiserver.demo 为 前面已经使用的 dnsName
export APISERVER_NAME=apiserver.demo
echo "${APISERVER_IP} ${APISERVER_NAME}" >> /etc/hosts
# 将保存的黄框内容复制到命令行中 回车即可

Kubernetes高可用集群V1.19.2安装 (一)_docker_05

Kubernetes高可用集群V1.19.2安装 (一)_docker_06


检查 master 初始化结果



# 只在第一个 master 节点 k8s-master01 执行
# 查看 master 节点初始化结果
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready master 36m v1.19.2
k8s-master02 Ready master 3m38s v1.19.2


初始化node


针对所有的node 节点执行

# 只在所有 node 节点执行
# 替换 x.x.x.x 为 ApiServer LoadBalancer 的 IP 地址
export MASTER_IP=x.x.x.x
# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
# 将红框内容复制到命令行中

Kubernetes高可用集群V1.19.2安装 (一)_初始化_07

Kubernetes高可用集群V1.19.2安装 (一)_kubernetes_08


验证 node 初始化结果



# 只在第一个 master 节点 k8s-master01 执行
# 查看 master 节点初始化结果
[root@k8s-master01 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready master 77m v1.19.2
k8s-master02 Ready master 44m v1.19.2
k8s-node1 Ready <none> 7m37s v1.19.2
k8s-node2 Ready <none> 5m40s v1.19.2


安装完成