日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

容器鏡像部署物

對于使用Docker容器鏡像部署的場景,推薦使用容器鏡像部署物。計算巢提供了公共的ACR容器鏡像實例用來托管保存,一個服務商對應一個命名空間進行多租戶隔離。本文為您介紹容器鏡像部署物使用場景與原理,以及如何創建和使用容器鏡像部署物。

使用場景

通過公網拉取但希望私有化部署的Docker容器鏡像,可使用容器鏡像部署物通過臨時密鑰實現服務部署。

重要

容器鏡像部署物不支持后續的彈性自動伸縮或動態任務頻繁拉取的需求。

如果您的服務場景不適用容器鏡像部署物。

  • 無公網訪問能力的服務

    對于無法開通公網訪問能力的服務,可以通過自建ACR容器鏡像倉庫的方式,配置容器鏡像倉庫的內網鏈接,實現內網拉取。請參見 配置專有網絡的訪問控制

  • 部署后仍有拉取需求的服務

    私有化部署:需要提供自建的公開ACR容器鏡像倉庫以保持拉取權限。

    托管版服務:可以創建私有化的ACR容器鏡像倉庫,并通過ACK集群提供的免密拉取插件進行拉取。

    請參見 使用免密組件拉取容器鏡像

  • 公開可拉取的容器鏡像

    對于可以公開拉取的容器鏡像,沒必要使用容器鏡像部署物,可以直接使用公開的容器鏡像倉庫鏈接進行部署。

實現原理

由于多個服務商的容器鏡像存放在一個鏡像倉庫中,為了實現多租戶隔離,目前采用一個服務商對應一個命名空間的方式進行容器鏡像存放,在上傳和拉取時根據服務商AliUid獲取對應命名空間的臨時密鑰,權限控制以命名空間為維度。

image

詳細說明

  1. 上傳容器鏡像到計算巢ACK倉庫

    1. 服務商調用計算巢服務獲取臨時密鑰,計算巢調用ACR服務獲取以服務商AliUid為名稱的命名空間的臨時密鑰。

    2. 服務商使用獲取的臨時密鑰,將本地的容器鏡像上傳到計算巢ACR倉庫中,存放在以服務商AliUid為名稱的命名空間中。

  2. 部署容器鏡像到ACK集群

    1. 計算巢服務獲取服務商對應的容器鏡像臨時密鑰,以Secret的方式部署到ACK集群中。

    2. 接著部署容器鏡像,將容器鏡像部署物替換為計算巢容器鏡像倉庫中的容器鏡像鏈接,指定拉取密鑰為部署的Secret。

    3. ACK集群中會進行對應容器鏡像的拉取,完成后續的部署工作。

容器鏡像部署物為什么使用托管版方案?

Docker容器鏡像可以通過ACR(阿里云容器鏡像服務)來保存。服務商可以選擇上傳鏡像到自己的私有倉庫并自行管理。然而,考慮到購買ACR實例的成本、方便進行安全掃描的需求以及防止服務商意外刪除鏡像的問題,計算巢提供一個公共的容器鏡像倉庫即計算巢ACR倉庫,專門用于保存和維護服務商的容器鏡像,確保了安全和穩定性。

應用原理

需要在服務的ROS模板中定義以下兩個標識,在部署時進行替換。

  • {{ computenest::acrimage::yourimage }} 容器鏡像部署物標識位,計算巢會在部署服務模板時進行替換,替換為關聯部署物對應的容器鏡像地址,如compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/aliUid1/volcanosh/vc-controller-manager:1.0

  • {{ computenest::acr::dockerconfigjson }} 容器鏡像倉庫拉取密鑰標識位,在部署時會替換為容器鏡像拉取臨時密鑰,用來進行私有容器鏡像的拉取。

使用容器鏡像部署物進行部署的示例YAML如下所示,可以看到拉取密鑰{{ computenest::acr::dockerconfigjson }}部署成了Secret computenestrepo,作為容器鏡像部署物的imagePullSecret去拉取部署物替換后的容器鏡像。

示例代碼

