<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      devops-cd之esxi和docker實(shí)戰(zhàn)

      概要

      devops-cd之vagrant virtualbox實(shí)戰(zhàn)

      https://www.yuque.com/wushifengcn/kb/qo3kmu

      這篇文章講解和示范了vagrant自動(dòng)化virtualbox的情況

      在vmware跨機(jī)器和docker場(chǎng)景下如下使用呢,本文總結(jié)下

      • vmware esxi
        • 通過vagrant操控
        • 通過terraform操控
      • docker
        • docker-compose
        • docker swarm

      名詞

      Vmware 服務(wù)器虛擬化第一個(gè)產(chǎn)品叫ESX,該產(chǎn)品只有60天測(cè)試,沒有官方認(rèn)可的免費(fèi)版。后來Vmware在4版本的時(shí)候推出了ESXI,ESXI和ESX的版本最大的技術(shù)區(qū)別是內(nèi)核的變化,ESXI更小,更安全,從其他方面來說ESXI可以在網(wǎng)上申請(qǐng)永久免費(fèi)的license,但是兩個(gè)版本的收費(fèi)版功能是完全一樣的。

      從4版本開始VMware把ESX及ESXi產(chǎn)品統(tǒng)稱為vSphere,但是VMware從5版本開始以后取消了原來的ESX版本,所以現(xiàn)在來講的話vSphere就是ESXI,只是兩種叫法而已。一般官方文檔中以稱呼vSphere為主。

       

      • ESXi Free版被更名為VMware vSphere Hypervisor
      • vSphere的免費(fèi)產(chǎn)品名字叫vSphere Hypervisor,而收費(fèi)產(chǎn)品有各個(gè)版本,包括Essentials,Standard,Enterprise和Enterprise Plus。
      • vCenter Server則是另外一個(gè)獨(dú)立產(chǎn)品,用于集中式管理vSphere環(huán)境。

      【 VMware ESX 和 VMware ESXi 都是直接安裝在服務(wù)器硬件上的裸機(jī)管理程序】

      ESXI上部署

      軟件可以在官方下載

      https://my.vmware.com/cn/web/vmware/downloads/info/slug/datacenter_cloud_infrastructure/vmware_vsphere/7_0

      具體的esxi server可以通過WEB瀏覽器進(jìn)行管理

      下面我們關(guān)注的是遠(yuǎn)程的自動(dòng)化操作,vagrant和terrafom都可以來操控,可以根據(jù)自己的熟悉程度和自己的團(tuán)隊(duì)的技術(shù)棧來選擇

      vagrant操控

      #

      vagrant plugin list | grep vagrant-vmware-esxi || {

      vagrant plugin install --plugin-clean-sources --plugin-source https://gems.ruby-china.com/ --debug vagrant-vmware-esxi

      }

       

      vagrant box list|grep 'centos7.4_vmware' || {

      vagrant init centos7.4_vmware "http://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-1708_01.VMwareFusion.box"

      #導(dǎo)入后在 ~/.vagrant.d/boxes/centos7.4_vmware/0/vmware_desktop 可以看到虛擬機(jī)文件

      }

       

      # 修改Vagrantfile后執(zhí)行即可遠(yuǎn)程部署和啟動(dòng)我們?cè)O(shè)置的虛擬機(jī)vagrant up --provider=vmware_esxi

      vagrant up

       

      Vagrantfile的vmware_esxi插件語法和例子參考如下

      https://hub.fastgit.org/josenk/vagrant-vmware-esxi

      https://hub.fastgit.org/josenk/vagrant-vmware-esxi/tree/master/example_box

       

      設(shè)置好Vagrantfile后,即可使用vagrant的命令語法來操控了

      terraform操控

      https://registry.terraform.io/providers/hashicorp/vsphere/latest terraform官方針對(duì)vsphere的操作說明是針對(duì)大多是針對(duì)vcenter進(jìn)行操作,有的也可以直接在esxi server上執(zhí)行執(zhí)行,如果安裝vcenter有些復(fù)雜

      我們選這一個(gè)比較簡(jiǎn)潔的方式,社區(qū)的一個(gè)實(shí)現(xiàn)https://hub.fastgit.org/josenk/terraform-provider-esxi

      【注意這個(gè)依賴于

      • ovftool from VMware.

      安裝 Vmare workstation 后直接有這個(gè)工具 【或者https://code.vmware.com/web/tool/4.4.0/ovf 下載,VMware-ovftool-4.4.1-16812187-lin.x86_64.bundle 】

      • You MUST enable ssh access on your ESXi Server

      terraform配置文件main.tf

      variable "vm_name" {

       description = "VM to be created's name"

       default = "testvm"

      }

       

      variable "vcpus" {

       description = "VM to be created's Cpu count"

       default = "1"

      }

       

      variable "memsize" {

       description = "VM to be created's memory[mb]"

       default = "1024"

      }

      variable "state" {

       description = "VM state[on / off]"

       default = "on"

      }

       

      terraform {

       required_version = ">= 0.13"

       required_providers {

         esxi = {

           source = "josenk/esxi"

           version = "1.8.1"

         }

       }

      }

       

      #esxi server的信息

      provider "esxi" {

       esxi_hostname      = "192.168.80.201"

       esxi_hostport      = "22"

       esxi_hostssl       = "443"

       esxi_username      = "root"

       esxi_password      = "Root123!"  

      }

       

      resource "esxi_guest" "vmtest" {

       guest_name         = var.vm_name

       disk_store         = "datastore1"

       power = var.state

       numvcpus = var.vcpus

       memsize = var.memsize

       

      #準(zhǔn)備部署的ova文件,這個(gè)提前準(zhǔn)備好

       ovf_source        = "./ovaexp/vmtest.ova"

       network_interfaces {

         virtual_network = "VM Network"

         # mac_address =

         # nic_type = "e1000"

       }

      }

       

      output "ip" {

       value = esxi_guest.vmtest.ip_address

      }

      部署腳本vm.sh

      執(zhí)行如下的內(nèi)容,即可動(dòng)態(tài)的建立一個(gè)虛擬機(jī)了【由于josenk/esxi這個(gè)provider不能直接設(shè)置ip,因此腳本中換了種方式使用ansible進(jìn)行設(shè)置】

      #!/bin/bash

      set -xeuo pipefail

      BaseDir=$(cd "$(dirname "$0")"; pwd)

      cd ${BaseDir}

       

      #原始的IP和需要改變成的IP

      #192.168.80.100

      RIP=192.168.80.100 #inventory的地址和這個(gè)一樣

      NAME=${1-TEST}

      VCPUS=${2-1}

      MEMSIZE=${3-1024}

      IP=${4-192.168.80.100}

      echo "Create VM: ${NAME} ${VCPUS} ${MEMSIZE} ${IP}"

       

      #1 通過terraform導(dǎo)入一個(gè)固定IP的虛擬機(jī)

      #指定虛擬機(jī)名字、CPU個(gè)數(shù)、內(nèi)存大小[MB]

      terraform apply -auto-approve -var "vm_name=${NAME}" -var "vcpus=${VCPUS}" -var "memsize=${MEMSIZE}"

       

      #2 如上固定的IP可用后,使用ansbile修改IP

      # ova鏡像先期條件 ssh -o StrictHostKeyChecking=no -i ./id_rsa vagrant@192.168.80.100

      [ "${IP}" = "${RIP}" ] || {

      ansible all -i inventory -m ping

      ansible all -i inventory -m replace -a "path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp=${RIP} replace=${IP}" -b

       

      #修改后重啟下機(jī)器

      terraform apply -auto-approve -var "vm_name=${NAME}" -var "vcpus=${VCPUS}" -var "memsize=${MEMSIZE}" -var "state=off"

      terraform apply -auto-approve -var "vm_name=${NAME}" -var "vcpus=${VCPUS}" -var "memsize=${MEMSIZE}" -var "state=on"

      }

      #如上做完了,在這個(gè)虛擬機(jī)上可以自由發(fā)揮了

       

      echo "done"

       

      inventory文件內(nèi)容

      [ovfbase]

      192.168.80.100

       

      [ovfbase:vars]

      # ansible_ssh_user ansible_ssh_pass

      ansible_ssh_port=22

      ansible_ssh_user=vagrant

      ansible_ssh_private_key_file=./id_rsa.pub

      host_key_checking=false

      docker上部署

      • 單機(jī)上
        • 只是運(yùn)行某個(gè)容器,直接命令行或者shell腳本即可
        • 如果是多個(gè)容器并有依賴關(guān)系等比較復(fù)雜的設(shè)置,可以使用docker-compose
      • 多機(jī)上
        • docker swarm進(jìn)行分布式部署【不過這個(gè)逐步淘汰了,k8s是目前更主流的形式】,但優(yōu)點(diǎn)是比k8s簡(jiǎn)單易用

      docker-compose

      docker-compose是在單機(jī)上進(jìn)行容器編排的工具

      在多機(jī)分布式式容器編排,docker公司提供的是swarm產(chǎn)品,目前主流的是k8s

      docker-compose是python寫的程序,可以從這下載單個(gè)的打包執(zhí)行文件,放入/usr/bin/下直接使用【 https://github.com/docker/compose/releases ,python方式的安裝方法pip install docker-compose】

       

      docker-compose通過配置好的compose文件運(yùn)行【compose文件中指定了運(yùn)行的所有設(shè)置,默認(rèn)讀取的文件名為docker-compose.yml】,compose文件語法

      https://docs.docker.com/compose/compose-file/compose-file-v3/

       

      從這個(gè)例子可以看到概貌

      https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples

      例子解釋

      version: "3.9" compose的版本

      services: 啟動(dòng)的容器服務(wù)節(jié),這個(gè)下面可以定義各種服務(wù)

       

       redis: 定義一個(gè)服務(wù)

         image: redis:alpine 容器鏡像名稱

         ports: 提供服務(wù)的端口,也可以設(shè)置映射到host機(jī)器的端口

           - "6379"

         networks:使用的網(wǎng)絡(luò)

           - frontend

         deploy: swarm方式下的部署條件設(shè)置

           replicas: 2

           update_config:

             parallelism: 2

             delay: 10s

           restart_policy:

             condition: on-failure

       

       db:

         image: postgres:9.4

         volumes: 存儲(chǔ)卷設(shè)置

           - db-data:/var/lib/postgresql/data 將docker的db-data卷映射到容器的/var/lib/postgresql/data目錄

         networks:

           - backend

         deploy:

           placement:

             max_replicas_per_node: 1

             constraints:

               - "node.role==manager"

       

       vote:

         image: dockersamples/examplevotingapp_vote:before

         ports:

           - "5000:80"

         networks:

           - frontend

         depends_on:

           - redis

         deploy:

           replicas: 2

           update_config:

             parallelism: 2

           restart_policy:

             condition: on-failure

       

       result:

         image: dockersamples/examplevotingapp_result:before

         ports:

           - "5001:80"

         networks:

           - backend

         depends_on:

           - db

         deploy:

           replicas: 1

           update_config:

             parallelism: 2

             delay: 10s

           restart_policy:

             condition: on-failure

       

       worker:

         image: dockersamples/examplevotingapp_worker

         networks:

           - frontend

           - backend

         deploy:#swarm集群下管理節(jié)點(diǎn)上【node.role==manager】部署1個(gè)實(shí)例,可彈性部署【replicated】

           mode: replicated

           replicas: 1

           labels: [APP=VOTING] #標(biāo)簽用于分類和過濾等,k8s中一個(gè)很關(guān)鍵的屬性

           restart_policy:

             condition: on-failure

             delay: 10s

             max_attempts: 3

             window: 120s

           placement:

             constraints:

               - "node.role==manager"

       

       visualizer:

      image: dockersamples/visualizer:stable

      environment: #部署主機(jī)的主機(jī)名hostname

       - node.name=visualizer

         ports:

           - "8080:8080"

         stop_grace_period: 1m30s

         volumes:

           - "/var/run/docker.sock:/var/run/docker.sock"

         deploy:

           placement: #swarm集群下僅在管理節(jié)點(diǎn)部署這個(gè)容器

             constraints:

               - "node.role==manager"

       

      networks: 網(wǎng)絡(luò)設(shè)置,如下設(shè)置了2個(gè)網(wǎng)絡(luò),網(wǎng)絡(luò)的配置使用默認(rèn)

       frontend:

       backend:

       

      volumes: 卷配置

       db-data:

       

      大體的邏輯關(guān)系:

      frontend網(wǎng)絡(luò)中

      redis容器:redis 6379服務(wù)

      vote容器:依賴于redis容器,80服務(wù),映射到主機(jī)的端口是5000

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

      db容器:postgres 服務(wù),持久化數(shù)據(jù)到db-data卷

      result容器:依賴于db, 80服務(wù)端端口,映射到主機(jī)的端口是5001

       

      跨越frontend backend網(wǎng)絡(luò)

      worker容器:

       

      默認(rèn)的docker網(wǎng)絡(luò):

      visualizer容器: 8080服務(wù)端端口,映射到主機(jī)的端口是8080

      常用命令

      • 啟動(dòng)
        • 服務(wù)方式:
          • docker-compose up -d:容器不存在創(chuàng)建并運(yùn)行
          • docker-compose start: 容器已經(jīng)存在時(shí)運(yùn)行
        • 阻塞方式:docker-compose up
        • 指定某個(gè)配置運(yùn)行:docker-compose -f docker-composeV3.yml up
      • 停止
        • docker-compose down: Stop and remove containers, networks, images, and volumes
        • docker-compose stop: Stop services
      • 清理
        • docker-compose rm

      docker常用運(yùn)行例子

      • docker run --rm/-itd -v $PWD:/rally --name rally --network host dev.docker:8085/elastic/rally:2.0.0 --track=nyc_taxis --test-mode --pipeline=benchmark-only --target-hosts=localhost:9200
        • --rm/-itd:--rm運(yùn)行后直接刪除容器; itd 服務(wù)方式運(yùn)行容器
        • -v $PWD:/rally: 將當(dāng)前目錄掛載到容器的/rally目錄下,作為存放數(shù)據(jù)目錄使用
        • --name rally:執(zhí)行容器的名字,這樣docker exec之類的方便使用
        • --network host:直接使用主機(jī)的ip地址
        • dev.docker:8085/elastic/rally:2.0.0:鏡像的名稱和版本
        • --track=nyc_taxis... :運(yùn)行是傳遞的參數(shù),這個(gè)是和容器內(nèi)啟動(dòng)程序配合的,如果直接寫bash/sh之類,那就會(huì)啟動(dòng)個(gè)shell
      • docker exec -uroot -it rally sh
        • 已經(jīng)運(yùn)行的容器,以root用戶shell登錄進(jìn)去
      • docker logs rally -f
        • 查看運(yùn)行的rally容器的輸出日志

      https://developer.aliyun.com/article/783289?spm=a2c6h.12883283.1362932.3.5f1f201cdosA8U 《AI開發(fā)者的Docker實(shí)踐》這個(gè)電子書可以參考

      Tip

      • 多容器間主機(jī)名的通訊
        • 在同一個(gè)網(wǎng)絡(luò)的容器可以直接通過主機(jī)名【或容器名】通訊,docker內(nèi)部相當(dāng)于有個(gè)dns,直接解析成了ip
      • docker的數(shù)據(jù)存儲(chǔ)
        • 數(shù)據(jù)不要在容器內(nèi)直接存儲(chǔ),因此容器的格式是aufs,效率沒有ext等文件系統(tǒng)高
        • 數(shù)據(jù)一般使用docker建立卷或者映射主機(jī)的目錄,具體有如下幾種
          • docker volume命令建立的卷
          • -v 映射主機(jī)的數(shù)據(jù)目錄掛載到容器的卷
          • 在容器內(nèi)使用nfs之類遠(yuǎn)程掛載
      • host主機(jī)ip幫助
        • docker-compose -h
        • docker-compose help up ....
      • docker-compose中變量使用
        • 啟動(dòng)時(shí)設(shè)置變量 export ELASTIC_VERSION=7.9.0
        • compose文件中引用
          • image: dev.docker:8085/kibana:${ELASTIC_VERSION:-7.8.0}
      • 容器內(nèi)的服務(wù)提供服務(wù)
        • 容器想提供服務(wù),需要首先確保容器內(nèi)對(duì)應(yīng)的服務(wù)進(jìn)程的正常
        • 服務(wù)端口需要暴露,expose
        • 對(duì)外提供服務(wù)
          • 方式1:使用容器的:ip+端口
          • 方式2:設(shè)置端口映射,使用:host主機(jī)ip+映射端口
          • 方式3:僅在網(wǎng)絡(luò)模式設(shè)置了host模式時(shí),使用:host主機(jī)ip+expose端口
          • 【方式1,2如果對(duì)其他的主機(jī)提供服務(wù)還需要一些特別的設(shè)置,方式3其他主機(jī)可以直接訪問這個(gè)服務(wù);服務(wù)的診斷curl tcpdump工具很重要】
      • docker的鏡像
        • Dockerfile文件的約定 https://docs.docker.com/engine/reference/builder/
        • 自己做鏡像是,鏡像大小需要注意下,這個(gè)有較多的優(yōu)化技巧【當(dāng)然如果只是局域網(wǎng)內(nèi)部用,大小不受限的話就無所謂】
      • docker鏡像被墻了
        • 方式1:使用vpnFQ下載
        • 方式2:使用阿里云容器服務(wù)或者github上進(jìn)行海外構(gòu)建方式,可以規(guī)避這個(gè)問題【執(zhí)行查找docker海外構(gòu)建】
      • 容器的資源如何限制
        • cpu 、內(nèi)存等都是可以設(shè)置的,具體參考官方文檔,命令行和compose文件都可以設(shè)置
      • 容器和HOST主機(jī)如何傳遞數(shù)據(jù)文件
        • 方式1:基于sftp相互拷貝【需要容器配置好ssh服務(wù)并開啟sftp】
        • 方式2:使用docker cp FILES containerName:FILES 互相拷貝
        • 方式3:使用共享的卷傳遞,docker運(yùn)行時(shí)-v指定的共享目錄
      • 容器運(yùn)行數(shù)據(jù)如何清理
        • 運(yùn)行相關(guān)的數(shù)據(jù)涉及 network volume container system【這個(gè)包含了前面3個(gè)】,清理這些數(shù)據(jù)時(shí)這些數(shù)據(jù)資源不能正在使用,其中volume這個(gè)需要慎重,這是程序運(yùn)行保存的數(shù)據(jù),需要做好備份
        • 使用方法類似:docker system prune -f
      • 容器的資源使用情況如何監(jiān)控
        • 在容器內(nèi)執(zhí)行top看到的數(shù)據(jù)不是容器的數(shù)據(jù),監(jiān)控需要使用類似
          • 容器內(nèi)運(yùn)行:ctop
          • HOST機(jī)器上運(yùn)行:cadvisor、metricbeat、docker stats 命令行查看
      • 在HOST主機(jī)上如何自動(dòng)運(yùn)行容器內(nèi)的腳本等執(zhí)行文件
        • 類似: docker exec -it radius sh "apk add freeradius-client",權(quán)限不對(duì)的可以增加-u username 參數(shù)

      參考

      devops-hasicorp產(chǎn)品圖 https://www.yuque.com/wushifengcn/kb/bbvrtw

      devops-cd之esxi和docker實(shí)戰(zhàn)  https://www.yuque.com/wushifengcn/kb/tyy1r6

      devops-cd之vagrant virtualbox實(shí)戰(zhàn) https://www.yuque.com/wushifengcn/kb/qo3kmu

       
      posted @ 2021-04-08 10:14  2012  閱讀(1830)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产精品毛片一区二区| 一区二区三区激情免费视频 | 久久精品蜜芽亚洲国产AV| 重口SM一区二区三区视频| 欧美日韩国产图片区一区| 国产精品久久久久久久网| 江西省| 熟女在线视频一区二区三区| 国内精品自线在拍| 国产午夜精品久久精品电影| 久久精品天天中文字幕人妻| 久久人搡人人玩人妻精品| 亚洲人成网网址在线看| 四虎库影成人在线播放| 亚洲一区二区中文av| 欧美肥老太wbwbwbb| 国产另类ts人妖一区二区| 国产中文99视频在线观看| 无套内谢极品少妇视频| 97超级碰碰碰碰久久久久| 亚洲一区二区乱码精品| 亚洲熟女乱色一区二区三区 | 日韩乱码人妻无码中文字幕视频| 日韩精品人妻av一区二区三区| 云林县| 亚洲女同精品久久女同| 97久久综合亚洲色hezyo| 成人欧美一区二区三区在线| 国产99久久精品一区二区| 久久久久久久久久久免费精品| 人妻少妇精品视频专区| 欧美人与性动交α欧美精品| 亚洲午夜伦费影视在线观看| 精品一区二区三区女性色| 丰满少妇呻吟高潮经历| 欧美性猛交xxxx乱大交极品| 国产精品免费中文字幕| 亚洲精品乱码久久久久久蜜桃| 国产精品粉嫩嫩在线观看| 91亚洲国产三上悠亚在线播放| a在线免费|