第一部分:创建集群

在Openstack部署Kubernetes集群运行Nginx容器的步骤,其中包括:

  • 利用Murano部署Kubernetes集群
  • 配置Openstack的安全性使Kubernetes集群可以在Openstack使用
  • 下载并配置kubernetes客户端
  • 创建Kubernetes应用程序
  • 在Kubernetes上运行应用程序

现在让我们开始:

利用Murano创建Kubernetes集群

第一步是创建kubernetes集群。有几种方法都可以做到这一点,但是最简单的方式是通过部署Mirantis Openstack平台与Murano组件实现。

导入Kubernetes集群应用

第一步在Openstack社区的应用目录中获取Kubernetes集群应用,遵循以下步骤:

1、登录Horizon,进入Applications->Manage->Packages.

2、进入社区应用目录并且选择Murano Apps->Kubernetes Cluster获取Kubernetes集群应用,找到应用包本身的URL:http://storage.apps.openstack.org/apps/com.mirantis.docker.kubernetes.KubernetesCluster.zip.

3、回到Horizon界面,点击Import Package。

4、在Package Source选择URL并且添加第二步的URL地址然后点击下一步:

5、Murano自动开始下载应用所需的镜像,然后将其标记为为Murano使用;你无需做任何操作只需点击‘Import’后等待。点击Project->Images查看下载中的镜像状态显示为‘保存中’:

6、一旦他们完成保存,你可以看到镜像状态变为‘Active’:

接下来,我们将部署包Kubernetes master和minions的环境。

在Murnao环境下创建Kubernetes

1、在Horizon界面,选择Applications->Browse.,你可以在Recent Activity下看到新的应用。

2、为了简化步骤,点击Quick Deploy直接进行快速部署。

3、选项默认值,点击下一步。

4、选择Debian镜像点击创建。

5、自动进入Environment界面,此时应用已经创建但并没有部署:

6、点击‘Deploy This Environment’,在此过程中进行一系列操作:创建VMs,网络,安全组等。你可以在主环境页面查看日志:

7、当部署完成后,你可以查看状态变为Ready:

8、那么你从哪里可以访问集群呢?点击‘Latest Deployment Log’查看集群分配的IP地址:

现在你可以注意到4个不同的节点:网关-1,kube-1,kube-2和kube-3。点击Project->Compute->Instances查看这些实例,Kubernetes API运行在Kube-1上。

第二部分:访问集群

为了访问在第一部分创建的kubernetes集群,我们先创建Ubuntu VM(如果已经有Ubuntu机器可以忽略)然后进行配置来访问刚刚部署的Kubernetes API。

创建客户端VM

1. 点击Project->Compute->Intances->Launch Instance创建新的VM:

2. 你无须担心获取镜像,因为你已经有了Ubuntu Kubernetes镜像作为Murano应用的一部分下载完成了。点击‘+’选择。(你也可以选择其他的发行版)。

3. 你需要为Ubuntu镜像选择足够大的云主机类型,所以至少选择m1.small云主机类型:

4. 网络可以选择集群已有的网络,但是没有关系,我们都是利用浮动IP,只要确保它在网络上。

5. 接下来确保你有密钥对,因为我们需要它来登录机器:

6. 创建完成

7. 点击实例的下拉按钮选择绑定浮动IP,如果没有分配的浮动IP地址,点击‘+’分配一个新的浮动IP地址:

8. 选择合适的网络并且点击分配IP:

9. 将浮动IP绑定到VM上:

10. 你将看到实例上列出的新的浮动IP

11. 在登录之前,需要确保安全组允许SSH访问,点击Project->Compute->Access & Security选择默认安全组的管理规则菜单:

12. 点击+添加规则:

13. 在Rule向导中选择SSH并点击Add:

14. 在管理规则页面会看到添加的新的规则:

15. 现在使用SSH客户端通过设定的用户名和私钥访问创建的VM

现在你可以在集群中部署容器了。

第三部分:运行应用

在第二部分,你已经创建的集群,那么最后你可以准备与Kubernetes API实现交互,一般过程如下:

  • 为访问你的应用定义安全的身份认证
  • 在集群中部署容器化应用
  • 将应用暴露到外部环境提供访问

现在让我们来看看是如何操作。

为你的Kubernetes应用定义安全参数

你需要了解的第一件事是,我们有一组机器与Kubernetes API绑在一起,它可以支持多种环境,每个都有自己的安全凭证。

例如,如果你要创建依赖于特定认证授权的应用程序,我也可以创建依赖于另一个认证授权的应用,我们可以各自控制自己的应用,但是不能看到对方的应用。

1.首先我们需要创建一个新的认证凭证用来签发其他的证书。采用以下命令创建:

$ sudo openssl genrsa -out ca-key.pem 2048 $ sudo openssl req -x509 -new -nodes -key ca-key.pem -days 10000 \ -out ca.pem -subj "/CN=kube-ca"

