19、云环境下的容器管理与应用部署

云环境下的容器管理与应用部署

1. 启动 Wordpress 容器

启动 Wordpress 容器后,需要使用标签打开防火墙。以下是相关信息和操作步骤:

1.1 容器信息

POD IP CONTAINER(S) IMAGE(S) HOST LABELS S
wordpress 10.188.0.5 wordpress tutum/wordpress k8s - cook - node - 1.c… name = wordpress P

1.2 打开防火墙

使用以下命令创建防火墙规则:

$ gcloud compute firewall - rules create wordpress - 80 --allow tcp:80 \
                                                    --target - tags k8s - cook - node

创建后的防火墙规则信息如下:
| NAME | NETWORK | SRC_RANGES | RULES | SRC_TAGS | TARGET_TAGS |
| — | — | — | — | — | — |
| wordpress - 80 | default | 0.0.0.0/0 | tcp:80 | | k8s - cook - node |

完成上述操作后,就可以使用 Wordpress 了。

2. 使用 kubecfg 管理 Google 容器引擎资源

2.1 问题与解决方案

如果你已经通过 Google 容器引擎服务创建了 Kubernetes 集群,并且想使用默认的 kubecfg CLI 来创建 Pod、服务和复制控制器,可以按照以下步骤操作:
1. 启动 Kubernetes 集群:

$ gcloud preview container clusters create cookbook --num - nodes 2 \
                                                    --machine - type g1 - small
  1. 列出实例:
$ gcloud compute instances list

输出结果示例:
| NAME | ZONE | MACHINE_TYPE | INTERNAL_IP | EXTERNAL_IP | STATUS |
| — | — | — | — | — | — |
| k8s - cookbook - node - 2 | us - central1 - a | g1 - small | 10.240.222.210 | 104.154.39.165 | RUNNING |
| k8s - cookbook - node - 1 | us - central1 - a | g1 - small | 10.240.240.234 | 130.211.170.38 | RUNNING |
| k8s - cookbook - master | us - central1 - a | g1 - small | 10.240.154.207 | 130.211.115.17 | RUNNING |
3. 通过 SSH 连接到主节点:

$ gcloud compute ssh k8s - cookbook - master --zone us - central1 - a
  1. 检查 kubecfg 路径:
sebastiengoasguen@k8s - cookbook - master:~$ which kubecfg
/usr/local/bin/kubecfg

2.2 kubecfg 的使用

kubecfg CLI 可用于管理 Kubernetes 集群中的所有资源,其基本用法如下:

Usage: kubecfg - h [- c config/file.json|url|-] <method>
Kubernetes REST API:
  kubecfg [OPTIONS] get|list|create|delete|update \
                    <events|minions|nodes|pods|replicationControllers|services>[/<id>]

2.3 启动 Pod

要启动一个 Pod,需要在 YAML 或 JSON 文件中定义它。以下是一个使用 Kubernetes v1beta2 API 版本的 JSON 文件示例,用于启动 Nginx:

{
    "id": "nginx",
    "kind": "Pod",
    "apiVersion": "v1beta2",
    "desiredState": {
        "manifest": {
            "id": "nginx",
            "version": "v1beta2",
            "containers": [{
                "name": "nginx",
                "image": "nginx",
                "imagePullPolicy": "PullIfNotPresent",
                "ports": [{"containerPort": 80, "hostPort": 80}]
            }]
        }
    }
}

启动 Pod 并检查其状态:

$ kubecfg - c nginx.json create pods
$ kubecfg list pods

输出结果示例:
| Name | Image(s) | Host | Labels |
| — | — | — | — |
| nginx | nginx | k8s - cookbook - node - 2.c.runseb.internal/104.154.39.165 | |
| skydns - fplln | quay.io… | k8s - cookbook - node - 1.c.runseb.internal/130.211.170.38 | k8s - app = skydns |

清理资源:

