terraform-aws-openshift, 使用Terraform和AWS创建基础架构,安装 OpenShift 参与方 !

分享于 

16分钟阅读

GitHub

  繁體 雙語
Create infrastructure with Terraform and AWS, install OpenShift. Party!
  • 源代码名称:terraform-aws-openshift
  • 源代码网址:http://www.github.com/dwmkerr/terraform-aws-openshift
  • terraform-aws-openshift源代码文档
  • terraform-aws-openshift源代码下载
  • Git URL:
    git://www.github.com/dwmkerr/terraform-aws-openshift.git
    Git Clone代码到本地:
    git clone http://www.github.com/dwmkerr/terraform-aws-openshift
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/dwmkerr/terraform-aws-openshift
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    terraform-aws-openshift

    CircleCI

    这个项目向你展示如何使用Terraform在AWS上设置OpenShift源。 这是我文章的配套项目,在AWS上运行并与OpenShift一起运行。

    OpenShift Sample Project

    我还添加了一些'食谱',你可以使用它们来组合更高级的功能:

    指数

    概述

    Terraform用于创建基础结构,如下所示:

    Network Diagram

    一旦设置了基础结构,系统的清单就会动态创建,这用于在主机上安装OpenShift源平台。

    先决条件

    你需要:

    • Terraform - brew update && brew install terraform
    • 一个AWS帐户,在本地配置了 cli -
    
    if [["$unamestr" == 'Linux' ]]; then
    
    
     dnf install -y awscli || yum install -y awscli
    
    
    elif [["$unamestr" == 'FreeBSD' ]]; then
    
    
     brew install -y awscli
    
    
    fi
    
    
    
    

    创建群集

    首先创建基础架构:

    # Make sure ssh agent is on, you'll need it later.eval`ssh-agent -s`# Create the infrastructure.make infrastructure

    你将被要求一个区域来部署,使用 us-east-1 或者你的首选区域。 你可以配置集群在 main.tf 文件中创建的细微差别。 创建后,你将看到如下消息:

    
    $ make infrastructure
    
    
    var.region
    
    
     Region to deploy the cluster into
    
    
    
     Enter a value: ap-southeast-1
    
    
    
    ...
    
    
    
    Apply complete! Resources: 20 added, 0 changed, 0 destroyed.
    
    
    
    

    就是这样基础设施准备好了,你可以安装OpenShift了。 离开大约五分钟,一切都启动。

    安装 OpenShift

    要在群集上安装 OpenShift,只需运行:

    make openshift

    你将被要求接受bastion服务器( 这样就可以将安装脚本复制到集群并运行)的主机,只需键入 yes 并按回车键继续。

    部署可能需要 30分钟。 如果 ansible 没有发现错误,那么就重新运行它。

    安装完成后,只需运行:

    make browse-openshift

    要将浏览器打开到管理控制台,请使用以下凭据登录:

    
    Username: admin
    
    
    Password: 123
    
    
    
    

    访问和管理 OpenShift

    有几种访问和管理OpenShift集群的方法。

    OpenShift网络控制台

    你可以通过点击控制台网页登录到OpenShift控制台:

    make browse-openshift# the 上面 is really just an alias for this!open $(terraform output master-url)

    url将类似于 https://a.b.c.d.xip.io:8443

    主 node

    主 node 安装了OpenShift客户端,并以cluter管理员身份进行身份验证。 如果你通过 node 进入主,那么你可以使用OpenShift客户机并对所有项目进行完全访问:

    
    $ make ssh-master # or if you prefer: ssh -t -A ec2-user@$(terraform output bastion-public_dns) ssh master.openshift.local
    
    
    $ oc get pods
    
    
    NAME READY STATUS RESTARTS AGE
    
    
    docker-registry-1-d9734 1/1 Running 0 2h
    
    
    registry-console-1-cm8zw 1/1 Running 0 2h
    
    
    router-1-stq3d 1/1 Running 0 2h
    
    
    
    

    注意,default 项目使用中,核心基础结构组件( 路由器等) 可用。

    你还可以使用 oadm 工具执行管理操作:

    
    $ oadm new-project test
    
    
    Created project test
    
    
    
    

    OpenShift客户端

    从 OpenShift Web控制台'关于'页面,你可以安装 oc 客户端,它提供命令行访问。 安装客户端后,你可以通过本地 shell的本地登录和管理群集:

    oc login $(terraform output master-url)

    请注意,你将无法运行OpenShift管理命令。 要管理,你需要在主 node 上使用 SSH。 通过命令行登录时使用相同的凭据( admin/123 )。

    连接到 Docker 注册表

    默认情况下OpenShift群集包含一个 Docker 注册表。 你可以通过以下步骤连接到 Docker 注册表,以便直接推送图像。

    首先,确保你已经使用的OpenShift客户端连接到群集:

    oc login $(terraform output master-url)

    现在检查 Docker 注册表的地址。 你的Docker 注册表url只是在开头带有 docker-registry-default.的主 url:

    
    % echo $(terraform output master-url)
    
    
    https://54.85.76.73.xip.io:8443
    
    
    
    

    在示例 上面 中,我的注册表url是 https://docker-registry-default.54.85.76.73.xip.io:8443 你还可以通过运行以下命令来获取这里 url oc get routes -n default 在主 node 上。

    你将需要将这里注册表添加到不信任注册表的列表中。 关于如何在这里执行 https://docs.docker.com/registry/insecure/的文档。 Mac上,执行这里操作的最简单方法是打开 Docker 首选项,转到'守护进程'并将该地址添加到不安全的regsitries列表中:

    Docker Insecure Registries Screenshot

    最后你可以登录。 你的Docker 注册表用户名是OpenShift用户名( 默认情况下为 admin ),你的密码是你的短的OpenShift登录令牌,你可以使用 oc whoami -t 获取它:

    
    % docker login docker-registry-default.54.85.76.73.xip.io -u admin -p `oc whoami -t`
    
    
    Login Succeeded
    
    
    
    

    你现在登录到注册表。 你还可以使用注册表网络界面,在示例 上面 中,该接口位于: https://registry-console-default. 54.85.76.73. xip. io

    Atomic Registry Screenshot

    持久卷

    集群是通过支持 AWS EBS卷动态配置而建立的。 这意味着支持持久卷。 默认情况下,当用户创建PVC时,将自动设置一个xfs卷来完成声明。

    更多详细信息可以在以下位置获得:

    不需要额外的操作来设置群集。

    注意,动态部署的EBS卷在运行 terrform destroy 时不会被破坏。 将群集关闭时,必须将manuallly销毁。

    附加配置

    配置configure最简单的方法是根据 OpenShift Origin中的设置,更改。/清单。template。cfg文件中的设置- 高级安装指南。

    运行 make openshift 时,发生的所有事情就是将 inventory.template.cfg 复制到 inventory.cfg,并将正确的IP地址加载到每个 node的terraform中。 然后将清单复制到主服务器,并运行安装脚本。 你可以在 makefile 中看到详细信息。

    选择OpenShift版本

    目前,OpenShift 3.9已经安装。

    要更改版本,只需更新这里 ./install-from-bastion.sh 命令行脚本行中的版本标识符:

    git clone -b release-3.9 https://github.com/openshift/openshift-ansible

    可用版本在这里列出了

    版本状态
    3.9测试成功
    3.7进行中。
    3.6测试成功
    3.5测试成功

    OpenShift 3.5被完全测试,并且设置稍有不同。 你可以通过签出 release/openshift-3.5 分支来构建 3.5.

    破坏群集

    把所有的东西都带下来

    
    terraform destroy
    
    
    
    

    Kubernetes动态提供的资源不会自动销毁。 这意味着如果要清理整个群集,必须手动删除已经为持久卷声明提供的所有ccr卷。

    生成文件命令

    makefile 中有一些命令使常见操作变得简单一些:

    命令说明
    make infrastructure运行terraform命令以生成。
    make openshift在基础结构上安装 OpenShift。
    make browse-openshift在浏览器中打开OpenShift控制台。
    make ssh-bastionSSH到堡垒 node。
    make ssh-masterSSH到主 node。
    make ssh-node1SSH到 node 1.
    make ssh-node2SSH到 node 2.
    make sample创建简单的示例项目。
    make lintLints terraform代码。

    定价

    你将支付以下费用:

    • 1 x m4.xlarge 实例
    • 2 x t2.large 实例

    食谱

    你的安装可以通过菜谱扩展。

    Splunk

    你可以使用Splunk配方快速将Splunk添加到你的安装程序中:

    Splunk Screenshot

    要集成 splunk,合并 recipes/splunk 分支,然后在创建基础架构并安装OpenShift后运行 make splunk:

    
    git merge recipes/splunk
    
    
    make infracture
    
    
    make openshift
    
    
    make splunk
    
    
    
    

    这里有一个完整的指南:

    http://www.dwmkerr.com/integrating-openshift-and-splunk-for-logging/

    你可以使用这里过滤器从日志文件中快速删除容器详细信息:

    
    source="/var/log/containers/counter-1-*" | rex field=source"/var/log/containers/(?<pod>[a-zA-Z0-9-]*)_(?<namespace>[a-zA-Z0-9]*)_(?<container>[a-zA-Z0-9]*)-(?<conatinerid>[a-zA-Z0-9_]*)" | table time, host, namespace, pod, container, log
    
    
    
    

    故障排除

    图像 pull,无法提取图像,不支持的架构版本 2

    Ugh OpenShift Docker 版本 vs 注册表版本问题。 有一个解决办法首先,ssh到主服务器:

    
    $ ssh -A ec2-user@$(terraform output bastion-public_dns)
    
    
    
    $ ssh master.openshift.local
    
    
    
    

    现在提升特权,启用注册表模式的v2并重新启动:

    sudo su
    oc set env dc/docker-registry -n default REGISTRY_MIDDLEWARE_REPOSITORY_OPENSHIFT_ACCEPTSCHEMA2=true
    systemctl restart origin-master.service

    你现在应该能够部署。 更多信息在这里。

    OpenShift安装问题

    
    TASK [openshift_manage_node : Wait for Node Registration] **********************
    
    
    FAILED - RETRYING: Wait for Node Registration (50 retries left).
    
    
    
    fatal: [node2.openshift.local -> master.openshift.local]: FAILED! => {"attempts": 50,"changed": false,"failed": true,"results": {"cmd":"/bin/oc get node node2.openshift.local -o json -n default","results": [{}],"returncode": 0,"stderr":"Error from server (NotFound): nodes"node2.openshift.local" not foundn","stdout":""},"state":"list"}
    
    
     to retry, use: --limit @/home/ec2-user/openshift-ansible/playbooks/byo/config.retry
    
    
    
    

    这里问题似乎是由 kubernetes/aws云提供程序配置中的一个 Bug 引起的,这是在这里进行的文档说明:

    https://github.com/dwmkerr/terraform-aws-openshift/issues/40

    在这个阶段,如果在清单中指定了OpenShift节点的自动生成主机名,那么这个问题应该消失。 如果使用内部DNS名称( 比如。 node1.openshift。内部) 然后将出现这里问题。

    无法重新启动服务 origin-master-api

    
    Failure summary:
    
    
    
     1. Hosts: ip-10-0-1-129.ec2.internal
    
    
     Play: Configure masters
    
    
     Task: restart master api
    
    
     Message: Unable to restart service origin-master-api: Job for origin-master-api.service failed because the control process exited with error code. See"systemctl status origin-master-api.service" and"journalctl -xe" for details.
    
    
    
    

    开发人员指南

    本节适用于那些希望更新或者修改代码的人。

    CI

    CircleCI 2 用于运行生成。 可以在本地运行CircleCI生成,其中包括:

    make circleci

    目前,这个构建将使代码( 未运行任何测试)。

    Linting

    tflint 用于对CI服务器上的代码进行lint处理。 你可以在本地将代码 lint:

    make lint

    引用


    PAR  INF  aws  Party  基础设施  terr  
    相关文章