不可否认的是,OpenStack仍然是可行的云操作系统,并且被全世界许多互联服务提供商使用。而Rancher是业界最为广泛使用的Kubernetes管理平台,通过简洁直观的GUI集中管理企业IT中的多个Kubernetes集群。Rancher还提供用于应用程序开发的集成工具以及用于安全性和治理的强大的企业级功能。目前Rancher已有三亿核心镜像下载量。本文将使用Rancher在Openstack上创建一个Kubernetes集群。

本文中的设置是在teuto.net运营的Bielefeld的teutoStack公有云环境中执行的,因此安装过程可能会有略微不同。

Kubernetes本身与OpenStack集成已经一段时间了,并且已经建立了良好的基础。它由两个组件组成:OpenStack云提供程序以及OpenStack节点驱动程序。在Rancher中,默认可以获取云提供程序,同时Rancher中也有节点驱动程序,但是这不是默认提供的。

在OpenStack上构建一个Rancher Kubernetes集群有两种方式:使用OpenStack节点驱动程序或通过自定义节点设置(https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/)。

为了便于访问,本文中的所有配置示例你都可以在Github上获取:

https://github.com/chfrank-cgn/Rancher/tree/master/openstack

启动OpenStack云提供程序

要允许Kubernetes访问OpenStack API,以创建load balancer或volume,需要启用OpenStack云提供程序。为此,请在Rancher GUI中为云提供程序创建集群时选择“自定义”选项,然后将以下信息插入集群配置(通过“编辑YAML”)——你可以根据需要替换实际值:

  1. rancher_kubernetes_engine_config:
  2. ...
  3. cloud_provider:
  4. name: "openstack"
  5. openstackCloudProvider:
  6. block_storage:
  7. ignore-volume-az: true
  8. trust-device-path: false
  9. bs-version: "v2"
  10. global:
  11. auth-url: "https://api.openstack.net:5000/v3" # Keystone Auth URL
  12. domain-name: "Default" # Identity v3 Domain Name
  13. tenant-id: "616a8b01b5f94f99acd00a844f8f46c3" # Project ID
  14. username: "user" # OpenStack Username
  15. password: "pass" # OpenStack Password
  16. load_balancer:
  17. lb-version: "v2"
  18. subnet-id: "f339e543-a67f-45fa-8157-4a58b0940e0b"
  19. floating-network-id: "ca27ca05-2870-47b3-ad2f-535d04c9e736"
  20. create-monitor: false
  21. manage-security-groups: true
  22. monitor-max-retries: 0
  23. use-octavia: true
  24. metadata:
  25. request-timeout: 0
  26. ignore_docker_version: false
  27. ...

有了这些信息,Kubernetes将可以访问OpenStack API,创建和删除资源以及访问Cinder volume和Octavia负载均衡器。没有这一配置,Kubernetes集群也能够良好运行,只是无法访问Cinder或者Octavia,或者其他OpenStack资源。

方式1:使用OpenStack节点驱动程序创建集群

需要在Rancher配置中启用节点驱动程序,才能使用内置节点驱动程序在OpenStack上创建Kubernetes集群。然后需要使用以下信息创建一个节点模板(可以根据需要更换实际值):


  1. "authUrl": "https://api.openstack.net:5000/v3",
  2. "availabilityZone": "Zone1",
  3. "domainName": "Default",
  4. "flavorName": "standard.2.1905",
  5. "floatingipPool": "extern",
  6. "imageName": "ubuntu-18.04-bionic-amd64",
  7. "keypairName": "rancher",
  8. "netName": "intern",
  9. "sshPort": "22",
  10. "sshUser": "ubuntu",
  11. "tenantId": "616a8b01b5f94f99acd00a844f8f46c3",
  12. "username": "user"

之后,与所有其他云提供商一样,集群创建非常简单。

安全选项

以下防火墙规则需要在Rancher和OpenStack租户之间定义,以启用自动集群设置:

  • 双向ssh、http和https

  • 从Rancher到租户节点的2376(docker)

  • 租户节点之间的2376、2379、2380、6443和10250

方式2:使用自定义节点创建集群

可以在启动脚本的帮助下从单独创建的实例中构建集群,以安装和启用docker(在Ubuntu 18.04 TLS上):


  1. #!/bin/sh
  2. apt-get update
  3. apt-get -y install apt-transport-https jq software-properties-common
  4. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  5. add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  6. apt-get update
  7. apt-get -y install docker-ce=18.06.3~ce~3-0~ubuntu
  8. usermod -G docker -a ubuntu
  9. exit 0

安全事项

需要为OpenStack租户定义以下防火墙规则,以允许从现有节点创建集群:

  • 来自Workstation的SSH

  • 到Rancher的http和https

访问Cinder块存储

为了访问Cinder块存储,需要应用以下存储类的定义:


  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4. name: cinder
  5. provisioner: kubernetes.io/cinder
  6. reclaimPolicy: Delete
  7. parameters:
  8. availability: nova