$ kubecfg delete pods/nginx
$ exit # On the kubernetes master
$ gcloud preview container clusters delete cookbook

3. 准备使用 EC2 容器服务(ECS)

3.1 问题与解决方案

如果你想尝试新的 Amazon AWS EC2 容器服务(ECS),需要完成以下步骤:
1. 注册 AWS 账户(如果尚未注册)。
2. 登录 AWS 控制台。确保创建了 VPC 和安全组,或者使用默认的 VPC 和安全组。
3. 进入身份和账户管理(IAM)控制台,为 ECS 创建一个角色。如果不熟悉 IAM,可以参考 AWS 文档中的 ECS 部分逐步操作。
4. 为刚创建的角色创建一个内联策略。可以使用 Boto 自动化创建此策略。
5. 安装最新的 AWS CLI。ECS API 在 1.7.0 或更高版本中可用:

$ sudo pip install awscli
$ aws --version
aws - cli/1.7.8 Python/2.7.9 Darwin/12.6.0
$ aws ecs help
  1. 创建 AWS CLI 配置文件,包含 IAM 用户的 API 密钥,并将区域设置为 us - east - 1(ECS 当前可用的北弗吉尼亚地区):
$ cat ~/.aws/config
[default]
output = table
region = us - east - 1
aws_access_key_id = <your AWS access key>
aws_secret_access_key = <your AWS secret key>

完成以上步骤后,就可以使用 ECS 了。后续需要创建集群、定义任务并运行这些任务以在集群上启动容器。

3.2 使用 Boto 自动化创建策略

可以使用以下步骤自动化创建策略:

$ git clone https://github.com/how2dock/docbook.git
$ sudo pip install boto
$ cp ~/.aws/config ~/.aws/credentials
$ cd ch08/ecs
$ ./ecs - policy.py

此脚本将创建一个 ecs 角色、一个 ecspolicy 策略和一个 cookbook 实例配置文件。完成后,可以在 IAM 控制台中看到这些角色和策略。

4. 创建 ECS 集群

4.1 问题与解决方案

如果你已经准备好使用 ECS,可以使用 AWS CLI 探索新的 ECS API 来创建集群和实例。需要学习使用以下命令:
- aws ecs list - clusters
- aws ecs create - cluster
- aws ecs describe - clusters
- aws ecs list - container - instances
- aws ecs delete - cluster

4.2 激活默认集群

默认情况下,ECS 中有一个集群,但在启动实例之前它处于非活动状态。可以使用以下命令描述默认集群:

$ aws ecs describe - clusters

输出结果示例:

---------------------------------------------------------------------
|                         DescribeClusters                          |
+-------------------------------------------------------------------+
||                            failures                             ||
|+------------------------------------------------------+----------+|
||                          arn                         | reason   ||
|+------------------------------------------------------+----------+|
||  arn:aws:ecs:us - east - 1:587264368683:cluster/default  |  MISSING ||
|+------------------------------------------------------+----------+

要激活此集群,使用 Boto 启动一个实例:

$ python
>>> import boto
>>> c = boto.connect_ec2()
>>> c.run_instances('ami - 34ddbe5c', \
                    key_name='ecs', \
                    instance_type='t2.micro', \
                    instance_profile_name='cookbook')

等待实例运行并注册到集群后,再次描述集群:

$ aws ecs describe - clusters

输出结果示例:

-----------------------------------------------------------------------------------
|                                DescribeClusters                                 |
+---------------------------------------------------------------------------------+
||                                   clusters                                    ||
|+-----------------------------------------------------+--------------+----------+|
||                     clusterArn                      | clusterName  | status   ||
|+-----------------------------------------------------+--------------+----------+|
||  arn:aws:ecs:us - east - 1:587264368683:cluster/default |  default     |  ACTIVE  ||
|+-----------------------------------------------------+--------------+----------+|

还可以列出容器实例:

$ aws ecs list - container - instances

4.3 创建自定义集群

可以使用以下命令创建自定义集群:

$ aws ecs create - cluster --cluster - name cookbook

输出结果示例:

------------------------------------------------------------------------------------
|                                   CreateCluster                                  |
+----------------------------------------------------------------------------------+
||                                     cluster                                    ||
|+------------------------------------------------------+--------------+----------+|
||                      clusterArn                      | clusterName  | status   ||
|+------------------------------------------------------+--------------+----------+|
||  arn:aws:ecs:us - east - 1:587264368683:cluster/cookbook |  cookbook    |  ACTIVE  ||
|+------------------------------------------------------+--------------+----------+|

列出集群:

$ aws ecs list - clusters

输出结果示例:

-----------------------------------------------------------
|                      ListClusters                       |
+---------------------------------------------------------+
||                      clusterArns                      ||
|+-------------------------------------------------------+|
||  arn:aws:ecs:us - east - 1:587264368683:cluster/cookbook  ||
||  arn:aws:ecs:us - east - 1:587264368683:cluster/default   ||
|+-------------------------------------------------------+|

要在新创建的集群中启动实例,可以使用以下脚本传递用户数据:

#!/usr/bin/env python
import boto
import base64
userdata="""
#!/bin/bash
echo ECS_CLUSTER=cookbook >> /etc/ecs/ecs.config
"""
c = boto.connect_ec2()
c.run_instances('ami - 34ddbe5c', \
                key_name='ecs', \
                instance_type='t2.micro', \
                instance_profile_name='cookbook', \
                user_data=base64.b64encode(userdata))

完成集群使用后,可以使用以下命令删除集群:

$ aws ecs delete - cluster --cluster cookbook

4. 启动 Docker 容器

4.1 问题与解决方案

如果你已经知道如何在 AWS 上创建 ECS 集群,现在可以在集群的实例上启动容器。具体步骤如下:
1. 定义任务 :将容器或容器组在 JSON 格式的定义文件中定义,这被称为任务。例如,要在基于 Docker hub 的 Nginx 镜像的容器中运行 Nginx,可以创建以下任务定义:

[
  {
    "environment": [],
    "name": "nginx",
    "image": "nginx",
    "cpu": 10,
    "portMappings": [
      {
       "containerPort": 80,
       "hostPort": 80
      }
    ],
    "memory": 10,
    "essential": true
  }
]
  1. 注册任务 :使用 ECS 的 register - task - definition 调用注册任务,并指定一个家族(family)来分组任务,方便进行版本管理和回滚操作。
$ aws ecs register - task - definition --family nginx \
                                   --container - definitions file://$PWD/nginx.json

注册成功后,可以使用以下命令列出任务定义:

$ aws ecs list - task - definitions

输出结果示例:

------------------------------------------------------------------
|                       ListTaskDefinitions                      |
+----------------------------------------------------------------+
||                      taskDefinitionArns                      ||
|+--------------------------------------------------------------+|
||  arn:aws:ecs:us - east - 1:587264368683:task - definition/nginx:1  ||
|+--------------------------------------------------------------+|
  1. 运行任务 :使用 run - task 命令启动容器,并指定要运行的容器数量。
$ aws ecs run - task --task - definition nginx:1 --count 1
  1. 停止任务 :要停止容器,需要先使用 list - tasks 命令获取任务的 UUID,然后使用 stop - task 命令停止任务。
$ aws ecs stop - task --task 6223f2d3 - 3689 - 4b3b - a110 - ea128350adb2

4.2 多容器任务示例

除了单个容器的任务,还可以定义包含多个链接容器的任务。以下是一个运行 Wordpress 的任务定义示例,包含 Wordpress 和 MySQL 两个容器:

[
  {
    "image": "wordpress",
    "name": "wordpress",
    "cpu": 10,
    "memory": 200,
    "essential": true,
    "links": [
      "mysql"
    ],
    "portMappings": [
      {
        "containerPort": 80,
        "hostPort": 80
      }
    ],
    "environment": [
      {
        "name": "WORDPRESS_DB_NAME",
        "value": "wordpress"
      },
      {
        "name": "WORDPRESS_DB_USER",
        "value": "wordpress"
      },
      {
        "name": "WORDPRESS_DB_PASSWORD",
        "value": "wordpresspwd"
      }
    ]
  },
  {
    "image": "mysql",
    "name": "mysql",
    "cpu": 10,
    "memory": 200,
    "essential": true,
    "environment": [
      {
        "name": "MYSQL_ROOT_PASSWORD",
        "value": "wordpressdocker"
      },
      {
        "name": "MYSQL_DATABASE",
        "value": "wordpress"
      },
      {
        "name": "MYSQL_USER",
        "value": "wordpress"
      },
      {
        "name": "MYSQL_PASSWORD",
        "value": "wordpresspwd"
      }
    ]
  }
]

注册任务:

$ aws ecs register - task - definition --family wordpress \
                                   --container - definitions file://$PWD/wordpress.json

运行任务:

$ aws ecs run - task --task - definition wordpress:1 --count 1

如果任务运行失败,可能是由于资源限制不满足。可以编辑任务定义,放宽内存限制,然后注册一个新的任务版本(revision 2),再次运行任务。

4.3 注意事项

在 ECS 的预览阶段,可能存在一些问题。例如,不太容易找到任务运行的实例和相关的 IP 地址,并且似乎没有像 Kubernetes 那样的代理服务。此外,由于 ECS 处于预览阶段,API 可能会发生变化,API 调用返回的对象也可能会改变。

5. 在云端启动应用程序

5.1 问题与解决方案

如果你想通过推送 Dockerfile 在云端部署基于 Docker 的应用程序,并希望云服务自动启动实例和配置可能的负载均衡器,可以使用 AWS Elastic Beanstalk。具体步骤如下:
1. 准备工作
- 拥有一个 AWS 账户。
- 安装 AWS CLI。
- 通过访问控制台注册 Beanstalk,并按照屏幕上的说明操作。
2. 应用程序部署步骤
- 创建应用程序 :使用 AWS CLI 创建一个名为 foobar 的应用程序。

$ aws elasticbeanstalk create - application --application - name foobar
- **列出解决方案堆栈**:列出可用的解决方案堆栈,并选择所需的 Docker 环境。
$ aws elasticbeanstalk list - available - solution - stacks
- **创建配置模板**:使用所选的解决方案堆栈创建一个配置模板。
$ aws elasticbeanstalk create - configuration - template \
                       --application - name foobar \
                       --solution - stack - name="64bit Amazon Linux 2014.09 v1.2.1 running Docker 1.5" \
                       --template - name foo
- **创建环境**:创建一个名为 `cookbook` 的环境。
$ aws elasticbeanstalk create - environment \
                       --application - name foobar \
                       --environment - name cookbook \
                       --template - name foo
  1. 检查环境状态 :使用 describe - environments API 调用检查环境是否准备好。
$ aws elasticbeanstalk describe - environments

输出结果示例:

--------------------------------------------------------------------------------------------------
|                                      DescribeEnvironments                                      |
+------------------------------------------------------------------------------------------------+
||                                         Environments                                         ||
|+-------------------+--------------------------------------------------------------------------+|
||  ApplicationName  |  foobar                                                                  ||
||  CNAME            |  cookbook - pmpgzmx2e6.elasticbeanstalk.com                                ||
||  DateCreated      |  2015 - 03 - 30T15:32:47.814Z                                                ||
||  DateUpdated      |  2015 - 03 - 30T15:38:14.291Z                                                ||
||  EndpointURL      |  awseb - e - 7 - AWSEBLoa - CUXDVD6RL9R7 - 992275618.eu - west - 1.elb.amazonaws.com   ||
||  EnvironmentId    |  e - 7hamntqqnw                                                            ||
||  EnvironmentName  |  cookbook                                                                ||
||  Health           |  Green                                                                   ||
||  SolutionStackName|  64bit Amazon Linux 2014.09 v1.2.1 running Docker 1.5.0                  ||
||  Status           |  Ready                                                                   ||
|+-------------------+--------------------------------------------------------------------------+|
|||                                            Tier                                            |||
||+-----------------------------------------+--------------------------------------------------+||
|||  Name                                   |  WebServer                                       |||
|||  Type                                   |  Standard                                        |||
|||  Version                                |                                                  |||
||+-----------------------------------------+--------------------------------------------------+||
  1. 部署应用程序
    • 安装 awsebcli
