阿里云ECS搭建Kubernetes集群踩坑记

阿里云ECS搭建Kubernetes集群踩坑记

[TOC]

1. 现有环境、资源

资源 数量 规格
EIP 1 5M带宽
ECS 3 2 vCPU 16 GB内存 100G硬盘
ECS 3 2 vCPU 16 GB内存 150G硬盘
SLB 2 私网slb.s1.small

2. 规划

坑:

  1. 上网问题,因为只有一个EIP,所有其它节点只能通过代理上网;
  2. 负载均衡问题,因为阿里不支持LVS,负载均衡TCP方式后端又不支持访问负载均衡,HTTP和HTTPS方式,只支持后端协议为HTTP;

为了避免上面的坑,作以下规划:

  1. Kubernetes master 3台100G,硬盘挂载到/data下,/data/etcd作软链接到/var/lib/etcd。节点不作调度分配一般POD;SLB设置kubeadm init这台master1作为后端,方式为TCP,且在master1上docker中安装haproxy和keepalived解决自己不能连接VIP问题;
  2. 3台150G硬盘作为ceph osd,机器也作为Kubernetes nodes;
  3. EIP绑定到node5,安装squid作为所有节点上网代理,安装ansible作为管理分发文件,也作为SSH管理跳板机;
  4. 生成一套ssh key, 复制ssh私钥到所有节点,添加公钥到所有节点,考虑到安全性,部署完成后,删除除node5上的私钥;
  5. 配置yum、docker ce使用代理上网;
  6. 版本信息
    操作系统:CentOS7
    Kubernetes:v1.12.3
    Docker CE:docker-ce-18.06.1.ce
    podSubnet:10.244.0.0/16
    网络插件:canal

3. 部署

先解决上网问题:

  1. 将EIP绑定到node5,并安装squid;
  2. 申请阿里内网免费SLB,将node5的3128端口使用TCP方式负载均衡;
  3. 在除node5的节点上,~/.bashrc后面添加以下内容:
    export http_proxy=http://squid_slb_ip:3128
    export https_proxy=http://squild_slb_ip:3128
    export no_proxy=‘‘
  4. 在除node5的节点上执行以下命令(docker安装后):
mkdir -p /etc/systemd/system/docker.service.d
cat >/etc/systemd/system/docker.service.d/http-proxy.conf<<EOF
[Service]
Environment="HTTP_PROXY=http://squid_slb_ip:3128" "HTTPS_PROXY=http://squid_slb_ip:3128" "NO_PROXY="
EOF

systemctl daemon-reload
systemctl restart docker

3.1 master部署

先在阿里负载均衡申请内网免费SLB,设置master1的6443为后端端口,8443为监听端口。
因Kubernetes apiserver为https协议,阿里SLB中能负载均衡HTTPS的只有TCP方式,而TCP方式限制是负载均衡后端不能此负载均衡,所以为了master1能访问这个VIP,手动添加keepalived+haproxy:

先使用脚本初始化环境(需要能上网),脚本内变量INSTALL_CLUSTER="false",执行时询问是否添加节点选否。
https://github.com/ygqygq2/kubernetes/blob/master/kubeadm/kubeadm_install_k8s.sh

mkdir /etc/haproxy
cat >/etc/haproxy/haproxy.cfg<<EOF
global
  log 127.0.0.1 local0 err
  maxconn 50000
  uid 99
  gid 99
  #daemon
  nbproc 1
  pidfile haproxy.pid

defaults
  mode http
  log 127.0.0.1 local0 err
  maxconn 50000
  retries 3
  timeout connect 5s
  timeout client 30s
  timeout server 30s
  timeout check 2s

listen admin_stats
  mode http
  bind 0.0.0.0:1080
  log 127.0.0.1 local0 err
  stats refresh 30s
  stats uri     /haproxy-status
  stats realm   Haproxy\ Statistics
  stats auth    admin:k8s
  stats hide-version
  stats admin if TRUE

