技术分享:在 OpenStack 上使用 Kubernents

Kubernetes(k8s)是今年来非常火的一项容器编排引擎,k8s使部署容器化的应用简单并且高效,并提供了应用部署,规划,更新,维护等服务。你可能希望在现有的云平台上安装并体验 Kubernetes 。一开始你可能会创建一些虚拟机,然后根据k8s的安装文档在 创建的虚拟机上手动安装k8s服务,然后把这些虚拟机合并为一个集群。这自然是最直观的方法,但其实 OpenStack 社区为需要在 OpenStack 上搭建容器编排服务的用户提供了快速搭建容器集群的项目 Magnum。

技术分享:在 OpenStack 上使用 Kubernents

Magnum是OpenStack容器团队推出的一个项目,在OpenStack的Wiki中它是这么介绍Magnum的 > Magnum is an OpenStack API service developed by the OpenStack Containers Team making container orchestration engines such as Docker Swarm, Kubernetes, and Apache Mesos available as first class resources in OpenStack。

Magnum 是让容器编排引擎如 k8s、Docker Swarm 和 Mesos 作为 OpenStack 中“首类资源”的项目,所谓的首类资源 可以理解为OpenStack中虚拟机、网络、存储等基本资源,这些资源底端细节被屏蔽了,用户不需要关心其具体实现。 所以Magnum为我们屏蔽了容器集群的创建细节,只需要一些参数,它就可以为我们提供一个完整的容器集群环境。 那通过Magnum创建一个k8s集群有多简单呢?其实就像创建一台虚拟机一样。

首先我们需要创建一个创建Kubernetes使用的Fedora Atomic镜像, 并将其命名为fedora-atomic。镜像下载地址点击这里

openstack coe cluster template create k8s-cluster-template \
--image fedora-atomic \
--keypair testkey \
--external-network public \
--dns-nameserver 8.8.8.8 \
--flavor m1.small \
--master-flavor m1.small \
--docker-volume-size 5 \
--network-driver flannel \
--coe kubernetes

这里,我们创建一个名为k8s-cluster-template的集群模板,这个集群使用我们刚才制作好的 fedora-atomic镜像,并使用kubernetes作为容器编排引擎,testkey是集群创建成功用于ssh连接 到集群虚拟机的密钥,主节点和从属节点虚拟机硬件配置都是m1.small

接着我们可以开始创建真正的k8s集群

openstack coe cluster create k8s-cluster \
--cluster-template k8s-cluster-template \
--master-count 2 \
--node-count 5

现在我们使用之前创建模板创建一个名为k8s-cluster的kubernets集群,这个集群有2个主节点和5 个从属节点。输入命令后需要等待一段时间(取决于虚拟机性能)直到集群状态变为CREATE_COMPLETE, Magnum将为你准备好一切。如果创建失败,通常是资源不足,请检查你的资源配额是否足够,适当修 该集群配置。如果问题还是没能解决,可以参考官方OpenStack Docs: Magnum Troubleshooting Guide

如果没有错误发生,一个功能完备的集群k8s集群就创建了,我们登上主节点就可以对集群进行管理

ssh -i testkey.pem [email protected]

#查看k8s版本
[fedora@k8s-dljxfj7i2tmu-master-0 ~]$ kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-03-09×××1:55:06Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-03-09×××1:55:06Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}

#查看节点状态
[fedora@k8s-dljxfj7i2tmu-master-0 ~]$ kubectl get nodes
NAME STATUS AGE
k8s-dljxfj7i2tmu-master-0 Ready,SchedulingDisabled 4m
k8s-dljxfj7i2tmu-master-1 Ready,SchedulingDisabled 4m
k8s-dljxfj7i2tmu-minion-0 Ready 2m
k8s-dljxfj7i2tmu-minion-1 Ready 2m
k8s-dljxfj7i2tmu-minion-2 Ready 2m
k8s-dljxfj7i2tmu-minion-3 Ready 2m
k8s-dljxfj7i2tmu-minion-4 Ready 2m

#查看pods
[fedora@k8s-dljxfj7i2tmu-master-0 ~]$ kubectl get pods
No resources found.

可以看到集群已经安装1.5版本的k8s,7个节点都已经被加入集群,状态都是可用,不过上面还没有 一个pod在运行。

现在创建一个RC来测试以下我们的环境能否正常工作

apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 1
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:

  • name: nginx
    image: nginx
    ports:
    • containerPort: 80
      [fedora@k8s-dljxfj7i2tmu-master-0 ~]$ kubectl get pods
      NAME READY STATUS RESTARTS AGE
      nginx-7z2kq 1/1 Running 0 3m

可以看到通过RC部署的容器已经跑起来了。
现在来尝试使用k8s的包管理工具helm来安装一个wordpress。

首先你需要安装helm,可以参照安装文档在集群上安装helm 安装好helm后首次使用需要在集群上安装Tiller,这个过程需要访问的一些网站可能会无法访问,所以需要设置镜像:

helm init --upgrade \
-i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.5.1 \
--stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

安装完成后将看到类似如下的输出:

$HELM_HOME has been configured at /home/fedora/.helm.
Tiller (the Helm server-side component) has been upgraded to the current version.
Happy Helming!

现在只需要像安装软件包一样的命令就可以在集群上部署wordpress:

helm install stable/wordpress --name wordpress-demo

NAME: wordpress-demo
LAST DEPLOYED: Fri Aug 15 16:15:55 2018
NAMESPACE: default
STATUS: DEPLOYED

helm会使用默认的模板安装wordpress应用,你可以在Github上找到它。 现在wordpress应用运行在集群的Pod里,可以通过检查集群pod来确认应用已经在运行:

[fedora@k8s-dljxfj7i2tmu-master-0 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
wordpress-demo-wordpress-…89501 1/1 Running 0 6m
wordpress-demo-mariadb-…..25153 1/1 Running 0 6m

为了将WordPress图形化界面可以被外部访问,需要使用端口转发

[fedora@k8s-dljxfj7i2tmu-master-0 ~]$ kubectl port-forward wordpress-demo-wordpress-…89501 8080:80

假设集群主节点的IP为172.16.10.1,那么通过浏览器访问 http://172.16.10.1:8080 你可以看到WordPress的界面 :

技术分享:在 OpenStack 上使用 Kubernents

总结一下,通过Magnum你可以在OpenStack上像创建一台虚拟机一样创建出一套开箱k8s集群,无需担心k8s服务搭建、网络设计、服务发现等等琐事,Magnum为你打理一切,怎么样,打开OpenStack Magnum的界面来体验无缝部署应用的快感吧。

猜你喜欢

转载自blog.51cto.com/99cloud/2286736
今日推荐