$ sudo pip install awsebcli
- 创建应用程序目录并编写 Dockerfile:
$ mkdir beanstalk
$ cd beanstalk
$ cat > Dockerfile
FROM ubuntu:12.04
RUN apt - get update
RUN apt - get install - y nginx zip curl
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl - o /usr/share/nginx/www/master.zip - L https://codeload.github.com/gabrielecirulli/2048/zip
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048 - master/* . && rm - rf 2048 - master master
EXPOSE 80
CMD ["/usr/sbin/nginx", "- c", "/etc/nginx/nginx.conf"]
- 初始化应用程序并部署:
$ eb init foobar
$ eb list
* cookbook
$ eb deploy

5.2 应用程序部署结果

部署完成后,应用程序将在 Beanstalk 环境中运行。可以前往 Beanstalk 控制台找到应用程序的 URL,点击该 URL 即可打开 2048 游戏。由于应用程序前面有弹性负载均衡器,游戏负载增加时将触发创建更多的实例来服务游戏。

6. 总结与操作流程梳理

6.1 各服务操作流程总结

为了更清晰地展示上述云服务的使用流程,下面以表格形式进行总结:
| 服务名称 | 操作步骤 | 关键命令 |
| — | — | — |
| 启动 Wordpress 容器 | 1. 启动容器;2. 打开防火墙 | gcloud compute firewall-rules create wordpress-80 --allow tcp:80 --target-tags k8s-cook-node |
| 使用 kubecfg 管理 Google 容器引擎资源 | 1. 启动 Kubernetes 集群;2. 连接主节点;3. 启动 Pod;4. 清理资源 | gcloud preview container clusters create cookbook --num-nodes 2 --machine-type g1-small
gcloud compute ssh k8s-cookbook-master --zone us-central1-a
kubecfg -c nginx.json create pods
kubecfg delete pods/nginx
gcloud preview container clusters delete cookbook |
| 准备使用 EC2 容器服务(ECS) | 1. 注册 AWS 账户;2. 登录控制台并配置 VPC 和安全组;3. 创建 IAM 角色和策略;4. 安装 AWS CLI;5. 创建配置文件 | sudo pip install awscli
cat ~/.aws/config |
| 创建 ECS 集群 | 1. 激活默认集群或创建自定义集群;2. 启动实例;3. 列出容器实例;4. 删除集群 | aws ecs create-cluster --cluster-name cookbook
python import boto; c = boto.connect_ec2(); c.run_instances('ami-34ddbe5c', key_name='ecs', instance_type='t2.micro', instance_profile_name='cookbook')
aws ecs list-container-instances
aws ecs delete-cluster --cluster cookbook |
| 启动 Docker 容器 | 1. 定义任务;2. 注册任务;3. 运行任务;4. 停止任务 | aws ecs register-task-definition --family nginx --container-definitions file://$PWD/nginx.json
aws ecs run-task --task-definition nginx:1 --count 1
aws ecs stop-task --task 6223f2d3-3689-4b3b-a110-ea128350adb2 |
| 在云端启动应用程序 | 1. 准备工作;2. 创建应用程序;3. 选择解决方案堆栈;4. 创建配置模板;5. 创建环境;6. 检查环境状态;7. 部署应用程序 | aws elasticbeanstalk create-application --application-name foobar
aws elasticbeanstalk list-available-solution-stacks
aws elasticbeanstalk create-configuration-template --application-name foobar --solution-stack-name="64bit Amazon Linux 2014.09 v1.2.1 running Docker 1.5" --template-name foo
aws elasticbeanstalk create-environment --application-name foobar --environment-name cookbook --template-name foo
aws elasticbeanstalk describe-environments
eb init foobar; eb list; eb deploy |

6.2 操作流程 mermaid 流程图

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(启动 Wordpress 容器):::process
    B --> C(使用 kubecfg 管理 Google 容器引擎资源):::process
    C --> D(准备使用 EC2 容器服务(ECS)):::process
    D --> E{选择集群类型}:::decision
    E -->|默认集群| F(激活默认集群):::process
    E -->|自定义集群| G(创建自定义集群):::process
    F --> H(启动 Docker 容器):::process
    G --> H
    H --> I(在云端启动应用程序):::process
    I --> J([结束]):::startend

6.3 不同服务使用注意事项

  • ECS 服务 :在 ECS 预览阶段,存在一些局限性,如难以确定任务运行的实例和 IP 地址,且缺乏类似 Kubernetes 的代理服务。同时,API 可能会发生变化,使用时需关注官方更新。
  • AWS Elastic Beanstalk :部署应用程序时,确保 AWS 账户、AWS CLI 和 Beanstalk 注册等准备工作完成。创建配置模板和环境时,注意选择正确的解决方案堆栈。

6.4 进一步学习建议

  • 对于 Google 容器引擎资源管理,深入学习 Kubernetes 的更多特性,如服务发现、自动伸缩等。
  • 在使用 ECS 时,研究任务定义的更多参数,以实现更复杂的容器编排。
  • 对于 AWS Elastic Beanstalk,学习如何进行环境的高级配置,如负载均衡器的详细设置、自动伸缩策略等。

通过以上的操作步骤、总结和注意事项,希望能帮助你更好地在云环境中使用各种容器服务,实现高效的应用部署和管理。在实际操作过程中,要根据具体需求和环境进行调整,不断积累经验,提升云服务的使用能力。

(Kriging_NSGA2)克里金模型结合多目标遗传算法求最优因变量及对应的最佳自变量组合研究(Matlab代码实现)内容概要:本文介绍了克里金模型(Kriging)多目标遗传算法NSGA-II相结合的方法,用于求解最优因变量及其对应的最佳自变量组合,并提供了完整的Matlab代码实现。该方法首先利用克里金模型构建高精度的代理模型,逼近复杂的非线性系统响应,减少计算成本;随后结合NSGA-II算法进行多目标优化,搜索帕累托前沿解集,从而获得多个最优折衷方案。文中详细阐述了代理模型构建、算法集成流程及参数设置,适用于工程设计、参数反演等复杂优化问题。此外,文档还展示了该方法在SCI一区论文中的复现应用,体现了其科学性实用性。; 适合人群:具备一定Matlab编程基础,熟悉优化算法和数值建模的研究生、科研人员及工程技术人员,尤其适合从事仿真优化、实验设计、代理模型研究的相关领域工作者。; 使用场景及目标:①解决高计算成本的多目标优化问题,通过代理模型降低仿真次数;②在无法解析求导或函数高度非线性的情况下寻找最优变量组合;③复现SCI高水平论文中的优化方法,提升科研可信度效率;④应用于工程设计、能源系统调度、智能制造等需参数优化的实际场景。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现过程,重点关注克里金模型的构建步骤NSGA-II的集成方式,建议自行调整测试函数或实际案例验证算法性能,并配合YALMIP等工具包扩展优化求解能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值