专栏首页Tungsten Fabric中文社区使用Ansible部署器设置一个小型的TF+K8s实验室
原创

使用Ansible部署器设置一个小型的TF+K8s实验室

Kubernetes绝对是SDN和虚拟化世界中最热门的趋势之一。简单来说,对于虚拟机我们有OpenStack,而对于容器那就是Kubernetes了(或者RedHat的商业版本OpenShift)。

和虚拟机一样,容器也需要网络,特别是需要一个软件来管理这个虚拟网络。在Kubernetes的世界里,我们可以把这个所谓的软件称为CNI,即容器网络接口(Container Network Interface)。

我们不打算描述Kubernetes的基础和基本概念;要想了解什么是K8s,以及对docker容器的一些基本理解,我建议阅读下面这篇伟大的文章(它还谈到了作者工作的一个特定的“模块”,但以一种非常酷的方式解释了基本概念)。 https://medium.com/@geraldcroes/kubernetes-traefik-101-when-simplicity-matters-957eeede2cf8

在这里,我们将专注于使用Tungsten Fabric创建一个运行Kubernetes的小型实验室。

架构

我们将建立一个这样的实验室:

所有的4个元素可能是裸机服务器,也可能是虚拟机;在这个实验室里,我使用了运行CentOS的虚拟机。

那么这4个元素的实体是什么呢?

首先,我们有Ansible部署器,它不会成为K8s集群(我们的“云”)的一部分,而只是利用Ansible安装Kubernetes和Tungsten Fabric。

然后我们有一个控制节点,TF和K8s的控制功能都将在这里运行。用K8s的“语言”来说,这个节点将是master节点。

另外两个节点将是kubernetes worker,容器将在这里运行。TF将在这里安装并运行vRouter,它将负责虚拟网络。

TF vRouter并不能与所有的内核一起工作,而是需要一些特定的兼容版本。查看版本说明来了解你所需要的特定TF版本的内核版本。

例如,我要安装Tungsten Fabric 5.0.3,它需要3.10.0-957内核。

步骤

首先,我们需要在master节点和两个节点上安装正确的内核版本:

yum -y install kernel-3.10.0-957.el7.x86_64.rpm
yum update
reboot

接下来,我们连接到Ansible部署器虚拟机并准备环境:

yum -y install epel-release git ansible net-tools
yum install -y python-pip
pip install requests

Ansible部署器以tgz文件的形式出现。

我们将其解压:

tar -xvf {contrail-ansible-deployer-vxxx.tgz}

移动到提取的文件夹中:

cd {contrail-ansible-deployer-vxxx}

现在我们需要建立instances.yaml文件,一个描述我们的设置的文件。

这个文件在yaml文件中。

vi config/instances.yaml

下面是一个示例:

global_configuration:
 CONTAINER_REGISTRY: hub.juniper.net/contrail
 CONTAINER_REGISTRY_USERNAME: xxx
 CONTAINER_REGISTRY_PASSWORD: yyy
provider_config:
  bms:
   ssh_pwd: Embe1mpls
   ssh_user: root
   domainsuffix: ulab
instances:
  master:
   provider: bms
   roles:
      config_database:
      config:
      control:
      analytics_database:
      analytics:
      webui: 
      k8s_master:
      kubemanager:
   ip: 10.49.231.32
  w1:
   provider: bms
   roles:
     vrouter:
     k8s_node:
   ip: 10.49.230.206
  w1:
   provider: bms
   roles:
     vrouter:
     k8s_node:
   ip: 10.49.230.205
contrail_configuration:
  CONTRAIL_CONTAINER_TAG: 5.0.3-0.493
  KUBERNETES_CLUSTER_PROJECT: {}
  CONFIG_NODEMGR__DEFAULTS__minimum_diskGB: 2
  DATABASE_NODEMGR__DEFAULTS__minimum_diskGB: 2
  CONFIG_DATABASE_NODEMGR__DEFAULTS__minimum_diskGB: 2
  RABBITMQ_NODE_PORT: 5673

详解

让我们把它分成小块,以便更好地理解它。

首先,我们有全局配置部分:

global_configuration:
 CONTAINER_REGISTRY: hub.juniper.net/contrail
 CONTAINER_REGISTRY_USERNAME: xxx
 CONTAINER_REGISTRY_PASSWORD: yyy

这将告诉部署器在哪里获得Tungsten Fabric容器(记住,从5.0版本开始TF控制平面就已经是容器化的了)。你需要一个有效的账户。

接下来,我们定义访问我们节点的凭证:

provider_config:
  bms:
   ssh_pwd: Embe1mpls
   ssh_user: root
   domainsuffix: ulab

所有的设备都需要用相同的凭证来配置,我们支持使用相同的凭证,但需要通过在单个节点定义中配置凭证来覆盖这些设置。

接下来开始定义我们的资源:

instances:

定义master节点:

master:
 provider: bms
 roles:
    config_database:
    config:
    control:
    analytics_database:
    analytics:
    webui: 
    k8s_master:
    kubemanager:
 ip: 10.49.231.32

