国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何使用AWS和Rancher搭建彈性應(yīng)用棧

suemi / 854人閱讀

摘要:此次的示例我們將使用一個(gè)的,該使用作為存儲(chǔ)驅(qū)動(dòng)。現(xiàn)在它已通過(guò)了驗(yàn)證,不過(guò)如果我們真的實(shí)際運(yùn)行它,只會(huì)創(chuàng)建一個(gè)基礎(chǔ)的副本,連接驅(qū)動(dòng),而這不是很有用。

我們?cè)?jīng)分享過(guò)在使用Docker、Rancher和各種開(kāi)源工具時(shí),如何確保高彈性工作負(fù)載。在這篇文章中,我將以先前內(nèi)容為基礎(chǔ),用一些常用工具為Rancher搭好一個(gè)AWS基礎(chǔ)環(huán)境。查看這里的倉(cāng)庫(kù),你就能跟隨我們的步驟、安裝一個(gè)完全相同的基礎(chǔ)設(shè)施。

我們AWS基礎(chǔ)設(shè)施最終的輸出看起來(lái)會(huì)像下面的圖片:

現(xiàn)在一起動(dòng)手來(lái)創(chuàng)建一個(gè)運(yùn)行的應(yīng)用棧吧!

Host VM的創(chuàng)建

在這一部分我們將搭建下圖中底部的三個(gè)黃色部分的內(nèi)容:

Golden 鏡像

首先,我們需要一個(gè)創(chuàng)建Docker hosts的方案,該方案會(huì)將存儲(chǔ)驅(qū)動(dòng)和操作系統(tǒng)組合起來(lái)。當(dāng)然,我們也希望將來(lái)能用不同的部分取代它們。

現(xiàn)在我們要建立自己的VM(它常被叫做“golden鏡像”)。至于工具,我會(huì)用Packer與AWS(以及其他各類云提供商)的API通信來(lái)創(chuàng)建VM鏡像,用Ansible以一種可讀的方式描述配置步驟。如果你想跳過(guò)這些步驟的話,你可以在這里找到完整的源代碼。

此次的示例我們將使用一個(gè)Ubuntu 14.04的VM,該VM使用AUFS3作為Docker存儲(chǔ)驅(qū)動(dòng)。

第一步,我們創(chuàng)建一個(gè)名為ubuntu_1404_aufs3.json的Packer配置文件。在這時(shí),用source_ami_filter在AWS美國(guó)東部地區(qū)搜索最近的14.04 AMI ID,從搜索清單中返回了ami-af22d9b9。

它還創(chuàng)建了一個(gè)40GB的硬盤(pán),該硬盤(pán)連接為/dev/sdb,我們將用它存儲(chǔ)Docker數(shù)據(jù);這里我們正在使用的是Docker 1.12.3,因?yàn)樗С肿钚碌腞ancher兼容性矩陣。

{
"variables": {
"aws_access_key": "",
"aws_secret_key": "",
"docker_version": "1.12.4"
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "us-east-1",
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*",
"root-device-type": "ebs"
},
"most_recent": true
},
"ami_virtualization_type": "hvm",
"instance_type": "m3.medium",
"ssh_username": "ubuntu",
"ami_name": "Docker {{user `docker_version`}} Ubuntu 14.04 AUFS3 {{timestamp}}",
"launch_block_device_mappings": [{
"device_name": "/dev/sdb",
"volume_size": 40,
"volume_type": "gp2",
"delete_on_termination": true
}],
"tags": {
"OS_Version": "Ubuntu",
"Release": "14.04",
"StorageDriver": "AUFS3",
"Docker_Version": "{{user `docker_version`}}"
}
}]
}

$> packer validate ubuntu_1404_aufs3.json
Template validated successfully.

現(xiàn)在它已通過(guò)了驗(yàn)證,不過(guò)如果我們真的實(shí)際運(yùn)行它,Packer只會(huì)創(chuàng)建一個(gè)基礎(chǔ)AMI的副本,連接40GB驅(qū)動(dòng),而這不是很有用。為了讓它更有實(shí)用性,我們還需要在上面準(zhǔn)備Docker。Packer內(nèi)置的hooks可用于各種配置管理(CM)工具,如Ansible、Chef和Puppet。在我們的例子中,我們將使用Ansible provisioner。

{
"variables": ["..."],
"builders": ["..."],

"provisioners": [
{
"type": "ansible",
"playbook_file": "./playbook.yml",
"extra_arguments": [
"--extra-vars",
"docker_pkg_name="docker-engine={{user `docker_version`}}-0~ubuntu-trusty""
]
}
]
}

