一个混合(IBM Power 和 x86)架构场景中的 Mesos 和 Kubernetes

关于 Mesos 和 Kubernetes

目前,有多种用于 Linux® 的流行的容器集群系统,比如 Kubernetes、Mesos 等。Google Kubernetes 和 Apache Mesos 可能将容器部署到容器内的两个最常用的工具。二者都被创建为辅助工具,用于管理容器集群。但是,它们的方法有很大区别。

我们的客户始终有一个包含 IBM® Power® 和 x86 的混合架构。所以,本文将提供将 Mesos 和 Kubernetes 应用于混合架构(包括 Power 和 x86)环境上的 Linux 中的参考解决方案。

请参见图 1,以便了解这个参考架构。

图 1. 混合(Power 和 x86)架构上的 Kubernetes 和 Mesos 的架构图

部署

现在让我们在混合架构上设置和部署 Mesos 和 Kubernetes 的 Docker 集群。在这里,我们将对主节点中的每个模块使用 Docker 镜像。

前提条件

  • 了解 Mesos、Kubernetes 和 Docker
  • 一个混合架构集群,其中包含:
    • Linux 终端、Docker 和 git
    • 至少 4 个 x86 节点和 1 个 IBM Power 节点
  • 禁用每个节点中的防火墙

环境

我们至少需要 3 个包含 CentOS 7.2 的节点,以便安装 ZooKeeper 集群、Mesos 主集群、etcd 集群和 Kubernetes-Mesos 集群。

  • 192.168.1.2 (x86)
  • 192.168.1.3 (x86)
  • 192.168.1.4 (x86)

我们需要至少两个包含 CentOS 7.2 的节点来安装 Mesos 从属集群。

  • 192.168.1.5 (x86)
  • 192.168.1.6 (IBM Power)

部署 ZooKeeper 集群

使用根用户特权执行以下步骤,以便部署 ZooKeeper 集群:

在 192.168.1.2 中:

docker run -d
-e MYID=1
-e SERVERS=192.168.1.2,192.168.1.3,192.168.1.4
--name=zookeeper --net=host --restart always powerkvm/zookeeper-x86

在 192.168.1.3 中:

docker run -d 					-e MYID=2 					-e SERVERS=192.168.1.2,192.168.1.3,192.168.1.4
--name=zookeeper --net=host --restart always powerkvm/zookeeper-x86

在 192.168.1.4 中:

docker run -d 					-e MYID=3
-e SERVERS=192.168.1.2,192.168.1.3,192.168.1.4 					--name=zookeeper --net=host --restart always powerkvm/zookeeper-x86

部署 Mesos 主集群

使用根用户特权执行以下步骤,以便部署 Mesos 主集群:

在 192.168.1.2 中:

docker run -d -e MESOS_HOSTNAME=192.168.1.2 -e MESOS_IP=192.168.1.2 -e MESOS_QUORUM=2
-e MESOS_ZK=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
--name mesos-master --net host --restart always powerkvm/mesos-master-x86

在 192.168.1.3 中:

docker run -d -e MESOS_HOSTNAME=192.168.1.3 -e MESOS_IP=192.168.1.3 -e MESOS_QUORUM=2 					-e MESOS_ZK=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
--name mesos-master --net host --restart always powerkvm/mesos-master-x86

在 192.168.1.4 中:

docker run -d -e MESOS_HOSTNAME=192.168.1.4 -e MESOS_IP=192.168.1.4 -e MESOS_QUORUM=2 					-e MESOS_ZK=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos 					--name mesos-master --net host --restart always powerkvm/mesos-master-x86

部署 etcd 集群

使用根用户特权执行以下步骤,以便部署 etcd 集群:

在 192.168.1.2 中:

docker run -d -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379
--name etcd --restart always quay.io/coreos/etcd:v2.2.1
-name etcd0
-advertise-client-urls http://192.168.1.2:2379,http://192.168.1.2:4001
-listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001
-initial-advertise-peer-urls http://192.168.1.2:2380
-listen-peer-urls http://0.0.0.0:2380 				    -initial-cluster-token etcd-cluster-1
-initial-cluster etcd0=http://192.168.1.2:2380,etcd1=http://192.168.1.3:2380,etcd2=http://192.168.1.4:2380				    -initial-cluster-state new

在 192.168.1.3 中:

docker run -d -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379
--name etcd --restart always quay.io/coreos/etcd:v2.2.1
-name etcd0 					-advertise-client-urls http://192.168.1.3:2379,http://192.168.1.3:4001
-listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001
-initial-advertise-peer-urls http://192.168.1.3:2380
-listen-peer-urls http://0.0.0.0:2380 					-initial-cluster-token etcd-cluster-1
-initial-cluster etcd0=http://192.168.1.2:2380,etcd1=http://192.168.1.3:2380,etcd2=http://192.168.1.4:2380					-initial-cluster-state new

在 192.168.1.4 中:

docker run -d -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379 					--name etcd --restart always quay.io/coreos/etcd:v2.2.1 					-name etcd0
-advertise-client-urls http://192.168.1.4:2379,http://192.168.1.4:4001
-listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001
-initial-advertise-peer-urls http://192.168.1.4:2380
-listen-peer-urls http://0.0.0.0:2380 					-initial-cluster-token etcd-cluster-1
-initial-cluster etcd0=http://192.168.1.2:2380,etcd1=http://192.168.1.3:2380,etcd2=http://192.168.1.4:2380					-initial-cluster-state new

部署 Kubernetes-Mesos 集群

使用根用户特权执行以下步骤,以便部署 Kubernetes-Mesos 集群:

apiserver、controller manager scheduler 部署在 192.168.1.2 中:

  1. mesos-cloud.conf 添加到 /mnt/k8s 中:
    cat /mnt/k8s/mesos-cloud.conf
    [mesos-cloud]
    mesos-master = zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
  2. 运行每个 Docker 镜像。
    docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name apiserver --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km apiserver 					--address=192.168.1.2 					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001					--service-cluster-ip-range=10.10.10.0/24
    --port=8888
    --cloud-provider=mesos 					--cloud-config=/mnt/k8s/mesos-cloud.conf
    --secure-port=0
    --v=1
    
    docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name controller-manager --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km controller-manager 					--master=192.168.1.2:8888
    --cloud-provider=mesos 					--cloud-config=/mnt/k8s/mesos-cloud.conf 					--v=1
    
    docker run -d --privileged --name scheduler --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha kmscheduler 					--address=192.168.1.2 					--mesos-master=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos 					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001					--mesos-user=root 					--api-servers=192.168.1.2:8888 					--cluster-dns=10.10.10.10 					--cluster-domain=cluster.local 					--v=2

apiserver、controller manager scheduler 部署在 192.168.1.3 中:

  1. mesos-cloud.conf 添加到 /mnt/k8s 中:
    cat /mnt/k8s/mesos-cloud.conf
    [mesos-cloud]
    mesos-master = zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
  2. 运行每个 Docker 镜像:
    docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name apiserver --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km apiserver 					--address=192.168.1.3 					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001					--service-cluster-ip-range=10.10.10.0/24 					--port=8888 					--cloud-provider=mesos 					--cloud-config=/mnt/k8s/mesos-cloud.conf 					--secure-port=0 					--v=1
    
    docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name controller-manager --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km controller-manager 					--master=192.168.1.3:8888 					--cloud-provider=mesos 					--cloud-config=/mnt/k8s/mesos-cloud.conf 					--v=1
    
    docker run -d --privileged --name scheduler --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km scheduler 					--address=192.168.1.3 					--mesos-master=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos 					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001					--mesos-user=root 					--api-servers=192.168.1.3:8888 					--cluster-dns=10.10.10.10 					--cluster-domain=cluster.local
    --v=2

apiserver、controller manager scheduler 部署在 192.168.1.4 中:

  1. mesos-cloud.conf 添加到 /mnt/k8s 中:
    cat /mnt/k8s/mesos-cloud.conf
    [mesos-cloud]
    mesos-master = zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
  2. 运行每个 Docker 镜像:
    docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name apiserver --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km apiserver 					--address=192.168.1.4 					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001					--service-cluster-ip-range=10.10.10.0/24 					--port=8888 					--cloud-provider=mesos 					--cloud-config=/mnt/k8s/mesos-cloud.conf 					--secure-port=0
    --v=1
    
    docker run -d --privileged -v /mnt/k8s:/mnt/k8s --name controller-manager --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km controller-manager 					--master=192.168.1.4:8888 					--cloud-provider=mesos 					--cloud-config=/mnt/k8s/mesos-cloud.conf 					--v=1
    
    docker run -d --privileged --name scheduler --net=host --restart always powerkvm/k8s-mesos-x86:v1.4.0-alpha km scheduler 					--address=192.168.1.4 					--mesos-master=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos 					--etcd-servers=http://192.168.1.2:4001,http://192.168.1.3:4001,http://192.168.1.4:4001					--mesos-user=root 					--api-servers=192.168.1.4:8888 					--cluster-dns=10.10.10.10 					--cluster-domain=cluster.local 					--v=2

部署 Mesos 从属集群

用于 Mesos 从属节点的 Docker 镜像仍在测试中。所以,我们可以使用包来安装它。

将 Mesos 从属节点部署到 192.168.1.5 (x86) 中:

1. 安装 Mesos 从属节点。

rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm && 					yum -y install mesos

2. 配置 Mesos 从属节点。

#cat > /etc/mesos/zk <

3.启动 mesos-slave 服务。

systemctl restart mesos-slave

