求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   模型库  
会员   
 


AI 智能化软件测试方法与实践
5月23-24日 上海+在线



人工智能.机器学习TensorFlow
5月22-23日 北京



图数据库与知识图谱
5月22-23日 北京
 
 
 

Kubernetes教程
Kubernetes概述
Kubernetes设计架构
kubernetes设计理念
创建Kubernetes集群
基于Docker本地运行Kubernetes
使用Vagrant
本地运行Kubrenetes v1.0
Google Computer Engine入门
AWS EC2快速入门
在Azure上使用CoreOS和Weave的 Kubernetes
从零开始k8s
CoreOS部署Kubernetes集群
CloudStack部署Kubernetes集群
vSphere部署Kubernetes集群
Ferdora部署Kubernetes集群
CentOS部署Kubernetes集群
Ubuntu物理节点上部署Kubernets集群
Mesos部署Kubernetes集群
Kubernetes用户指南:应用程序管理
名词解释 Pods
名词解释 Labels
名词解释:Namespace
名词解释 Replication Controller
名词解释:Node
名词解释:ReplicaSets
名词解释 Services
名词解释 Volumes
名词解释:PV/PVC/StorageClass
名称解释:Deployment
名词解释:Secret
名词解释:StatefulSet
名词解释:DaemonSet
名词解释:Service Account
名词解释:CronJob
名词解释:Job
名词解释:Security Context和PSP
名词解释:Resource Quotas
名词解释:Network Policy
名词解释:Ingress
名词解释:ThirdPartyResources
名词解释:ConfigMap
名词解释:PodPreset
配置Kubernetes
管理应用:部署持续运行的应用
Horizontal Pod Autoscaling
管理应用:连接应用
管理应用: 在生产环境中使用Pods和容器
Kubernetes UI
Kube-API Server
授权插件
认证插件
API Server端口配置
Admission Controller
Service Accounts集群管理指南
使用Kubernetes在云上原生部署cassandra
Spark例子
Storm 示例
示例: 分布式任务队列 Celery, RabbitMQ和Flower
Kubernetes在Hazelcast平台上部署原生云应用
Meteor on Kuberenetes
配置文件使用入门
环境向导示例
在Kubernetes上运行你的第一个容器
kubectl
安装和设置kubectl
kubectl annotate
kubectl api-versions
kubectl apply
kubectl attach
kubectl cluster-info
kubectl config
kubectl config set-cluster
kubectl config set-context
kubectl config set-credentials
kubectl config set
kubectl config unset
kubectl config use-context
kubectl config view
kubectl create
kubectl delete
kubectl describe
kubectl edit
kubectl exec
kubectl logs
kubectl version
故障排查
应用程序相关的故障排查
 
 

Mesos部署Kubernetes集群
 
1661 次浏览
60次  

关于在Mesos上运行Kubernetes

Mesos允许Kubernetes和其他Mesos构架,例如:Hadoop,Spark和Chronos来动态分享集群资源。

Mesos确保同一集群上的运行的不同架构上的应用之间相互隔离,和较公平资源的分配。

Mesos集群几乎可以部署在任何IaaS云服务上或是你自己的数据中心。当Kubernetes运行在Mesos上,你可以轻松将Kubernetes上运行的任务在任意云平台之间转移。

本指南将具体介绍如何架设在Mesos集群上运行Kubernetes。我们一步一步指导你怎么在Mesos集群上添加Kubernetes和如何启动你的第一个pod来运行nginx网站服务器。

注意: 现有实现上的已知问题,集中式的监控和日志功能尚不支持。如果你发现以下步骤有什么问题,请在kubernetes-mesos项目报告这个问题。

前提条件

理解Apache Mesos

一个运行在Google Compute Engine的Mesos集群

一个连接到这个集群VPN连接

一台在集群里并可以作为Kubernetes主节点的主机,这个主机需安装一下软件:

GoLang > 1.2

