第一部分:创建集群
在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集群的更多相关文章
-
【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式
一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...
-
VirtualBox上使用kubeadm安装Kubernetes集群
之前一直使用minikube练习,为了更贴近生产环境,使用VirtualBox搭建Kubernetes集群. 为了不是文章凌乱,把在搭建过程中遇到的问题及解决方法记在了另一篇文章:安装Kubernet ...
-
用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 ...
-
使用kubectl访问kubernetes集群
之前访问k8s都是通过token进去dashboard,如下所示.但是现在希望通过kubectl访问k8s,所以还需要进一步的配置. 1. 安装kubectl命令行工具,配置环境变量,环境变量的值指向 ...
-
如何使用Rancher在OpenStack上创建K8S集群
不可否认的是,OpenStack仍然是可行的云操作系统,并且被全世界许多互联服务提供商使用.而Rancher是业界最为广泛使用的Kubernetes管理平台,通过简洁直观的GUI集中管理企业IT中的多 ...
-
Kubernetes — 从0到1:搭建一个完整的Kubernetes集群
准备工作 首先,准备机器.最直接的办法,自然是到公有云上申请几个虚拟机.当然,如果条件允许的话,拿几台本地的物理服务器来组集群是最好不过了.这些机器只要满足如下几个条件即可: 满足安装 Docker ...
-
Docker学习-Kubernetes - 集群部署
Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...
-
阿里云上万个 Kubernetes 集群大规模管理实践
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 汤志敏,阿里 ...
-
美团点评Kubernetes集群管理实践
背景 作为国内领先的生活服务平台,美团点评很多业务都具有非常显著.规律的”高峰“和”低谷“特征.尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长.这对集群中心的资源弹性和可用性有非常高的要 ...
随机推荐
-
Silverlight浮动窗体 floatablewindow 非模态对话框
1.http://www.cnblogs.com/yinxiangpei/articles/2613913.html 说明:Silverlight的ChildWindow组件给我们的开发带来了便利,比 ...
-
jquery 中 form的使用
纠结了一下 form 表单的提交响应事件,因为在表单中,form标签会让浏览器自动提交,而我一直写的是 $(".btn").click(function()) 提交按钮的响应事件, ...
-
hdu1043Eight (经典的八数码)(康托展开+BFS)
建议先学会用康托展开:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description The 15-puzzle ...
-
mysql中 decimal、numeric数据类型
例 如:salary DECIMAL(5,2) 在这个例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数.在这种情况下,因 ...
-
Java之面向对象例子(一)
定义一个人类,给这个类定义一个从身份证获取生日的方法,输入身份证,获取出生年月日 //主方法 package com.hanqi.maya.model; import java.util.Scanne ...
-
统计php-fpm内存占用
查看php-fpm的内存占用 1.查看php-fpm的进程个数 ps -ef |grep "php-fpm"|grep "pool"|wc -l 2.查看每个p ...
-
hdfoo站点开发笔记
为了安全,也要兼顾编辑器切换管理 开发时不必管目录名称的事, 只是在部署的时候,才修改应用目录和tp目录的名字就行了. 为了提高tp的加载效率, 始终给app和tp以绝对路径.就是以 realpath ...
-
svn强制commit写log
https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-howto-minlogmsgsize.html Force users to ent ...
-
Redis 基础:Redis 事件处理
Redis 事件处理 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件(file event):Redis服务器通过套接字与客户端(或其他Redis服务器)进行连接,而文件事 ...
-
在Hyper-V Linux VM如何选择LIS Linux集成服务
导读 很多工程师都知道,如果你选择在 Hyper-V 中运行 Linux guest VM,要获得最好的使用体验,必需针对你所使用的 Linux 发行版和使用场景选择 Linux Integratio ...