playbook.yml文件的內(nèi)容如下:

---
- name: Install Docker on Ubuntu 14.04
hosts: all
# run as root
become: true
become_user: root

pre_tasks:
- name: format the extra drive
filesystem:
dev: /dev/xvdb
fstype: ext4
- name: mount the extra drive
mount:
name: /secondary
# ubuntu renames the block devices to xv* prefix
src: /dev/xvdb
fstype: ext4
state: mounted
roles:
- role: angstwad.docker_ubuntu
docker_opts: "--graph /secondary --storage-driver=aufs"

運(yùn)行該工具之前,我們需要在包含ubuntu_1404_aufs3.json的根目錄抓取Docker安裝角色,然后運(yùn)行ansible-galaxy install angstwad.docker_ubuntu -p 來(lái)下載一個(gè)預(yù)配置的Docker安裝角色。頗受歡迎的angstwad.docker_ubuntu角色為在Ubuntu上的Docker安裝提供了很多選項(xiàng),并且它提供的安裝方式大多是按照官方的Docker安裝教程進(jìn)行操作的。

最后,我們執(zhí)行下面的腳本,等待新的基礎(chǔ)鏡像生成。最終生成的鏡像將是你從現(xiàn)在開(kāi)始要使用的基礎(chǔ)Docker鏡像。

$> packer build ubuntu_1404_aufs3.json
... output
... output
==> amazon-ebs: Creating the AMI: Docker 1.12.4 Ubuntu 14.04 AUFS3 1486965623
amazon-ebs: AMI: ami-1234abcd
==> amazon-ebs: Waiting for AMI to become ready...
AWS基礎(chǔ)設(shè)施創(chuàng)建

在開(kāi)始創(chuàng)建基礎(chǔ)設(shè)施組件之前,先檢查以下AWS上Rancher的架構(gòu)模板倉(cāng)庫(kù)。

網(wǎng)絡(luò)層

接下來(lái),大多數(shù)AWS服務(wù)需要建立一個(gè)VPC來(lái)供應(yīng)零錯(cuò)誤的服務(wù)。要做到這一點(diǎn),我們將用公共子網(wǎng)創(chuàng)建一個(gè)多帶帶的VPC。下面提供的是一種安裝標(biāo)準(zhǔn)模板的直接的方式。在這里檢查網(wǎng)絡(luò)模塊。

在main.tf(基礎(chǔ)設(shè)施的入口文件)中,我們引用了./database的網(wǎng)絡(luò)配置,然后我們需要向我們的模塊傳遞參數(shù):

module "networking" {
source = "./networking"

aws_region = "${var.aws_region}"
tag_name = "${var.tag_name}"
aws_vpc_cidr = "${var.aws_vpc_cidr}"
aws_public_subnet_cidrs = "${var.aws_public_subnet_cidrs}"
}

現(xiàn)在,你可以運(yùn)行我們簡(jiǎn)單網(wǎng)絡(luò)層的創(chuàng)建操作:

terraform plan -target="module.networking"
... output ...
Plan: 6 to add, 0 to change, 0 to destroy.

$> terraform apply -target="module.networking"
... output ...
module.networking.aws_subnet.rancher_ha_c: Creation complete
module.networking.aws_subnet.rancher_ha_b: Creation complete
module.networking.aws_subnet.rancher_ha_a: Creation complete
module.networking.aws_route.rancher_ha: Creation complete

應(yīng)用完成!資源:6添加, 0更改, 0銷毀。

HA Rancher Server

接下來(lái),讓我們開(kāi)始設(shè)置我們的網(wǎng)絡(luò),并使用我們的AMI在Rancher上安裝HA mode。首先,我們需要自動(dòng)化Rancher的HA安裝。

在Rancher 1.2版本之后,我們對(duì)HA進(jìn)程進(jìn)行了更新,Rancher不再需要一個(gè)bootstrap節(jié)點(diǎn)及依賴的步驟來(lái)創(chuàng)建HA集群。新的步驟是:

創(chuàng)建一個(gè)外部數(shù)據(jù)庫(kù)(本文使用的是RDS)

創(chuàng)建一個(gè)HA loadbalancer 的免費(fèi)SSL證書(shū)

使用一個(gè)外部loadbalancer在3個(gè)節(jié)點(diǎn)中進(jìn)行route(這里使用ELB)