make (i.e. build-essential)

Docker

注意: 你可以, 但是你不要在运行Mesos master的主机上部署Kubernetes-Mesos。

部署Kubernetes-Mesos

用SSH登入Kubernetes主节点。参考以下命令行时需要替换其中的地址为正确的IP地址。

ssh jclouds@${ip_address_of_master_node}

编译Kubernetes-Mesos。

git clone https://github.com/kubernetes/kubernetes
cd kubernetes
export KUBERNETES_CONTRIB=mesos
make

设置环境变量。 可以用 hostname -i 来获得主节点的内部IP地址。

请注意KUBERNETES_MASTER用来定义API的endpoint的。 如果 ~/.kube/config 已存在并指向其他endpoint, 你需要在最后一步使用kubectl时加上 –server=${KUBERNETES_MASTER} 选项。

部署etcd

启动etcd并监测它是否正常运行:

sudo docker run -d --hostname $(uname -n) --name etcd \
-p 4001:4001 -p 7001:7001 quay.io/coreos/etcd:v2.0.12 \
--listen-client-urls http://0.0.0.0:4001 \
--advertise-client-urls http://${KUBERNETES_MASTER_IP}:4001

$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd7bac9e2301 quay.io/coreos/etcd:v2.0.12 "/etcd" 5s ago Up 3s 2379/tcp, 2380/... etcd

最好检测一下你可以连接到你的etcd服务

curl -L http://${KUBERNETES_MASTER_IP}:4001/v2/keys/

如果连接没有问题,你可以看见所显示的etcd秘钥(如果有的话)。

启动Kubernetes-Mesos服务

设置正确的环境变量 PATH 以便访问Kubernetes-Mesos中的二进制运行文件:

export PATH="$(pwd)/_output/local/go/bin:$PATH"

确认你的Mesos master:根据具体Mesos的安装,Mesos master的地址可能会是 host:port 的样子,比如 mesos-master:5050 的 host:port , 也可能是ZooKeeper的URL,比如 zk://zookeeper:2181/mesos 。在生产环境中,推荐使用ZooKeeper的URL,这样可避免Kubernetes在Mesos master的地址有变化的时候出现问题。

export MESOS_MASTER=<host:port or zk:// url>

在当前目录下新建一个云配置文件 mesos-cloud.conf ,文件内写入一下内容:

现在启动kubernetes-mesos的API服务和主节点上的scheduler:

$ km apiserver \
--address=${KUBERNETES_MASTER_IP} \
--etcd-servers=http://${KUBERNETES_MASTER_IP}:4001 \
--service-cluster-ip-range=10.10.10.0/24 \
--port=8888 \
--cloud-provider=mesos \
--cloud-config=mesos-cloud.conf \
--secure-port=0 \
--v=1 >apiserver.log 2>&1 &

$ km controller-manager \
--master=${KUBERNETES_MASTER_IP}:8888 \
--cloud-provider=mesos \
--cloud-config=./mesos-cloud.conf \
--v=1 >controller.log 2>&1 &

$ km scheduler \
--address=${KUBERNETES_MASTER_IP} \
--mesos-master=${MESOS_MASTER} \
--etcd-servers=http://${KUBERNETES_MASTER_IP}:4001 \
--mesos-user=root \
--api-servers=${KUBERNETES_MASTER_IP}:8888 \
--cluster-dns=10.10.10.10 \
--cluster-domain=cluster.local \
--v=2 >scheduler.log 2>&1 &

使用Disown显示后台运行的任务。

disown -a

验证KM服务

设置正确的环境变量 PATH 以便访问kubectl:

export PATH=<path/to/kubernetes-directory>/platforms/linux/amd64:$PATH

使用 kubectl 和kubernetes-mesos交互:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
# 注意: 显示的service IP有可能不同
$ kubectl get services
NAME LABELS SELECTOR IP(S) PORT(S)
k8sm-scheduler component=scheduler,provider=k8sm 10.10.10.113 10251/TCP
kubernetes component=apiserver,provider=kubernetes 10.10.10.1 443/TCP

