使用 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. 禁止PotPlayer自动添加同一目录内连续文件

    问题描述 默认情况下PotPlayer会自动向播放列表添加相似文件 统一目录下大量连续文件会被同时加载 解决办法 参数选项-基本-基本设置-相似文件策略 设置为仅打开选定的文件

  2. 如何在任意文件下启动jupyter notebook,而不用担心环境配置问题

    网上看了很多帖子,说可以写一个bat文件,将bat文件放在你想启动jupyter notebook的地方.可是不行,不能解决我的问题!!!!!!!!!!! 网上是这样说的: ######这为引用### ...

  3. Java8之Stream详解

    Java8中提供了Stream对集合操作作出了极大的简化,学习了Stream之后,我们以后不用使用for循环就能对集合作出很好的操作.   一.流的初始化与转换   Java中的Stream的所有操作 ...

  4. 杭电oj_2058——The sum problem(java实现)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2058 思路:等差数列公式变形:sum = a1 * len + len *(len -1)/2 抽象成 ...

  5. 获取mybaties插入记录自动增长的主键值

    首先在Mybatis Mapper文件中insert语句中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是保存主键值的属性. 例如: <in ...

  6. Spring5源码阅读环境搭建-gradle构建编译

      前沿:Spring系列生态十分丰富,涉及到各个方面.但是作为Spring生态的核心基础Spring,是最重要的环节,需要理解Spring的设计原理,我们需要解读源码.   在构建Spring源码阅 ...

  7. 更新了svn 后,某个文件多了几个副本如:xxx.r1 xxx.r3 xxx.mine等,正常文件名xxx

    分析:更新了svn后 原因: 是的,修改完后,还要把问号文件全部删除,再重新提交(话说,你的SVN名字和我的名字一样,wk).你每次修改之前都更新一下最好了.

  8. idea的插件库连不上网络

    如果你试遍了网上的方法都没有解决网络问题,建议换个网络,比如切换到电信网络.

  9. laravel如何向视图传递值

    1.定义路由 Route::get('demo','DemoController@demo'); 2.定义控制器(内with();方法就是定义传递的值 key=>value)=>" ...

  10. Python之二:基础知识

    1.常量: 1.1.数:5.1.23.9.25e-3 4种类型的数——整数.长整数.浮点数和复数 2是一个整数的例子. 长整数不过是大一些的整数. 3.23和52.3E-4是浮点数的例子.E标记表示1 ...