2. 这时你应该有两个文件:ca-key.pem和ca.pem,你可以用他们来创建集群管理员密钥对。为此,你将创建私钥(admin-key.pem),之后创建一个认证签名请求(admin.csr),然后签名以创建公钥(admin.pem)。

$ sudo openssl genrsa -out admin-key.pem 2048 $ sudo openssl req -new -key admin-key.pem -out admin.csr -subj "/CN=kube-admin" $ sudo openssl x509 -req -in admin.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial \ -out admin.pem -days 365

现在你有了这些文件,就可以利用他们来配置kubernetes客户端。

下载并配置Kubernetes客户端

1. 在机器上开始下载kubectl客户端,此场景我们采用Linux,根据你的OS选择合适的方式。

$ curl -O \
https://storage.googleapis.com/kubernetes-release/release/v1.4.3/bin/linux/amd64/kubectl

2. 设置kubectl为可执行:

$ chmod +x kubectl

3. 将它移到本地目录:

$ sudo mv kubectl /usr/local/bin/kubectl

4. 现在开始设置默认集群,你需要使用从环境部署的日志中获取的URL,此外确保你提供ca.pem文件的绝对路径。

$ kubectl config set-cluster default-cluster --server=[KUBERNETES_API_URL] \ --certificate-authority=[FULL-PATH-TO]/ca.pem

5. 接下来你需要告知kubectl如何找到认证:

$ kubectl config set-credentials default-admin \ --certificate-authority=[FULL-PATH-TO]/ca.pem \ --client-key=[FULL-PATH-TO]/admin-key.pem \ --client-certificate=[FULL-PATH-TO]/admin.pem

6. 现在你需要设置环境让kubectl知道去使用这些认证:

$ kubectl config set-context default-system --cluster=default-cluster --user=default-admin $ kubectl config use-context default-system

7. 现在你应该能够看见集群信息:

$ kubectl cluster-infoKubernetes master is running at http://172.18.237.137:8080 To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

在kubernetes上运行应用

在kubernetes上运行应用十分简单,涉及容器的启动。我们之后会做详细介绍。

1.开始创建Nginx web server的部署:

$ kubectl run my-nginx --image=nginx --replicas=2 --port=80
deployment "my-nginx" created

2. 默认容器只有集群的成员可见,为了将服务暴露给外部网络,运行以下命令:

$ kubectl expose deployment my-nginx --target-port=80 --type=NodePort
service "my-nginx" exposed

3. 我们使用了NodePort类型,这意味着外部IP是正在运行的节点IP,你可以查看是否获取了服务列表:

$kubectl get servicesNAME         CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE kubernetes   11.1.0.1      <none>        443/TCP   3d my-nginx     11.1.116.61   <nodes>       80/TCP    18s

4. 这里引用的节点是kube-2和kube-3(Kube-1是API服务器),我们可以从实例页面获取它们的IP地址:

5. 但是服务列表中并没有告诉我们实际的端口数,为了获取实际端口数,可以运行以下命令:

$ kubectl describe services my-nginx
Name:                   my-nginx Namespace:              default Labels:                 run=my-nginx Selector:               run=my-nginx Type:                   NodePort IP:                     11.1.116.61 Port:                   <unset> 80/TCP NodePort:               <unset> 32386/TCP Endpoints:              10.200.41.2:80,10.200.9.2:80 Session Affinity:       None No events.

6. 这样服务在端口32386可用,但是如果你尝试访问它会发现失败:

$ curl http://172.18.237.138:32386curl: (7) Failed to connect to 172.18.237.138 port 32386: Connection timed out

7. 默认情况下会出现上述问题,因为这个端口被默认的安全组关闭,为了解决这个问题,需要创建新的安全组适用于kubernetes节点,点击Project->Compute->Access& Security->+Create Security Group。

8. 定义组名称点击‘创建安全组’。

9. 点击步骤8创建的安全组的‘管理规则’:

10. 点击‘+Add Rule’:

11. 此例中我们自定义TCP规则运行在端口32386(或者kubernetes在NodePort中分配的端口)的入口流量,你可以定义仅从特定的IP地址访问,点击‘Add’完成规则的添加。

12. 现在你可以将上述步骤设定的安全组添加到kubernetes集群中作为工作节点的实例中(kube-2和kube-3节点),点击每个实例行末的小三角选择‘编辑安全组’。

13. 在左边面板可以看到之前创建新的安全组;点击‘+’将它添加到实例中:

14. 点击‘保存’。

15. 为集群的所有工作节点添加安全组。

$ curl http://172.18.237.138:32386
<!DOCTYPE html>
<html>
<head> <title>Welcome to nginx!</title> <style>    body {        width: 35em;        margin: 0 auto;        font-family: Tahoma, Verdana, Arial, sans-serif;    } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>

