前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s高可用一个kubeadm搞定

k8s高可用一个kubeadm搞定

作者头像
sealyun
发布2019-07-25 16:52:22
2K0
发布2019-07-25 16:52:22
举报
文章被收录于专栏:sealyunsealyun

概述

目前kubernetes高可用需要要么依赖外部负载均衡器,自己搭建时就需要做keepalived haproxy等,比较麻烦,在某些云上可能keepalived还无法使用,构建部署也需要通过ansible等去做HA,很多工具部署过程中都比较容易产生问题。

今天把我毕生精华拿出来分享给大家,绝逼是你见过最简单,最先进,国际领先的k8s HA方案,目测社区未来也会朝着这个方向发展。

地址sealos, 让kubernetes高可用不再需要keepalived haproxy和ansible,

sealyun定制超级版kubeadm通过ipvs代理多个master,优雅解决k8s高可用问题。

使用教程

环境介绍

ip

role

10.103.97.200

master0

10.103.97.201

master0

10.103.97.202

master0

10.103.97.2

virtulIP

apiserver.cluster.local

apiserver解析名

下载超级kubeadm

下载kubernetes1.14.0+离线包

在每个节点上初始化

代码语言:javascript
复制
tar zxvf kube1.14.0.tar.gz && cd kube/shell && sh init.sh

用下载的kubeadm替换掉包内的kubeadm:

代码语言:javascript
复制
cp kubeadm /usr/bin/kubeadm

kubeadm配置文件

cat kubeadm-config.yaml :

代码语言:javascript
复制
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.14.0
controlPlaneEndpoint: "apiserver.cluster.local:6443" # 使用解析名去访问APIserver
apiServer:
        certSANs:
        - 127.0.0.1
        - apiserver.cluster.local
        - 172.20.241.205
        - 172.20.241.206
        - 172.20.241.207
        - 172.20.241.208
        - 10.103.97.2          # 虚拟IP等都加入到证书中
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
        excludeCIDRs: 
        - "10.103.97.2/32" # 如果不加这个k8s会定时清理用户创建的IPVS规则,导致代理失败

在 master0 10.103.97.200 上

代码语言:javascript
复制
echo "10.103.97.200 apiserver.cluster.local" >> /etc/hosts
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs  
mkdir ~/.kube && cp /etc/kubernetes/admin.conf ~/.kube/config
kubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml # 安装calico

执行完会输出一些日志,里面包含join需要用的命令

在 master1 10.103.97.201 上

代码语言:javascript
复制
# 注意,在安装之前解析到master0, 安装成功后解析改成自己,因为kubelet kube-proxy配置的都是这个解析名,如果不改解析master0宕机整个集群就不可用了
echo "10.103.97.200 apiserver.cluster.local" >> /etc/hosts 
kubeadm join 10.103.97.200:6443 --token 9vr73a.a8uxyaju799qwdjv \
    --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 \
    --experimental-control-plane \
    --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07 

sed "s/10.103.97.200/10.103.97.201/g" -i /etc/hosts  # 解析改也自己本机地址

在 master2 10.103.97.202 上,同master1

代码语言:javascript
复制
echo "10.103.97.200 apiserver.cluster.local" >> /etc/hosts
kubeadm join 10.103.97.200:6443 --token 9vr73a.a8uxyaju799qwdjv \
    --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 \
    --experimental-control-plane \
    --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07  

sed "s/10.103.97.200/10.103.97.201/g" -i /etc/hosts

在Node节点上

通过虚拟IP join到master上, 这个命令会在node节点上创建一条ipvs规则,virturl server就是虚拟IP, realserver就是三个master。 然后再以一个static pod起一个守护进程守护这些规则,一旦哪个apiserver不可访问了就清除realserver, apiserver通了之后再次添加回来

代码语言:javascript
复制
echo "10.103.97.2 apiserver.cluster.local" >> /etc/hosts   # using vip
kubeadm join 10.103.97.2:6443 --token 9vr73a.a8uxyaju799qwdjv \
    --master 10.103.97.200:6443 \
    --master 10.103.97.201:6443 \
    --master 10.103.97.202:6443 \
    --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866

Architecture

代码语言:javascript
复制
  +----------+                       +---------------+  virturl server: 10.103.97.2:6443
  | mater0   |<----------------------| ipvs nodes    |    real servers:
  +----------+                      |+---------------+            10.103.97.200:6443
                                    |                             10.103.97.201:6443
  +----------+                      |                             10.103.97.202:6443
  | mater1   |<---------------------+
  +----------+                      |
                                    |
  +----------+                      |
  | mater2   |<---------------------+
  +----------+

集群每个node节点都会创建一条ipvs规则用于代理所有的master节点。类似kube-proxy的ipvs实现.

然后起一个守护进程就健康检查apiservers /etc/kubernetes/manifests/sealyun-lvscare.yaml

LVScare

关于ipvs的创建与守护可见这个项目。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 sealyun 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 使用教程
    • 环境介绍
      • 下载超级kubeadm
        • 下载kubernetes1.14.0+离线包
          • kubeadm配置文件
            • 在 master0 10.103.97.200 上
              • 在 master1 10.103.97.201 上
                • 在 master2 10.103.97.202 上,同master1
                  • 在Node节点上
                  • Architecture
                  • LVScare
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档