最后, 登陆地址 http://<mesos-master-ip:port> 访问Kubernetes服务网页。确定你有有效的VPN连接。点击 `Frameworks`标签并寻找一个名叫”Kubernetes”的激活framework。

启动一个pod

在本地文件里写入描述pod的JSON:

$ cat <<EOPOD >nginx.yaml


apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
EOPOD

用 kubectl CLI把这个pod的描述发送到Kubernetes:

$ kubectl create -f ./nginx.yaml
pods/nginx

dockerd 会从Internet下载相对应的镜像,这个过程大概持续一到两分钟的时间。 我们可以用 kubectl CLI去观察pod的状态:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 14s

在Mesos的网页上确认每一个pod都正常运行。点击Kubernetes的framework选项后,会显示在Kubernetes启动pod的Mesos任务。

启动kube-dns

Kube-dns是为Kubernetes集群提供基于DNS的发现服务的插件。参见Kubernetes里的DNS以获得更多信息。

kube-dns 插件运行在集群内的pod上。这个pod包涵三个运行在一起的容器:

一个本地etc实例

DNS服务器skydns

完成Kubernetes集群状态到skydns交互的kube2sky进程

skydns容器通过53端口向集群提供DNS服务。 etcd communication works via local 127.0.0.1communication

我们假设 kube-dns会使用

service IP 10.10.10.10

和 cluster.local 域名。

注意这两个值已经在设置apiserver时使用了。

在cluster/addons/dns/skydns-rc.yaml.in目录下可以找到用一个replication controller建立一个有3个容器的pod的模版。为了获得一个正确的replication controller的yaml文件,以下这几步是必须的:

将 `替换为 1`

将 `替换为 cluster.local.`

将参数 –kube_master_url=${KUBERNETES_MASTER} 添加到kube2sky容器的命令行中

除此之外service模版cluster/addons/dns/skydns-svc.yaml.in需要一下变动:

将 `替换为 10.10.10.10`.

自动化这一步:

sed -e "s/{{ pillar\['dns_replicas'\] }}/1/g;"\
"s,\(command = \"/kube2sky\"\),\\1\\"$'\n'" - --kube_master_url=${KUBERNETES_MASTER}
"s/{{ pillar\['dns_domain'\] }}/cluster.local/g" \
cluster/addons/dns/skydns-rc.yaml.in > skydns-rc.yaml
sed -e "s/{{ pillar\['dns_server'\] }}/10.10.10.10/g" \
cluster/addons/dns/skydns-svc.yaml.in > skydns-svc.yaml

现在kube-dns pod和service已经启动了:

kubectl create -f ./skydns-rc.yaml
kubectl create -f ./skydns-svc.yaml

使用 kubectl get pods –namespace=kube-system 来检查pod上3个容器正常运行。请注意运行kube-dns的pod是在 kube-system 的命名空间下,不是在 default 下面。

为了监测新的DNS服务正常,我们启动一个pod运行busybox来查找DNS。第一步新建一个 busybox.yaml 文件:

cat <<EOF >busybox.yaml


apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
restartPolicy: Always
EOF

之后启动pod:

kubectl create -f ./busybox.yaml

当pod启动和正常运行后,运行以下命令找到Kubernetes主节点的service的地址。通常情况下地址为10.10.10.1。

kubectl exec busybox -- nslookup kubernetes

如果一切运行正常,你会看到一下显示:

Server: 10.10.10.10
Address 1: 10.10.10.10
Name: kubernetes
Address 1: 10.10.10.1

下一步?

试着运行一下Kubernetes examples.

注意: 一些示例需要在集群上安装Kubernetes DNS。我们未来会在本指南里加入如何支持Kubernetes DNS的介绍的。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1661 次浏览
60次
 捐助