Resources:
  ClusterApplication:
    Type: ALIYUN::CS::ClusterApplication
    Properties:
      YamlContent: |
          apiVersion: v1
          data:
            .dockerconfigjson: {{computenest::acr::dockerconfigjson}}
          kind: Secret
          metadata:
            name: computenestrepo
            namespace: nginx
          type: kubernetes.io/dockerconfigjson
          ---
          apiVersion: apps/v1
          kind: Deployment
          spec:
            template:
              spec:
                containers:
                - name: nginx
                  image: {{ computenest::acrimage::nginx }}
                  ports:
                  - containerPort: 80
                imagePullSecrets:
                - name: computenestrepo

創建并使用

前提條件

已安裝Docker并制作Docker鏡像。如果您沒有,請參見Docker的安裝與使用

創建容器鏡像部署物

  1. 配置部署物的基本信息。

    1. 登錄計算巢控制臺,在左側導航欄選擇服務部署物,并在部署物區域中單擊創建部署物

    2. 部署物信息區域,完成部署物信息填寫。

      配置項

      說明

      部署物名稱

      由中文、數字、英文及下劃線組成,長度在 3~50 個字符之間,一個中文字等于 2 個字符,部署物名稱創建后不可修改。

      部署物版本名稱

      由中文、數字、英文及下劃線組成,長度在 3~50 個字符之間,一個中文字等于 2 個字符。

      部署物描述

      簡介長度在10-500個字符之間,一個中文字等于2個字符。

      資源組

      選擇創建的部署所歸屬的資源組名稱。

      資源組對您擁有的云資源從用途、權限、歸屬等維度進行分組,實現企業內部多用戶、多項目的資源分級管理。更多信息,請參見資源組

      標簽配置

      選擇或填寫完整的標簽鍵和標簽值,為部署物定標簽。每個資源最多可綁定20條標簽。若無可選的標簽鍵和標簽值,可創建自定義標簽。創建自定義標簽的詳細操作,請參見創建并綁定自定義標簽

  2. 配置容器鏡像部署物。

    本節以上傳apache-php5鏡像為例。

    1. 部署物內容區塊,選擇部署物類型容器鏡像

    2. 單擊獲取訪問憑證,可以獲得上傳容器鏡像到計算巢倉庫的命令。

      image

      1. 登錄命令行工具,輸入登錄命令登錄計算巢鏡像倉庫。

        image

      2. 將您的容器鏡像進行計算巢鏡像倉庫打標。

        image

      3. 推送已打標的容器鏡像。

        image

    3. 執行成功后,在選擇商品中選取上傳的容器鏡像,并單擊發布部署物

      image

  3. 查看部署物。

    1. 返回服務部署物頁面,單擊部署物名稱,進入部署物詳情界面查看部署進度。

    2. 當狀態為可用時,表示創建完成。

      image

使用容器鏡像部署物

