使用 3 台阿里云服务器(k8s-master0, k8s-master1, k8s-master2)作为 master 节点搭建高可用集群,负载均衡用的是阿里云 SLB ,需要注意的是由于阿里云负载均衡不支持后端服务器自己转发给自己,所以 master 节点的 control-plane-endpoint 不能走负载均衡。

先在 k8s-master0 上安装好 k8s ,安装步骤见 Ubuntu 安装 k8s 三驾马车 kubelet kubeadm kubectl ,然后打快照创建阿里云 ecs 镜像。

确定 control-plane-endpoint 主机名,这里假设是 k8s-api ,在 k8s-master0 的 hosts 中添加 k8s-api 的解析。

10.0.1.81       k8s-api

在 k8s-master0 上创建集群,

kubeadm init \
--control-plane-endpoint "k8s-api:6443" --upload-certs \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=192.168.0.0/16 \
--v=6

创建成功后会出现下面的提示

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of the control-plane node running the following command on each as root: kubeadm join k8s-api:6443 --token ****** \
--discovery-token-ca-cert-hash ****** \
--control-plane --certificate-key ****** Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward. Then you can join any number of worker nodes by running the following on each as root: kubeadm join k8s-api:6443 --token ****** \
--discovery-token-ca-cert-hash ******

用之前创建的阿里云 ecs 镜像创建2台服务器 k8s-master1 与 k8s-master2 作为另外的 master 节点,并在这2台服务器的 hosts 中将 k8s-api 解析到 k8s-master0 的 IP 地址。

然后分别登录 k8s-master1 与 k8s-master2 用前面得到的加入 control-plane node 的 kubeadm join 命令将这 2 台服务器作为 master 加入集群。

接着登录这 3 台 master 节点分别运行下面的命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果不执行上面的命令,运行 kubectl get nodes 会出现下面的错误提示:

The connection to the server localhost:8080 was refused - did you specify the right host or port?

再接着登录 k8s-master1 与 k8s-master2 在 hosts 中将 k8s-api 解析到本机的 IP 地址。

现在这 3 台 master 节点都加入了集群,但通过 kubectl get pods 查看会发现 3 个节点都处于 NotReady 状态,这是由于没有部署 CNI 网络插件。

接下来的一步就是部署网络插件,比如这里我们用 calico 网络,

kubectl apply -f calico.yaml

当 calico 网络部署成功后,3 台 master 就都进入 Running 状态,master 节点的部署就完成了。

接下来就是部署 worker 节点。

Worker 节点都通过阿里云负载均衡访问 master 节点上的 api-server ,所以先要创建阿里云私网负载均衡,添加针对 6443 端口 的 tcp 四层转发,并挂载 3 台 master 节点服务器。

接下来就是继续用之前创建的阿里云 ecs 镜像创建 worker node 服务器,并在每台服务器的 hosts 中将 k8s-api 解析到阿里负载均衡的 IP 地址,然后用之前生成的加入 worker 节点的 kubeadm join k8s-api:6443 命令将这些服务器加入集群。

这样高可用 k8s 集群就搭建好了,可以部署应用了。需要注意的是现在用了 3 台 master ,根据 Raft 一致性算法,只有当其中至少 2 台 master 正常时,集群才能正常工作。

搭建 Kubernetes 高可用集群的更多相关文章

  1. 二进制方式搭建Kubernetes高可用集群

    转:https://jiangxl.blog.csdn.net/article/details/120428703 详细:https://developer.aliyun.com/article/78 ...

  2. 使用kubeadm安装kubernetes高可用集群

    kubeadm安装kubernetes高可用集群搭建  第一步:首先搭建etcd集群 yum install -y etcd 配置文件 /etc/etcd/etcd.confETCD_NAME=inf ...

  3. 部署一套完整的Kubernetes高可用集群(二进制,v1.18版)

    一.前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式: kubeadm Kubeadm是一个K8s部署工具,提供kubeadm ...

  4. 部署一套完整的Kubernetes高可用集群(二进制,最新版v1.18)下

    七.高可用架构(扩容多Master架构) Kubernetes作为容器集群系统,通过健康检查+重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失 ...

  5. 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  6. 一键部署Kubernetes高可用集群

    三台master,四台node,系统版本为CentOS7 IP ROLE 172.60.0.226 master01 172.60.0.86 master02 172.60.0.106 master0 ...

  7. 阿里云搭建k8s高可用集群(1.17.3)

    首先准备5台centos7 ecs实例最低要求2c4G 开启SLB(私网) 这里我们采用堆叠拓扑的方式构建高可用集群,因为k8s 集群etcd采用了raft算法保证集群一致性,所以高可用必须保证至少3 ...

  8. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  9. 基于 ZooKeeper 搭建 Spark 高可用集群

    一.集群规划 二.前置条件 三.Spark集群搭建         3.1 下载解压         3.2 配置环境变量         3.3 集群配置         3.4 安装包分发 四.启 ...

随机推荐

  1. 关闭 APIPA

    遇到的问题:我在网卡2上设置了静态ip,可是出现了一个奇怪的ip地址169.254.*.*,如下图. 解决方法:关闭APIPA功能 按照下述的做法,自己在win7企业版上尝试了下,有效.不再出现169 ...

  2. Kubernetes Pod故障归类与排查方法

    Pod概念 Pod是kubernetes集群中最小的部署和管理的基本单元,协同寻址,协同调度. Pod是一个或多个容器的集合,是一个或一组服务(进程)的抽象集合. Pod中可以共享网络和存储(可以简单 ...

  3. Linux虚拟化 xen的工具栈介绍

    试验环境centos6.10 xen的工具栈介绍: 查看xl目录的帮助:xl help 查看xen下安装了哪些虚拟机:xl list # xl list Domain-0 Name ID Mem VC ...

  4. JavaDay2(中)

    Java循环与分支练习 习题1: 输出1~100内前5个可以被3整除的数. public class Day2_Test1 { //输出1~100内前5个可以被3整除的数. public static ...

  5. 微信小程序open-data userAvatarUrl圆角显示

    从年初开始,打开小程序,工具栏都会弹出这个提醒: 也就是,默认不弹出授权询问框,默认获取不到用户信息(头像.昵称等)! 如果你需要用到这个接口,可以尝试以下方法: 1.用 button 组件,将属性名 ...

  6. centos7重启Mysql命令

    执行命令/etc/init.d/mysql restart重启Mysql服务器

  7. Springboot 中的配置文件

    Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值. 技术:yaml.properties语法,Con ...

  8. linux 安装java jdk

    1.检查一下系统中的jdk版本 [root@localhost software]# java -version 显示: openjdk version "1.8.0_102" O ...

  9. PHP实现推送微信小程序模板消息

    这边只会写如何实现,至于在公众号管理后台添加模板消息可以参考这篇文章: https://www.cnblogs.com/txw1958/p/wechat-template-message.html,当 ...

  10. C++——动态内存分配3

    动态创建多维数组  new 类型名T[下标表达式1][下标表达式2]…: 如果内存申请成功,new运算返回一个指向新分配内存首地址的指针,是一个T类型的数组,数组元素的个数为除最左边一维外各维下标表达 ...