无需进一步操作即可启用OpenStack负载均衡器。

故障排查

初始设置过程中会出现一些报错,需要不断试错。而Rancher本身就是一个很好的debug信息来源,它的日志以标准文件形式输出,抓住这一线索将对调试有很大帮助,尤其是在创建节点的过程中。

如何使用Rancher在OpenStack上创建K8S集群的更多相关文章

  1. 使用Kubeadm创建k8s集群之部署规划(三十)

    前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...

  2. 使用Kubeadm创建k8s集群之节点部署(三十一)

    前言 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案.不 ...

  3. rancher v2.2.4创建kubernetes集群出现[etcd] Failed to bring up Etcd Plane: [etcd] Etcd Cluster is not healthy

    主机:rancher(172.16.2.17),master(172.16.2.95),node01(172.16.2.234),node02(172.16.2.67) 问题:开始是用的rancher ...

  4. 如何在CentOS上创建Kubernetes集群

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由编程男孩 发表于云+社区专栏 介绍 Kubernetes(常简称为K8s)是用于自动部署.扩展和管理容器化(containerized ...

  5. Rancher 下图形界面 搭建 K8S 集群

    首先我们准备4台 2核3G 的 centos 7 温馨提示:先安装好一台 CentOS 的虚拟机,并且安装好 docker,永久关闭防火墙. 再这个基础上我们分别克隆出四台 Rancher.K8S1. ...

  6. 5 秒创建 k8s 集群 - 每天5分钟玩转 Docker 容器技术(115)

    据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...

  7. 5 秒创建 k8s 集群[转]

    据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...

  8. 使用Gardener在Google Cloud Platform上创建Kubernetes集群

    Gardener是一个开源项目,github地址: https://github.com/gardener/gardener/ 使用Gardener,我们可以在几分钟之内在GCP, AWS, Azur ...

  9. 如何使用 Kind 快速创建 K8s 集群?

    作者|段超 来源|尔达 Erda 公众号 ​ 导读:Erda 作为一站式云原生 PaaS 平台,现已面向广大开发者完成 70w+ 核心代码全部开源!在 Erda 开源的同时,我们计划编写<基于 ...

随机推荐

  1. 处理公共CDN突然失效的情况

    公共CDN的使用 刚开始开发我的博客时,使用的bootcdn,发现他们被黑过,虽然想骂那些“黑客”,但是我们也没办法去防范,只能从自己的网站上入手解决. 那时我还没技术解决这个问题,网上搜过,大都只提 ...

  2. ES6引入的Reflect对象目的何在?

    Reflect对象其实就是为了取代Object对象.取代原因有一下几点: 1)Object对象的一些内部方法放在了Reflect上面,比如:Object.defineProperty.主要是优化了语言 ...

  3. 05 JPAUtil工具类

    public final class JPAUtil { // JPA的实体管理器工厂:相当于Hibernate的SessionFactory private static EntityManager ...

  4. Community Cloud零基础学习(四)Builder创建自定义的布局

    前几篇讲了Community Cloud权限配置等信息,但是没有太讲过 Community如何进行配置layout,本篇主要描述使用Builder去进行符合需求的Community Layout的构建 ...

  5. 【WPF学习】第五十九章 理解控件模板

    最近工作比较忙,未能及时更新内容,敬请了解!!! 对于可视化树的分析引出了几个有趣问题.例如,控件如何从逻辑树表示扩张成可视化树表示? 每个控件都有一个内置的方法,用于确定如何渲染控件(作为一组更基础 ...

  6. gulp VS grunt

    前公司代码一直用grunt部署, 偶然了解gulp后:学习gulp并用gulp和grunt在一小项目中实践,对两者之间的用法及区别有所了解后总结这一篇小博文:本文根据实战的项目配置文件,简单讲解实现相 ...

  7. 记Android R(SDK=30)系统执行UiAutomator1.0异常

    最近Android发布了AndroidStudio 3.6稳定版,升级后明显能体验到好多细节的提升,最大的提升莫过于可以创建Android R预览版的模拟器了,并且模拟器可以设置多个尺寸的屏幕.And ...

  8. 谈谈MySQL数据库索引

    在分析MySQL数据库索引之前,很多小伙伴对数据结构中的树理解不够深刻.因此我们由浅入深一步步探讨树的演进过程,再一步步引出MySQL数据库索引底层数据结构. 一.二叉树 二叉查找树也称为有序二叉查找 ...

  9. vue cli3 的 eslint 修改为4个空格

    只需要修改如下两个文件

  10. Natas7 Writeup(任意文件读取漏洞)

    Natas7: 页面出现了两个选项,点击后跳转,观察url发现了page参数,猜测可能存在任意文件读取漏洞. 且源码给了提示,密码在/etc/natas_webpass/natas8 中. 将/etc ...