16. 现在你可以重新尝试访问。

正如图所示,现在你可以访问部署在Kubernetes集群的Nginx容器。

转载于:https://www.cnblogs.com/nongchaoer/p/6283813.html

在Openstack上创建并访问Kubernetes集群相关推荐

  1. 在阿里云上部署生产级别Kubernetes集群

    阿里云是国内非常受欢迎的基础云平台,随着Kubernetes的普及,越来越多的企业开始筹划在阿里云上部署自己的Kubernetes集群. 本文将结合实战中总结的经验,分析和归纳一套在阿里云上部署生产级 ...

  2. 使用kubectl访问Kubernetes集群时的身份验证和授权

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 kubectl是日常访问和管理Kubernetes集群最为常用的工具. 当我们使用kubeadm成功引导启动(init)一个Kubernetes集群的 ...

  3. 如何访问Kubernetes集群?【Kubernetes集群X509认证方式】

    文章内容: Kubernetes集群服务端.客户端是如何通过kubeconfig文件完成认证以及用户信息识别的? 当搭建好Kubernetes集群后,可以通过kubectl get pod -A获取集 ...

  4. 手把手教你创建容器服务Kubernetes集群

    Kubernetes作为目前最流行的容器编排工具,被越来越多的用户所接受,目前也有越来越多的用户开始考虑使用Kubernetes集群来部署生产应用.那么,此时用户可能面临一个问题,如何规划和创建合适的 ...

  5. 如何在Ubuntu 16.04上创建多节点MySQL集群(MySQL-Cluster)

    翻译转载:https://www.digitalocean.com/community/tutorials/how-to-create-a-multi-node-mysql-cluster-on-ub ...

  6. 在 Linux 和 FireWire 上创建自己的 RAC 集群

    http://www.dbonline.cn/source/oracle/20040718/STR_building%20your%20RAC%20in%20Linux%20and%20FireWir ...

  7. 如何在Ubuntu 18.04上创建多节点MySQL集群

    翻译转载:https://www.digitalocean.com/community/tutorials/how-to-create-a-multi-node-mysql-cluster-on-ub ...

  8. 从外部访问Kubernetes集群中的应用

    https://zhaohuabing.com/2017/11/28/access-application-from-outside/ 前言 我们知道,kubernetes的Cluster Netwo ...

  9. 如何在ORACLE CLOUD中创建和访问容器集群丨内附官方文档链接

    墨墨导读:本文描述如何在Oracle Cloud中创建并访问容器服务.为了简单,所有的操作都是针对root隔离区. 创建允许容器运行的政策官方文档链接 这一步是必须的,否则可以增加容器容器. 官方文档 ...

  10. 在单机(物理机)上用虚拟机部署kubernetes集群

    1.部署虚拟机 详细步骤可以查看我的这篇博客 2.部署k8s (1)准备 搭建K8S集群,准备三台2核4G的虚拟机(内存⾄少2G以上),操作系统选择⽤centos 7以上版本,先在三台机器上装好doc ...

最新文章

  1. Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表
  2. 统计单词数(洛谷-P1308)
  3. spring的三种启动方式
  4. Python字典二次开发实现稀疏矩阵表示与简单计算
  5. 计算机桌面为什么没有语言栏了,电脑语言栏不见了有哪些解决方法
  6. kali 19.2 搭建ftp服务器
  7. 工业汽轮机调节系统的模糊PID控制器
  8. java利用poi为excel添加图片水印
  9. 批量Word转换成PDF,用这方法超简单
  10. 【学习笔记】计算机网络-DNS层次查询
  11. PHPCAS客户端搭建教程
  12. Chrome 添加自定义搜索引擎
  13. 一、系统间的通信技术
  14. rocketmq-常见问题总结(基本概念、高可用、中间件选型)
  15. 大数据入门学习:SQL与NOSQL数据库
  16. Recovery for HD2 Recovery ROM卡刷 app2sd+ 教程
  17. DXVA 处理交错视频
  18. linux下的iic驱动程序,实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序...
  19. 【Python蓝桥杯】特殊回文数 123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
  20. 产品界最好的产品都是程序猿出身?-技术人产品思维修炼(12)

热门文章

  1. Git学习(2)Git 安装
  2. 设置devenv.exe启动版本(转)
  3. Ajax开发框架(下)[整理]
  4. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-7.App Widgets)...
  5. 关于大型网站技术演进的思考(六)-存储的瓶颈6
  6. 国内10大广告联盟各自有哪些优势?
  7. c#的FileSystemWatcher对象监视文件的变化的事件,无休止的触发事件的解决办法
  8. 装饰模式/适配器模式/代理模式
  9. 使用ASP.NET MVC Futures 中的异步Action 【转】
  10. 支持WI-FI的blackberry