啟動(dòng)的HA節(jié)點(diǎn)會(huì)用附加標(biāo)示--advertise-address標(biāo)記起來(lái),并在端口9345進(jìn)行端口轉(zhuǎn)發(fā)

去除bootstrap節(jié)點(diǎn),使得HA Rancher的自動(dòng)安裝變得更加容易。

下面讓我們開(kāi)始創(chuàng)建我們的外部數(shù)據(jù)庫(kù)吧!

創(chuàng)建一個(gè)外部數(shù)據(jù)庫(kù)

繼續(xù)在main.tf中,我們接下來(lái)要搭建RDS數(shù)據(jù)庫(kù)。

module "database" {
source = "./database"

vpc_id = "${module.networking.vpc_id}"
database_subnet_ids = [
"${module.networking.vpc_subnet_a}",
"${module.networking.vpc_subnet_b}",
"${module.networking.vpc_subnet_c}",
]
database_port = "${var.database_port}"
database_name = "${var.database_name}"
database_username = "${var.database_username}"
database_password = "${var.database_password}"
database_instance_class = "${var.database_instance_class}"
}

數(shù)據(jù)庫(kù)將創(chuàng)建安全組,安全組由在我們網(wǎng)絡(luò)層定義的子網(wǎng)組成。你可以在Github上看到完整的數(shù)據(jù)庫(kù)terraform模板。

$> terraform plan -target="module.database"
... output ...
Plan: 3 to add, 0 to change, 0 to destroy.

$> terraform apply -target="module.database"
... output ...
module.database.aws_db_instance.rancherdb: Still creating... (4m20s elapsed)
module.database.aws_db_instance.rancherdb: Creation complete

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
為我們的ELB創(chuàng)建免費(fèi)證書(shū)

在這一步中,我們使用AWS證書(shū)管理器(ACM)為Rancher HA 證書(shū)管理SSL證書(shū)。你可以在ACM文檔中查閱如何請(qǐng)求一個(gè)免費(fèi)的SSL證書(shū)。因?yàn)閺腁CM請(qǐng)求證書(shū)的過(guò)程中需要手動(dòng)驗(yàn)證域名,我們不對(duì)這一部分進(jìn)行自動(dòng)化。一旦請(qǐng)求完成,引用SSL證書(shū)就和下面添加數(shù)據(jù)資源一樣簡(jiǎn)單,你可以在Github上看到該文件。

data "aws_acm_certificate" "rancher_ha_cert" {
domain = "${var.fqdn}"
statuses = ["ISSUED"]
}
創(chuàng)建HA服務(wù)器組

接下來(lái),我們用與ELB相關(guān)的安全組搭建一個(gè)ELB。然后,我們將添加3個(gè)EC2主機(jī)駐留在Rancher上。

module "rancher_server_ha" {
source = "./rancher_server_ha"

vpc_id = "${module.networking.vpc_id}"
tag_name = "${var.tag_name}"

# ssled domain without protocol e.g. moo.test.com
acm_cert_domain = "${var.acm_cert_domain}"
# domain with protocol e.g. https://moo.test.com
fqdn = "${var.fqdn}"

# ami that you created with packer
ami = {
us-east-1 = "ami-f05d91e6"
}

subnet_ids = [
"${module.networking.vpc_subnet_a}",
"${module.networking.vpc_subnet_b}",
"${module.networking.vpc_subnet_c}",
]

# database variables to be passed into Rancher Server Nodes
database_port = "${var.database_port}"
database_name = "${var.database_name}"
database_username = "${var.database_username}"
database_password = "${var.database_password}"
database_endpoint = "${module.database.endpoint}"
}

下面是HA服務(wù)器模板創(chuàng)建安全組、ELB和彈性伸縮組的細(xì)節(jié)。這個(gè)過(guò)程需要幾分鐘時(shí)間,因?yàn)槲覀冃枰却鼸C2實(shí)例啟動(dòng)。

$> terraform plan -target="module.rancher_server_ha"
... output ...
Plan: 11 to add, 0 to change, 0 to destroy.

$> terraform apply -target="module.rancher_server_ha"
... output ...

Apply complete! Resources: 11 added, 0 changed, 0 destroyed.

HA實(shí)例的云配置

我們?cè)?/files/userdata.template文件中提供自己的服務(wù)器節(jié)點(diǎn)資源。它填充了變量,來(lái)為我們的實(shí)例創(chuàng)建一個(gè)cloud-init配置。Cloud init文檔寫(xiě)了一個(gè)名為start-rancher.sh的文件,這一文件會(huì)在實(shí)例啟動(dòng)的時(shí)候被執(zhí)行。