本節以創建私有化部署服務為例,重點介紹在創建服務時使用容器鏡像部署物相關配置。

  1. 登錄計算巢控制臺

  2. 在左側導航欄中選擇我的服務,在我創建的服務區域下單擊創建新服務

  3. 創建私有化部署服務。

    image

  4. 根據提示填入服務基本信息,在錄入模板中根據實際情況進行選擇并輸入ROS模板。

    在服務ROS模板ALIYUN::CS::ClusterApplication資源中定義訪問憑證標識位{{ computenest::acr::dockerconfigjson }} 和容器鏡像部署物標識{{ computenest::acrimage::yourimage }}

    示例模板

    說明

    本示例模板僅可用于測試。

    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: Application deployed by docker
      zh-cn:  使用docker部署單機應用
    Parameters:
      PayType:
        Type: String
        Label:
          en: ECS Instance Charge Type
          zh-cn: 付費類型
        Default: PostPaid
        AllowedValues:
          - PostPaid
          - PrePaid
        AssociationProperty: ChargeType
        AssociationPropertyMetadata:
          LocaleKey: InstanceChargeType
      PayPeriodUnit:
        Type: String
        Label:
          en: Pay Period Unit
          zh-cn: 購買資源時長周期
        Default: Month
        AllowedValues:
          - Month
          - Year
        AssociationProperty: PayPeriodUnit
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
      PayPeriod:
        Type: Number
        Label:
          en: Period
          zh-cn: 購買資源時長
        Default: 1
        AllowedValues:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          - 8
          - 9
        AssociationProperty: PayPeriod
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
      EcsInstanceType:
        Type: String
        Label:
          en: Instance Type
          zh-cn: 實例類型
        AssociationProperty: ALIYUN::ECS::Instance::InstanceType
        AssociationPropertyMetadata:
          InstanceChargeType: ${PayType}
        AllowedValues:
          - ecs.g8i.large
          - ecs.g6.large
        
      InstancePassword:
        NoEcho: true
        Type: String
        Description:
          en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
          zh-cn: 服務器登錄密碼,長度8-30,必須包含三項(大寫字母、小寫字母、數字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符號)
        AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
        Label:
          en: Instance Password
          zh-cn: 實例密碼
        ConstraintDescription:
          en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
          zh-cn: 長度8-30,必須包含三項(大寫字母、小寫字母、數字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符號)
        MinLength: 8
        MaxLength: 30
        AssociationProperty: ALIYUN::ECS::Instance::Password
      ZoneId:
        Type: String
        Label:
          en: Zone ID
          zh-cn: 可用區ID
        AssociationProperty: ALIYUN::ECS::Instance::ZoneId
      VpcId:
        Type: String
        Label:
          en: VPC ID
          zh-cn: 專有網絡VPC實例ID
        Description:
          en: >-
            Please search the ID starting with (vpc-xxx) from console-Virtual
            Private Cloud
          zh-cn: 現有虛擬專有網絡的實例ID
        AssociationProperty: 'ALIYUN::ECS::VPC::VPCId'
      VSwitchId:
        Type: String
        Label:
          en: VSwitch ID
          zh-cn: 交換機實例ID
        Description:
          en: >-
            Instance ID of existing business network switches, console-Virtual
            Private Cloud-VSwitches under query
          zh-cn: 現有業務網絡交換機的實例ID
        Default: ''
        AssociationProperty: 'ALIYUN::ECS::VSwitch::VSwitchId'
        AssociationPropertyMetadata:
          VpcId: VpcId
          ZoneId: ZoneId
      AdminPassword:
        Type: String
        AssociationProperty: ALIYUN::ECS::Instance::Password
        Label: 管理員密碼
        NoEcho: True
    Resources:
      SecurityGroup:
        Type: ALIYUN::ECS::SecurityGroup
        Properties:
          SecurityGroupName:
            Ref: ALIYUN::StackName
          VpcId:
            Ref: VpcId
          SecurityGroupIngress:
            - PortRange: 80/80
              Priority: 1
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
              NicType: internet
      InstanceGroup:
        Type: ALIYUN::ECS::InstanceGroup
        Properties:
          # 付費類型
          InstanceChargeType:
            Ref: PayType
          PeriodUnit:
            Ref: PayPeriodUnit
          Period:
            Ref: PayPeriod
          VpcId:
            Ref: VpcId
          VSwitchId:
            Ref: VSwitchId
          SecurityGroupId:
            Ref: SecurityGroup
          ZoneId:
            Ref: ZoneId
          ImageId: centos_7
          Password:
            Ref: InstancePassword
          InstanceType:
            Ref: EcsInstanceType
          SystemDiskCategory: cloud_essd
          SystemDiskSize: 200
          InternetMaxBandwidthOut: 5
          IoOptimized: optimized
          MaxAmount: 1
      WaitCondition:
        Type: ALIYUN::ROS::WaitCondition
        Properties:
          Count: 1
          Handle:
            Ref: WaitConditionHandle
          Timeout: 300
      WaitConditionHandle:
        Type: ALIYUN::ROS::WaitConditionHandle
      InstallPackage:
        Type: ALIYUN::ECS::RunCommand
        Properties:
          InstanceIds:
            Fn::GetAtt:
              - InstanceGroup
              - InstanceIds
          Type: RunShellScript
          Sync: true
          Timeout: 300
          CommandContent:
            Fn::Sub:
              - |
                yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
                yum makecache fast
                yum -y install docker-ce jq
                systemctl enable docker
                systemctl start docker
                sleep 10
    
                dockerJson='{{ computenest::acr::dockerconfigjson }}'
                decodeDockerJson=$(echo $dockerJson | base64 -d)
                host=$(echo $decodeDockerJson | jq '.auths' | jq 'keys' | jq .[0])
                username=$(echo $decodeDockerJson | jq ".auths.$host.username" | tr -d '"')
                password=$(echo $decodeDockerJson | jq ".auths.$host.password" | tr -d '"')
                host=$(echo $host | tr -d '"')
                docker login $host --username=$username --password=$password
    
                mkdir -p /home/admin/application
                cat >/home/admin/application/docker-compose.yaml<<EOF
                # docker-compose.yaml中可以引用參數
                # 單個nginx服務實例
                services:
                  # 服務名
                  nginx:
                    # Docker鏡像
                    image: {{computenest::acrimage::nginx}}
                    # 端口映射
                    ports:
                      - 80:80
                    volumes:
                      - /home/admin/application/nginx/logs:/var/log/nginx/
                EOF
                
                cat > /etc/systemd/system/docker-compose-app.service <<EOF
                [Unit]
                Description=Docker Compose Application Service
                Requires=docker.service
                After=docker.service
                
                [Service]
                Type=oneshot
                RemainAfterExit=yes
                WorkingDirectory=/home/admin/application
                ExecStart=/usr/bin/docker compose up -d
                ExecStop=/usr/bin/docker compose down
                TimeoutStartSec=0
                
                [Install]
                WantedBy=multi-user.target
                EOF
                
                systemctl enable docker-compose-app
    
                # 在Docker Compose啟動前執行此命令片段,命令中可以引用參數
                echo "before docker compose starts"
                mkdir -p /home/admin/application/nginx/logs
                
                systemctl start docker-compose-app
                sleep 10
                # 在Docker Compose啟動后執行此命令片段,命令中可以引用參數
                echo "after docker compose starts"
                echo ${AdminPassword}
                
                # 執行成功回調WaitCondition結束waitCondition的等待
                ${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
              - CurlCli:
                  Fn::GetAtt:
                    - WaitConditionHandle
                    - CurlCli
    Outputs: 
      Endpoint:
        Value:
          Fn::Sub:
            - http://${Address}:80
            - Address:
                Fn::Select:
                - 0
                - Fn::GetAtt:
                  - InstanceGroup
                  - PublicIps
    Metadata:
      ALIYUN::ROS::Interface:
        ParameterGroups:
          - Parameters:
              - PayType
              - PayPeriodUnit
              - PayPeriod
            Label:
              default: 付費類型配置
          - Parameters:
              - EcsInstanceType
              - InstancePassword
            Label:
              default: 資源配置
          
          - Parameters:
              - AdminPassword
            Label:
              en: Software Configuration
              zh-cn: 軟件配置
          
          - Parameters:
              - ZoneId
              - VpcId
              - VSwitchId
            Label:
              default: 可用區配置
  5. 部署物關聯區塊中設置容器鏡像關聯。單擊選擇部署物,在彈框中選擇部署物和版本,最后單擊確定完成容器鏡像部署物替換。

    image

  6. 完成服務的創建,并測試通過后, 請根據計算巢服務的發布審核標準進行自檢,并提交審核。發布審核標準的詳細信息,請參見發布審核標準

  7. 服務創建完成后,可以在服務詳情頁查看部署物關聯關系。

    image

相關文檔

  • 關于創建計算巢服務的詳細內容,請參見創建服務

  • 當您不再需要部署物或部署物版本時,可刪除該部署物或部署物版本,請參見刪除部署物

  • 當您需要變更部署物內容等信息時,可通過創建新版本來實現,請參見創建新版本

  • 設置部署物的升級配置,請參見服務升級配置