前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes1.13.0 HA安装教程

kubernetes1.13.0 HA安装教程

作者头像
sealyun
发布2019-07-25 15:22:46
7210
发布2019-07-25 15:22:46
举报
文章被收录于专栏:sealyun

kubernetes集群三步安装

sealos是一个轻量级kubernetes HA安装项目,重点关注功能的收敛而非庞大复杂厚重,旨在容易定制。除kubelet以外其它任何组件均在容器中运行 这样做的好处有几点:

  1. 保证一致性,这样避免掉很多因宿主环境问题导致的安装失败,如keepalived版本问题,系统库问题等等
  2. 统一管理统一监控,这样我们就不需要为如keepalived etcd haproxy单独配置进程级别的监控,仅要监控pod即可,kubelet也会对这些容器做比较好的管理,如自动拉起等

包含官方dashboard:

包含promethus监控告警:

证书过期时间99年,再也不用担心证书过期了:

项目地址:https://github.com/fanux/sealos

特性

  • 支持任意节点的etcd集群自动构建,且etcd集群使用安全证书,通过static pod方式启动,这样可以通过监控pod来监控etcd集群健康状态
  • 支持多master节点,允许任意一台master宕机集群功能不受影响
  • calico使用etcd集群,配置安全证书,网络管控数据无单点故障
  • 包含dashboard, heapster coreDNS addons, coreDNS双副本,无单点故障
  • 使用haproxy负载master节点,同样是用static pod,这样可通过统一监控pod状态来监控haproxy是否健康
  • haproxy节点使用keepalived提供虚拟IP,任意一个节点宕机虚拟IP可实现漂移,不影响node连接master
  • node节点与kube-proxy配置使用虚拟IP
  • promethus 监控功能,一键安装,无需配置
  • istio 微服务支持

ship on docker

你必须已经有了sealyun kubernetes离线安装包 https://sealyun.com/pro/products/

原理是为了减少大家搭建ansible和sealos的环境,客户端的东西都放到docker里,把安装包挂载到容器中,然后ansible脚本会把包分发到你在hosts文件中配置的所有服务器上

所以大概分成三步:

  1. 配置免密钥,把docker里的公钥分发给你所有的服务器
  2. 配置ansible playbook的hosts文件
  3. 执行ansible

下面逐一说明:

启动ansible容器与免密钥设置

找台宿主机如你的PC,或者一台服务器,把下载好的离线包拷贝到/data目录,启动sealos容器,把离线包挂载进去:

代码语言:javascript
复制
docker run --rm -v /data/kube{k8sversion}.tar.gz:/data/kube{k8sversion}.tar.gz -it -w /etc/ansible fanux/sealos:{k8sversion} bash

如安装v1.13.0:

代码语言:javascript
复制
docker run --rm -v /data/kube1.13.0.tar.gz:/data/kube1.13.0.tar.gz -it -w /etc/ansible fanux/sealos:v1.13.0 bash

在容器里面执行:

代码语言:javascript
复制
mkdir ~/.ssh

cd ~/.ssh

ssh-keygen -t rsa

ssh public key:

代码语言:javascript
复制
cat ~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7fTirP9zPcx7wIjhsF+Dyu0A2sV5llC8jsmp/xtiyuJirE3mclpNEqgrzHC26f+ckfzwoE0HPU0wDPxbWFl3B0K89EwJSBsVZSZ0VLYnZp0u2JgwCLZzZzKfY0018yoqoL9KHz/68RpqtG2bWVf0/WSj+4hN7xTRpRTtXJHBOQRQBfqVSIcfMBSEnO15buUbDaLol/HvQd0YBrWwafQtMacmBlqDG0Z6/yeY4sTNRVRV2Uu5TeaHfzgYgmY9+NxtV**8Td6tgZtq7cVU//kSsbzkUzDSD8zsh8kPUm4yljT5tYM1cPFLGM4m/zqAjAZN2YaEdFckJFAQ7TWAK857d root@8682294b9464

这样公钥就生成了

在其它所有要安装k8s的服务器上执行:

代码语言:javascript
复制
cd ~/.ssh

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7fTirP9zPcx7wIjhsF+Dyu0A2sV5llC8jsmp/xtiyuJirE3mclpNEqgrzHC26f+ckfzwoE0HPU0wDPxbWFl3B0K89EwJSBsVZSZ0VLYnZp0u2JgwCLZzZzKfY0018yoqoL9KHz/68RpqtG2bWVf0/WSj+4hN7xTRpRTtXJHBOQRQBfqVSIcfMBSEnO15buUbDaLol/HvQd0YBrWwafQtMacmBlqDG0Z6/yeY4sTNRVRV2Uu5TeaHfzgYgmY9+NxtV**8Td6tgZtq7cVU//kSsbzkUzDSD8zsh8kPUm4yljT5tYM1cPFLGM4m/zqAjAZN2YaEdFckJFAQ7TWAK857d root@8682294b9464" >> authorized_keys

这样公钥分发工作完成了,所有的机器直接ssh无需输入密码即可登录

修改配置

Config your own hosts

代码语言:javascript
复制
# cd /etc/ansible

# vim hosts

配置说明:

代码语言:javascript
复制
[k8s-master]

10.1.86.204 name=node01 order=1 role=master lb=MASTER lbname=lbmaster priority=100

10.1.86.205 name=node02 order=2 role=master lb=BACKUP lbname=lbbackup priority=80

10.1.86.206 name=node03 order=3 role=master

[k8s-node]

10.1.86.207 name=node04 role=node

[k8s-all:children]

k8s-master

k8s-node

[all:vars]

vip=10.1.86.209   # 同网段未被占用IP

k8s_version=1.12.0  # kubernetes版本

ip_interface=eth.*

etcd_crts=["ca-key.pem","ca.pem","client-key.pem","client.pem","member1-key.pem","member1.pem","server-key.pem","server.pem","ca.csr","client.csr","member1.csr","server.csr"]

k8s_crts=["apiserver.crt","apiserver-kubelet-client.crt","ca.crt", "front-proxy-ca.key","front-proxy-client.key","sa.pub", "apiserver.key","apiserver-kubelet-client.key",  "ca.key",  "front-proxy-ca.crt",  "front-proxy-client.crt" , "sa.key"]

注意role=master的会装etcd与kubernetes控制节点,role=node即k8s node节点,配置比较简单,除了改IP和版本,其它基本不用动

启动安装

代码语言:javascript
复制
# ansible-playbook roles/install-all.yaml

uninstall all

代码语言:javascript
复制
# ansible-playbook roles/uninstall-all.yaml

新增节点

删掉hosts文件中已经安装的node节点配置,加上新的

假如之前的配置是:

代码语言:javascript
复制
[k8s-master]

10.1.86.204 name=node01 order=1 role=master lb=MASTER lbname=lbmaster priority=100

10.1.86.205 name=node02 order=2 role=master lb=BACKUP lbname=lbbackup priority=80

10.1.86.206 name=node03 order=3 role=master 

[k8s-node]

10.1.86.207 name=node04 role=node

现在想安装增加10.1.86.208这个节点,那么删除[k8s-node]项的10.1.86.207 再把208添加上:

代码语言:javascript
复制
[k8s-master]

10.1.86.204 name=node01 order=1 role=master lb=MASTER lbname=lbmaster priority=100

10.1.86.205 name=node02 order=2 role=master lb=BACKUP lbname=lbbackup priority=80

10.1.86.206 name=node03 order=3 role=master 

[k8s-node]

10.1.86.208 name=node04 role=node

再执行ansible-playbook roles/install-kubenode.yaml 即可

同理role下其它yaml文件也可执行, 如单独安装keepalived,单独安装etcd,haproxy等

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • kubernetes集群三步安装
  • 特性
  • ship on docker
    • 你必须已经有了sealyun kubernetes离线安装包 https://sealyun.com/pro/products/
    • 启动ansible容器与免密钥设置
      • 在其它所有要安装k8s的服务器上执行:
      • 修改配置
      • 启动安装
      • uninstall all
      • 新增节点
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档