frontend k8s-https
  bind 0.0.0.0:8443
  mode tcp
  #maxconn 50000
  default_backend k8s-https

backend k8s-https
  mode tcp
  balance roundrobin
  server lab1 master1_ip:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3  # 注意更换IP
EOF

docker run -d --name k8s-haproxy -v /etc/haproxy:/usr/local/etc/haproxy:ro -p 8443:8443 -p 1080:1080 --restart always haproxy:1.7.8-alpine

docker run --net=host --cap-add=NET_ADMIN -e KEEPALIVED_INTERFACE=eth0 -e KEEPALIVED_VIRTUAL_IPS="#PYTHON2BASH:[‘master_slb_ip‘]" -e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:[‘maser1_ip‘" -e KEEPALIVED_PASSWORD=k8s --name k8s-keepalived --restart always -d osixia/keepalived:1.4.4   

在master1上再次使用该脚本,设置好变量。
https://github.com/ygqygq2/kubernetes/blob/master/kubeadm/kubeadm_install_k8s.sh

INSTALL_CLUSTER="true"
# 是否安装Keepalived+HAproxy
INSTALL_SLB="false"
# 定义Kubernetes信息
KUBEVERSION="v1.12.2"
DOCKERVERSION="docker-ce-18.06.1.ce"
# k8s master VIP(使用负载均衡IP)
k8s_master_vip="master_slb_ip"
# 主机名:IP,需要执行脚本前设置
server0="master1:master1_ip"
server1="master2:master2_ip"
server2="master3:master3_ip"

脚本执行后,至少是可以kubeadm init成功的,脚本过程中,会有命令提示,若master2和master3添加etcd集群失败,可手动按上面命令提示解决。

集群健康后,修改master_slb的后端,添加master2和master3的6443。并将/etc/kubernetes/admin.conf~/.kube/config里修改成
server: https://127.0.0.1:8443。因为他们都为master_slb后端,都不能访问master_slb的IP了。而其它非master节点,则可以通过server: https://master_slb_ip:8443访问。

3.2 添加node

将master1上的/etc/kubernetes/admin.conf拷贝为node5上的~/.kube/config,并修改为server: https://master_slb_ip:8443,这样即可以node5上通过<br/>kubeadm token create --print-join-command获取集群添加命令。

在node5上继续使用该脚本,设置好变量。
https://github.com/ygqygq2/kubernetes/blob/master/kubeadm/kubeadm_install_k8s.sh

INSTALL_CLUSTER="false"
# 可获取kubeadm join命令的节点IP
k8s_join_ip="node5_ip"  # 脚本中是通过ssh到该IP变量获取kubeadm join命令

执行脚本,即可添加节点成功。

4. 小结

因为EIP只有一个,所以存在单点问题,当然可以通过添加EIP绑定ECS解决。因为各种限制条件,没有可以直接上网的私有云服务器好用,使用过程中,可能出现访问不允许代理情况,或者部分地址不需要使用代理访问。若后续Nginx ingress使用阿里SLB暴露服务,需要考虑nginx ingress是否为HTTPS。总之,很折腾。

原文地址:http://blog.51cto.com/ygqygq2/2325202

时间: 2024-10-19 04:22:53

阿里云ECS搭建Kubernetes集群踩坑记的相关文章

阿里云ECS搭建SVN配置外网

阿里云ECS搭建SVN后,配置外网启动不了,检查云服务器没发现问题,后来发现是阿里云拦截,需要在阿里云控制台ECS安全组新增如下配置:

rancher搭建kubernetes集群

实验环境: 利用rancher搭建kubernetes集群,及搭建和关联harbor私有镜像库. rancher:http://10.10.10.10:8888 kubernetes:10.10.10.10 harbor:10.10.10.100 images:10.10.10.100/test_nginx:latest app:nginx 实验目的: 一.实践docker:search pull.run.tag.build.push功能.了解参数含义 #docker search *image

kubeadm搭建kubernetes集群

一.环境准备首先我的三个ubuntu云主机的配置如下 cpu数量 内存 磁盘 Ubuntu 2 8G 20G 18.04LTS 而且能保证三台机器都能连接外网这里的所有命令都是在root用户下操作的二.安装 1.在所有的节点上安装Docker和kubeadm [email protected]:~# apt-get install curl -y [email protected]:~# curl -s https://packages.cloud.google.com/apt/doc/apt-

阿里云ECS搭建Java+mysql+tomcat环境的简要步骤

使用阿里云ECS挺长一段时间了.这两天碰巧朋友小白让我一步一步教他在ECS上搭建Java+mysql+tomcat环境,所以把在这里把步骤在这简单整理了一下,以便需要的人查阅. 我购买的阿里云服务器系统是Centos 6.5. 在购买好阿里云ECS后. 1.下载XShell 2.下载XFtp 3.使用XShell链接到阿里云ECS 4.以下命令在XShell中使用,也就是通过XShell控制阿里云服务器里的操作系统 [1]常用命令 pwd       查看当前目录 df -h      查看当前

基于 CentOS 7 搭建kubernetes集群

基于Centos7构建Kubernetes平台 一.实验环境 3台centos7的主机: master  192.168.111.131部署etcd,kube-apiserver,kube-controller-manager,kube-scheduler 4个应用. node01  192.168.111.130  部署docker,kubelet, kube-proxy  3个应用 node02  192.168.111.129  部署docker,kubelet, kube-proxy  

用阿里云ECS搭建WordPress环境

看着新鲜出炉的阿里云ECS,心中不免有些小激动,下来就是用阿里云配置Web环境了.(系统环境:Ubuntu 14.06 64位) 一.在Ubuntu中安装Apache2(其他linux系统类似) 在安装Apache2之前,我们首先更新系统:apt-get update(解决apt-get找不到软件包的问题 ) 更新完系统之后,我们就可以开始安装Apache2了: 首先在终端输入:apt-get install apache2不要以为安装完成就结束了,这仅仅只是一个开始,然后输入以下代码: apt

小白摸索:阿里云ECS搭建Solo博客

Solo博客挺好玩的,但是毕竟小众,拿来偶尔写写无聊的东西也挺好的. 本文前提:阿里云ECS服务器一台 实现效果:通过IP地址访问solo博客 实现步骤: 1. XShell远程连接阿里云ECS 2. 环境准备 2.1 centOS7安装Java 2.2 centOS7安装docker 2.3 dockera安装mysql 2.4 navicat连接docker中的mysql 3. 安装Solo 4. Nginx反向代理Solo 5. 访问博客 原文地址:https://www.cnblogs.

阿里云构建Kafka单机集群环境

简介 在一台ECS阿里云服务器上构建Kafa单个集群环境需要如下的几个步骤: 服务器环境 JDK的安装 ZooKeeper的安装 Kafka的安装 1. 服务器环境 CPU: 1核 内存: 2048 MB (I/O优化) 1Mbps 操作系统 ubuntu14.04 64位 感觉服务器性能还是很好的,当然不是给阿里打广告,汗. 随便向kafka里面发了点数据,性能图如下所示:  2. 安装JDK 想要跑Java程序,就必须安装JDK.JDK版本,本人用的是JDK1.7. 基本操作如下: 从JDK

从centos7镜像到搭建kubernetes集群(kubeadm方式安装)

在网上看了不少关于Kubernetes的视频,虽然现在还未用上,但是也是时候总结记录一下,父亲常教我的一句话:学到手的东西总有一天会有用!我也相信在将来的某一天会用到现在所学的技术.废话不多扯了.... 一.前期准备 1.k8s-master01:master主服务器(存在单点故障) 2.k8s-node01.k8s-node02:2个工作节点 3.Harbor:私有仓库(简单记录搭建Harbor私服仓库) 4.Router:软路由(由于kubeadm是存放在谷歌云的,国内无法访问,K8S集群搭