你可以在這里查看文件的細(xì)節(jié)。

在ELB上指向DNS

現(xiàn)在你可以在我們創(chuàng)建的Rancher ELB上指向你的DNS server。導(dǎo)航去ELB console,你應(yīng)該能看到創(chuàng)建的ELB。接下來(lái)抓取ELB的DNS名并且在你的域名提供商處添加一個(gè)CNAME記錄它。

比如,在這篇博客中,我在rancher.domain.com上安裝了Rancher,接下來(lái)在https://rancher.domain.com訪問(wèn)管理員面板。

Rancher節(jié)點(diǎn)安裝

至此,我們已經(jīng)成功安裝了Rancher服務(wù)器,并且可以添加自定義主機(jī)或使用Rancher-provided主機(jī)驅(qū)動(dòng)了。如果我們有更多的自動(dòng)化嘗試,這里有一個(gè)也許可行的方法,讓你可以在AWS上自動(dòng)化autoscaled從屬節(jié)點(diǎn)集群。

在Rancher UI界面,我們按照文檔添加自定義主機(jī)。我們需要抓取幾個(gè)變量傳遞到我們的集群安裝模板上。

寫(xiě)入自定義主機(jī)時(shí)的命令是:

sudo docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher 

rancher/agent:${rancher_agent_version} ${rancher_reg_url}

# Example at the time of writing.
rancher_reg_url = https://rancher.domain.com/v1/scripts/AAAAABBBBB123123:150000000000:X9asiBalinlkjaius91238
rancher_agent_version = v1.2.0

在抓出這些變量后,下一步可以開(kāi)始創(chuàng)建節(jié)點(diǎn)。因?yàn)榕c建立HA相比這是一個(gè)多帶帶的進(jìn)程,在文件中我們先為Rancher節(jié)點(diǎn)的創(chuàng)建添上注釋。

$> terraform plan -target="module.rancher_nodes"
... output ...
Plan: 3 to add, 0 to change, 0 to destroy.

$> terraform apply -target="module.rancher_nodes"
... output ...

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

幾分鐘后,你應(yīng)該可以看到你的Rancher主機(jī)已出現(xiàn)在你的Rancher UI中。

總結(jié)

這篇文章的步驟非常多,但有了這個(gè)模板,我們現(xiàn)在可以多帶帶地建立Terraform組件,并在基礎(chǔ)設(shè)施層上進(jìn)行迭代。這有點(diǎn)像Docker鏡像建立的過(guò)程。

這對(duì)所有這些不同的組件帶來(lái)的最大好處是可替換性。如果你不喜歡本文中Docker Host操作系統(tǒng)的選擇,那么你可以改變Packer的配置并在Terraform中更新AMI ID。如果你不喜歡網(wǎng)絡(luò)層,那么只需看一眼Terraform腳本然后更新它。這個(gè)安裝教程只是一個(gè)讓Rancher運(yùn)行起來(lái)、讓你可以開(kāi)始你的項(xiàng)目的最初模板。

當(dāng)然,這并不是搭建Rancher最好的方式,但Terraform的布局是能夠隨著項(xiàng)目的持續(xù)進(jìn)行而持續(xù)改進(jìn)的。

進(jìn)一步改進(jìn)

這里顯示的VPC是駐留在公用子網(wǎng)傷的(出于簡(jiǎn)單性的考量),但如果你想保護(hù)數(shù)據(jù)庫(kù)和服務(wù)器之間的網(wǎng)絡(luò)流量,你需要更新網(wǎng)絡(luò)(這可能需要重建)。

其實(shí)你可以考慮將Rancher節(jié)點(diǎn)傳遞到一個(gè)多帶帶的項(xiàng)目上,而非像本教程一下添上注釋。

我們應(yīng)該看看如何在Terraform上做備份,以避免出現(xiàn)丟失文件夾的情況。所以對(duì)于想在生產(chǎn)環(huán)境中使用它的人來(lái)說(shuō),為S3備份中多做一些安裝是一定會(huì)有很大幫助的。

其實(shí)也可以將EFS添加進(jìn)腳本中,來(lái)添加分布式文件系統(tǒng),給我們各個(gè)節(jié)點(diǎn)提供支持。

跨區(qū)域RDS復(fù)制:terraform-community-modules/tf_aws_rds

使用由terrafrm社區(qū)管理的Terraform VPC模塊:terraform-community-modules/tf_aws_vpc

一些可供參考的架構(gòu)