实例是一个bms(即使是虚拟机,也要用bms),那么所有典型的控制角色都会分配给它。

Worker节点的定义也类似:

w1:
 provider: bms
 roles:
   vrouter:
   k8s_node:
 ip: 10.49.230.206

很显然,这里的角色是不同的,因为我们必须安装vRouter,并将节点配置为worker。

我们省略了第二个worker的定义。

最后,我们有TF配置部分:

contrail_configuration:
  CONTRAIL_CONTAINER_TAG: 5.0.3-0.493
  KUBERNETES_CLUSTER_PROJECT: {}
  CONFIG_NODEMGR__DEFAULTS__minimum_diskGB: 2
  DATABASE_NODEMGR__DEFAULTS__minimum_diskGB: 2
  CONFIG_DATABASE_NODEMGR__DEFAULTS__minimum_diskGB: 2
  RABBITMQ_NODE_PORT: 5673

在这里,我们指定了TF容器的具体标签。标签应该与我们要安装的版本相匹配。

标签可以通过以下方式获取:

[root@master ~]# curl -u XXX -X GET https://hub.juniper.net/v2/contrail/contrail-analytics-api/tags/list | python -mjson.tool
Enter host password for user 'JNPR-Customer15':
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   423  100   423    0     0   1082      0 --:--:-- --:--:-- --:--:--  1087
{
    "name": "contrail/contrail-analytics-api",
    "tags": [
        "5.0.0-0.40-ocata",
        "5.0.0-0.40",
        "5.0.1-0.214-ocata",
        "5.0.1-0.214-queens",
        "5.0.1-0.214-rhel-queens",
        "5.0.1-0.214",
        "5.0.2-0.360-ocata",
        "5.0.2-0.360-queens",
        "5.0.2-0.360-rhel-queens",
        "5.0.2-0.360",
        "5.0.3-0.493-ocata",
        "5.0.3-0.493-queens",
        "5.0.3-0.493-rhel-queens",
        "5.0.3-0.493",
        "5.1.0-0.38-ocata",
        "5.1.0-0.38-queens",
        "5.1.0-0.38-rhel-queens",
        "5.1.0-0.38-rocky",
        "5.1.0-0.38"
    ]
}

同样,我们需要一个有效的账户。

当使用Tungsten Fabric时,你还可以简单地获得最新版本:

contrail_configuration:
  CONTRAIL_VERSION: latest

回到TF配置部分,将最小磁盘尺寸设置为低值,这样我们的小型实验室虚拟机就绰绰有余了。

现在我们只需运行这三个Ansible命令(记住你是在Ansible部署器的解压文件夹里):

ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/configure_instances.yml
ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/install_k8s.yml
ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/install_contrail.yml

一切都应该是正常的!

验证

现在我们可以连接到master,检查一切工作是否符合预期。

首先我们列出节点:

[root@master ~]# kubectl get nodes
NAME      STATUS     ROLES     AGE       VERSION
master    NotReady   master    9h        v1.9.2
w1        Ready          9h        v1.9.2
w2        Ready          9h        v1.9.2

Worker已经准备好了,Master还没有准备好,但这不是问题。

接下来,我们检查控制容器:

[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE
kube-system   etcd-master                             1/1       Running   0          9h
kube-system   kube-apiserver-master                   1/1       Running   0          9h
kube-system   kube-controller-manager-master          1/1       Running   0          9h
kube-system   kube-dns-6f4fd4bdf-nwjkt                3/3       Running   0          9h
kube-system   kube-proxy-fzvt7                        1/1       Running   0          9h
kube-system   kube-proxy-tt5nr                        1/1       Running   0          9h
kube-system   kube-proxy-wvmzh                        1/1       Running   0          9h
kube-system   kube-scheduler-master                   1/1       Running   0          9h
kube-system   kubernetes-dashboard-846c4ddc5f-6fzdq   1/1       Running   0          9h

所有的容器都在运行!请注意,K8s是我们用来管理容器及其核心功能的东西,让K8s工作的也是容器。它们运行在一个特殊的命名空间里,叫做kube-system。这些容器在主机上运行,只要运行“docker ps”来验证就可以了。

我们可以在master和worker上运行经典的contrail-status命令:

[root@master ~]# contrail-status

最后,验证gui是可以通过https://%5Bmaster_ip}:8143打开。默认凭证(如果没有手动设置)是admin/trail23:

就这样,已经设置好了……又快又简单。

现在剩下的就是学习如何使用Kubernetes了。

(注:原文出现Contrail的地方,本文都以Tungsten Fabric替代,绝大多数情况下两者功能一致。)


作者:Umberto Manferdini  译者:TF编译组 原文链接: https://iosonounrouter.wordpress.com/2019/05/30/setting-up-a-small-contrailkubernetes-lab-using-ansible-deployer/


原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为OpenStack和K8s集群提供无缝虚拟网络

    现实情况下,可能会发生虚拟机和容器需要相互“交谈”的情况。如果是这样,我们需要以某种方式实现两个独立集群之间的通信。

    Tungsten Fabric
  • 通过TF Operator进行统一生命周期管理

    在Linux基金会主办的“LFN技术会议”上,Tungsten Fabric社区进行了一系列演讲,介绍最新的功能和未来发展方向。今天带来第三篇演讲,通过TF O...

    Tungsten Fabric
  • 如何在OpenStack-Ansible上集成Tungsten Fabric

    本文作者James Denton,拥有超过15年信息技术领域行业经验,目前为知名云计算服务商Rackspace Hosting首席架构师,致力于云网络和对基于O...

    Tungsten Fabric
  • 深入k8s:k8s部署&在k8s中运行第一个程序

    由于在国内网络问题,我们无法很好的使用minikube进行部署k8s实验环境,所以可以使用阿里提供的minikube进行搭建。除了minikube,也可以使用k...

    luozhiyun
  • Tungsten Fabric入门宝典丨首次启动和运行指南

    Tungsten Fabric入门宝典系列文章,来自技术大牛倾囊相授的实践经验,由TF中文社区为您编译呈现,旨在帮助新手深入理解TF的运行、安装、集成、调试等全...

    Tungsten Fabric
  • Ansible for k8s

    后来出现了 kustomize,kustomize的设计并不依赖服务端,而是想做好本地渲染,然而几次使用之后发现,kustomize 显然还是失败了

    王磊-AI基础
  • 杨雨:Tungsten Fabric如何增强Kubernetes的网络性能

    在混合多云的世界里,Kubernetes是如此流行,已经成为应用统一部署和管理的事实标准,而Tungsten Fabric与Kubernetes的集成,更增强了...

    Tungsten Fabric
  • TF实战Q&A丨你不理解透,出了问题都不知道怎么弄

    在TF中文社区,爱折腾的“实战派”们经常探讨有关SDN和Tungsten Fabric的各种问题,我们将其中的精华部分整理出来,形成 “ TF Q&A ” 栏目...

    Tungsten Fabric
  • 【Kubernetes系列】第4篇 Kubernetes集群安装部署

    本文介绍了如何通过Kubespray来进行部署高可用k8s集群,k8s版本为1.12.5。

    HankerCloud
  • 如何在OpenStack Kolla上部署Tungsten Fabric(附14个常见的配置问题)

    首先,使用contil-kolla-ansible-deployer容器在OpenStack Kolla上部署Tungsten Fabric(注:原文为Cont...

    Tungsten Fabric
  • Tungsten Fabric架构和最新技术进展

    本文整理自瞻博网络杰出工程师Sukhdev Kapur在“TF中文社区成立暨第一次全员大会”上的演讲,增加了对于TF功能的描述。

    Tungsten Fabric
  • 基于 Jenkins 在 Kubernetes 上配置 CI/CD

    软件行业正迅速看到使用容器作为一种为应用程序开发人员促进开发,部署和环境编排的方法的价值。这是因为容器可有效管理环境差异,提高可伸缩性并提供可预测性,以支持新功...

    DevOps时代
  • Ansible 安装并简单使用

    Ansible 是一款 IT 自动化工具。主要应用场景有配置系统、软件部署、持续发布及不停服平滑滚动更新的高级任务编排。

    小陈运维
  • 【Kubernetes系列】第3篇 Kubernetes集群安装部署

    本文介绍了如何通过Kubespray来进行部署高可用k8s集群,k8s版本为1.12.5。

    用户6543014
  • vivo AI 计算平台云原生自动化实践

    2018 年底,vivo AI 研究院为了解决统一高性能训练环境、大规模分布式训练、计算资源的高效利用调度等痛点,着手建设 AI 计算平台。经过两年的持续迭代,...

    深度学习与Python
  • 不知道这些,你以为你还能devops?

    在DevOps之前,从业人员使用瀑布模型或敏捷开发模型进行软件项目开发:瀑布模型或顺序模型是软件开发生命周期(SDLC)中的一种开创性方法,在这个模型中,软件开...

    cloudskyme
  • 自动化工具后起之秀Ansible的部署实践

    从早期手动加脚本的部署方式,到后来自动化工具(chef, puppet, saltstack, ansible等)的出现,再到如今DevOps的盛行,企业应用部...

    yuanyi928
  • 使用 Kubernetes 和 Jenkins 创建一个 CI/CD 流水线

    CI/CD 同 DevOps、Agile、Scrum、Kanban、自动化以及其他术语一样,是一个一起被经常提及的专用术语。有时候,它被当做工作流的一部分,但是...

    DevOps持续交付
  • Kubernetes集群监控Promethues+Grafana

    其中基础设施层监控指标的拉取肯定是来在Prometheus的node_exporter,因为我们要监控的服务器节点既包含Kubernetes节点又包含其他部署独...

    菲宇

扫码关注云+社区

领取腾讯云代金券