第一部分:创建集群

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-info

Kubernetes 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 services

NAME         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:32386

curl: (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容器。

在Openstack上创建并访问Kubernetes集群的更多相关文章

  1. 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式

    一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...

  2. VirtualBox上使用kubeadm安装Kubernetes集群

    之前一直使用minikube练习,为了更贴近生产环境,使用VirtualBox搭建Kubernetes集群. 为了不是文章凌乱,把在搭建过程中遇到的问题及解决方法记在了另一篇文章:安装Kubernet ...

  3. 用kubeadm创建高可用kubernetes集群后,如何重新添加控制平面

    集群信息 集群版本:1.13.1 3个控制平面,2个worker节点 k8s-001:10.0.3.4 k8s-002:10.0.3.5 k8s-003:10.0.3.6 k8s-004:10.0.3 ...

  4. 使用kubectl访问kubernetes集群

    之前访问k8s都是通过token进去dashboard,如下所示.但是现在希望通过kubectl访问k8s,所以还需要进一步的配置. 1. 安装kubectl命令行工具,配置环境变量,环境变量的值指向 ...

  5. 如何使用Rancher在OpenStack上创建K8S集群

    不可否认的是,OpenStack仍然是可行的云操作系统,并且被全世界许多互联服务提供商使用.而Rancher是业界最为广泛使用的Kubernetes管理平台,通过简洁直观的GUI集中管理企业IT中的多 ...

  6. Kubernetes — 从0到1:搭建一个完整的Kubernetes集群

    准备工作 首先,准备机器.最直接的办法,自然是到公有云上申请几个虚拟机.当然,如果条件允许的话,拿几台本地的物理服务器来组集群是最好不过了.这些机器只要满足如下几个条件即可: 满足安装 Docker ...

  7. Docker学习-Kubernetes - 集群部署

    Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...

  8. 阿里云上万个 Kubernetes 集群大规模管理实践

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 汤志敏,阿里 ...

  9. 美团点评Kubernetes集群管理实践

    背景 作为国内领先的生活服务平台,美团点评很多业务都具有非常显著.规律的”高峰“和”低谷“特征.尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长.这对集群中心的资源弹性和可用性有非常高的要 ...

随机推荐

  1. openwrt固件支持3G和4G上网卡

    http://wiki.openwrt.org/doc/howtobuild/wireless-router-with-a-3g-dongle Building image with support ...

  2. VMware vCloud与Zend Server实现PHP应用程序自动化交付

    在巴塞罗那2013年VMworld大会上,开发商VMware公司和zend公司在云管理市场上大放异彩.两家公司的产品VMware vCloud和Zend Server组合,实现了PHP程序自动化交付. ...

  3. Jumony Core 3,真正的HTML引擎

    Jumony Core 3,真正的HTML引擎,正式版发布 2013-11-28 17:22 by Ivony..., 778 阅读, 18 评论, 收藏, 编辑 Jumony是一个开源项目,已经有三 ...

  4. C++中文件的操作

    #include <iostream> #include <fstream> using namespace std; int main() { char s[27],m[27 ...

  5. 最短路模板[spfa][dijkstra+堆优化][floyd]

    借bzoj1624练了一下模板(虽然正解只是floyd) spfa: #include <cstdio> #include <cstring> #include <alg ...

  6. How To Configure Logging And Log Rotation In Apache On An Ubuntu VPS

    Introduction The Apache web server can be configured to give the server administrator important info ...

  7. SublimeText编辑器替代notepad++了

    可以考虑使用SublimeText编辑器替代notepad++了   内容目录: 插件安装配置 配置打包下载 大概是去年吧,这款编辑器神一般的出现在我面前,经过我小心翼翼的试用后发现并不是那么太顺手, ...

  8. 护眼纯黑色VS2012配色方案

    这些天由于公司项目比较忙,所以天天盯着电脑8小时,而且我的开发工具VS2012是白色背景的所以每天下班都搞的眼睛巨疼. 今天在网上找到一个很好的配色方案,所以有同样烦恼的童鞋们可以试试哦! 展示下效果 ...

  9. css中display的属性解析

    display 属性规定元素应该生成的框的类型. 他有很多属性值,见如下表格: none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会 ...

  10. Ubuntu环境变量设置

    在配置Ubuntu里面的JDK环境变量时,从网上找到的资料各异,在不同的文件里面配置,如/etc/environment./etc/profile,环境变量设置都是可以的.但是难免会有其它的疑问,不同 ...