将 Mesos 从属节点部署到 192.168.1.6(Power) 中:

  1. 添加存储库。
    #cat > /etc/yum.repos.d/cluster.repo <
    
  2. 安装 Mesos 从属节点。
    yum -y install mesos-0.22.1 python-mesos
  3. 配置 Mesos 从属节点。

    编辑 /etc/sysconfig/mesos-slave 中的变量(下面已突出显示):

    # This file contains environment variables that are passed to mesos-slave.
    # To get a description of all options run mesos-slave --help; any option
    # supported as a command-line option is also supported as an environment
    # variable.
    
    # The mesos master URL to contact. Should be host:port for
    # non-ZooKeeper based masters, otherwise a zk:// or file:// URL.
    MESOS_master=zk://192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181/mesos
    MESOS_EXECUTOR_REGISTRATION_TIMEOUT=10mins
    MESOS_IP=192.168.1.6
    
    # For isolated sandbox testing
    # MESOS_master=127.0.0.1:5050
    
    # For a complete listing of options execute mesos-slave --help
    MESOS_log_dir=/var/log/mesos
    MESOS_work_dir=/var/run/mesos
    MESOS_containerizers=docker,mesos
    
    # systemd cgroup integration
    MESOS_isolation=cgroups/cpu,cgroups/mem
    MESOS_cgroups_root=system.slice/mesos-slave.service
    MESOS_cgroups_hierarchy=/sys/fs/cgroup
  4. 启动 mesos-slave 服务。
    service emsos-slave start

部署 Kubernetes 仪表板

用于该混合架构的 Kubernetes 和 Mesos 框架已完成。现在,我们应该部署它的仪表板。对于本例,在 x86 架构的从属节点中运行该仪表板。

首先,我们应该为每个从属节点添加标签。

  1. 为每个基于 x86 架构的从属节点添加标签 arch=x86
    docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl label nodes 192.168.1.5 arch=x86
  2. 为每个基于 Power 架构的从属节点添加标签 arch=ppc64le
    docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl label nodes 192.168.1.6 arch=ppc64le
  3. 检查结果。
    docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl get nodes --show-labels
    NAME                       STATUS         AGE           LABELS
    192.168.1.5                Ready          2d            arch=x86,kubernetes.io/hostname=192.168.1.5
    192.168.1.6                Ready          2d            arch=ppc64le,kubernetes.io/hostname=192.168.1.6
  4. 下载 Kubernetes 仪表板。
    git clone https://github.com/kubernetes/dashboard.git /root/dashboard
  5. nodeSelectorapiserver 添加到 kubernetes-dashboard-canary.yaml 中
    cat /root/dashboard/src/deploy/kubernetes-dashboard-canary.yaml
    …
    spec:
    containers:
    - name: kubernetes-dashboard-canary
    image:gcr.io/google_containers/kubernetes-dashboard-amd64:canary
    …
    args:
    - --apiserver-host=http://192.168.1.2:8888
    …
    nodeSelector:
    arch: x86 …
  6. 为该仪表板运行 Kubernetes 服务。
    docker run --privileged -v /root/dashboard:/root/dashboard -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl create -f /root/dashboard/src/deploy/kubernetes-
    dashboard-canary.yaml --namespace="kube-system"
  7. 检查服务和 pod。

    检查服务:

    docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl get services --namespace="kube-system"
    NAME                  CLUSTER-IP       EXTERNAL-IP     PORT(S)     AGE
    dashboard-canary      10.10.10.14               80/TCP      21m

    获取仪表板服务的 nodePort

    docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl describe services dashboard-canary --namespace="kube-system"
    Name: dashboard-canary
    Namespace: kube-system
    Labels: app=kubernetes-dashboard-canary
    Selector: app=kubernetes-dashboard-canary
    Type: NodePort
    IP: 10.10.10.14
    Port:  80/TCP
    NodePort:  31810/TCP
    Endpoints: 
    Session Affinity: None

    检查 pod:

    docker run --privileged -v /root/dashboard:/root/dashboard -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl get pods --namespace="kube-system"
    NAME                                 READY    STATUS    RESTARTS    AGE
    kubernetes-dashboard-canary-x5wqg    1/1      Running   0           1h

Web UI

现在,我们已成功部署了 Kubernetes 和 Mesos。让我们检查一下 Mesos 的网页和仪表板。

对于 Mesos UI,我们可以通过访问任何 Mesos 主节点的 IP 和端口 5050 来访问主页。

例如, [任何 Mesos 主节点的 IP ] :5050

图 2. Mesos 主页

对于仪表板,我们可以通过访问任何 Mesos 从属节点的 IP 和 nodePort 来访问主页。

例如: [任何 Mesos 从属节点的 IP] : nodePort.

可以从仪表板服务的描述中获得 nodePort。

也可以使用以下命令获得 nodePort:

docker run -e KUBERNETES_MASTER_IP=192.168.1.2 -e KUBERNETES_MASTER=192.168.1.2:8888 powerkvm/k8s-mesos-x86:v1.4.0-alpha kubectl describe services dashboard-canary --namespace="kube-system"

图 3. Kubernetes 仪表板

结束语

本文介绍了如何将 kubernetes 和 Mesos 部署在一个混合(Power 和 x86)架构场景中。还介绍了如何使用 labelnodeSelector 将该服务部署到 x86 架构上。

参考资料

请参阅 Mesos 上的 Kubernete 的帮助指南,以了解完整的 x86 架构。

  • 版权声明: 本文源自互联网, 于3个月前,由整理发表,共 7456字。
  • 原文链接:点此查看原文