很多社區(qū)成員和Rancher貢獻(xiàn)者為我們創(chuàng)造了很多值得參考的架構(gòu)。你在測(cè)試了本文的模板之后可以進(jìn)一步參考一下他們提供的一些結(jié)構(gòu),來(lái)改進(jìn)自己的基礎(chǔ)設(shè)施。

Terraform

https://github.com/mlaccetti/...

https://github.com/cloudnauti...

更多的網(wǎng)絡(luò)變體可以參考這里。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26822.html

相關(guān)文章

  • 使用RancherDroneCI建立超高速Docker CI/CD流水線

    摘要:本文作者為的架構(gòu)師,他分享了使用和建立超高速流水線的經(jīng)驗(yàn)。月日,北京海航萬(wàn)豪酒店,容器技術(shù)大會(huì)即將舉行。 Higher Education(highereducation.com)是一個(gè)連接學(xué)生與高校的入學(xué)申請(qǐng)平臺(tái),通過(guò)引入高意圖和高質(zhì)量的潛在學(xué)生,以及明確、有效的操作,為網(wǎng)站合作的大學(xué)吸引學(xué)生入學(xué)。每年Higher Education為其大學(xué)合作伙伴招收超過(guò)15000名在線學(xué)生入學(xué)申...

    dreamtecher 評(píng)論0 收藏0
  • 使用Convoy-NFS構(gòu)建共享卷

    摘要:警告因?yàn)槭堑囊粋€(gè)較新的服務(wù),它只能在有限的幾個(gè)位置上使用。現(xiàn)在你可以開(kāi)始從視圖中手動(dòng)創(chuàng)建一個(gè)卷,或干脆創(chuàng)建一個(gè)使用和卷名的服務(wù)。我非常期待看到和中的共享卷會(huì)有什么下一步的發(fā)展。 如果你用過(guò)Docker你就會(huì)知道,共享卷和跨主機(jī)的數(shù)據(jù)訪問(wèn)是個(gè)非常棘手的問(wèn)題。雖然Docker的生態(tài)系統(tǒng)在逐漸走向成熟,但對(duì)大多數(shù)人來(lái)說(shuō),在不同環(huán)境中實(shí)現(xiàn)持久化存儲(chǔ)還是很麻煩的。幸運(yùn)的是,Rancher一直在研...

    alin 評(píng)論0 收藏0
  • 基于Docker運(yùn)行彈性集群的五個(gè)關(guān)鍵點(diǎn)之:運(yùn)行高可用模式

    摘要:當(dāng)企業(yè)的運(yùn)維團(tuán)隊(duì)去維護(hù)一個(gè)彈性的容器集群時(shí),傳統(tǒng)的軟件部署方式需要向容器遷移,這個(gè)過(guò)程中需要有風(fēng)險(xiǎn)預(yù)判和規(guī)避之道。但是這樣會(huì)有些問(wèn)題,就是大部分鏡像都是基于構(gòu)建的,這會(huì)和樹(shù)莓派的很不兼容。多次嘗試后狀態(tài)被破壞刪庫(kù)重試,重啟大法好。 當(dāng)前技術(shù)世界的發(fā)展形勢(shì)就是讓開(kāi)發(fā)人員從繁瑣的應(yīng)用配置和管理中解放出來(lái),使用容器鏡像來(lái)處理復(fù)雜的程序運(yùn)行依賴庫(kù)的需求,保證代碼運(yùn)行環(huán)境的一致性。既然這樣的好處...

    antz 評(píng)論0 收藏0
  • 如何通過(guò)Rancher webhook微服務(wù)實(shí)現(xiàn)Service/Host的彈性伸縮

    摘要:概述結(jié)合大家的應(yīng)用場(chǎng)景,本篇旨在介紹如何通過(guò)的微服務(wù)來(lái)實(shí)現(xiàn)的彈性伸縮。流程介紹創(chuàng)建服務(wù)對(duì)象。通過(guò)阿里云創(chuàng)建實(shí)例對(duì)象,打上標(biāo)簽。第三方觸發(fā),完成彈性伸縮。環(huán)境準(zhǔn)備,,,,,均可部署。本次準(zhǔn)備的引擎版本是。 概述 結(jié)合大家CICD的應(yīng)用場(chǎng)景,本篇Blog旨在介紹如何通過(guò)Rancher的webhook微服務(wù)來(lái)實(shí)現(xiàn)Service/Host的彈性伸縮。 流程介紹 Service Scale ...

    leone 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<