利用Azure Functions和k8s構建Serverless計算平台

題記:昨晚在一個技術社區直播分享了“利用Azure Functions和k8s構建Serverless計算平台”這一話題。整個分享分為4個部分:Serverless概念的介紹、Azure Functions的簡單介紹、k8s和KEDA的介紹和最後的演示。

Serverless

Serverless其實包含了兩種概念:BaaS(Backend as a Service)和FaaS(Function as a Service)。這次的分享主要針對的是FaaS概念。

FaaS的最大特徵就是:無需管理自己的服務器或擁有自己的持續運行的服務應用的情況下運行後端代碼。 上面加粗的地方其實也揭示了FaaS和PaaS的本質區別:你為了運行後端代碼,需不需要擁有一套持續運行的服務端完整應用(不管是WebSite還是Web API)。

另外,FaaS還擁有如下特徵:

  • 可以使用任何語言,不需要針對特定框架和函數進行編碼
  • 部署方式和傳統系統有很大不同
  • 水平伸縮完全自動化、彈性,並由平台供應商管理
  • 函數通常由事件觸發,部分平台供應商支持接收HTTP觸發

當然判斷什麼東西不是FaaS也有一些標準:

  • 能否在20ms啟動半秒執行完,根本區別在於伸縮性的方式
  • FaaS也可能依賴容器,但是和其他使用容器的應用區別在於伸縮性的自動化、透明和細度
  • 沒有傳統的Ops,但是應用本身運維過程還是需要,甚至更難(因為不同)

使用FaaS有其優缺點,這裏就報喜不報憂,只列一下優點:

  • 降低運維成本
    • 基礎設施共享
    • 減少基礎設施維護人工成本
  • 降低伸縮成本
    • 按量付費:偶爾請求,流量忽高忽低
    • 優化代碼即可省錢
  • 更易運維
    • 伸縮的好處利於降低運維難度
    • 降低打包和部署複雜度
    • 快速投入市場,持續優化

Azure Functions

以官方文檔的介紹:Azure Functions 允許你運行小段代碼(稱為“函數”)且不需要擔心應用程序基礎結構。 藉助 Azure Functions,雲基礎結構可以提供應用程序保持規模化運行所需的所有最新狀態的服務器。 函數由特定類型的事件“觸發”。 支持的觸發器包括對數據更改做出響應、對消息做出響應、按計劃運行,或者生成 HTTP 請求的結果。 雖然你始終可以直接針對大量服務編寫代碼,但使用綁定可以簡化與其他服務的集成。 使用綁定,你能夠以聲明方式訪問各種 Azure 服務和第三方服務。

Azure Functions包含如下功能:

  • 無服務器應用程序:使用 Functions,可在 Microsoft Azure 上開發無服務器應用程序。
  • 語言選擇:使用所選的 C#、Java、JavaScript、Python 和 PowerShell 編寫函數。
  • 按使用付費定價模型:僅為運行代碼所用的時間付費。
  • 自帶依賴項:Functions 支持 NuGet 和 NPM,允許你訪問你喜歡的庫。
  • 集成的安全性:使用 OAuth 提供程序(如 Azure Active Directory、Facebook、Google、Twitter 和 Microsoft 帳戶)保護 HTTP 觸發的函數。
  • 簡化的集成:輕鬆與 Azure 服務和軟件即服務 (SaaS) 產品/服務進行集成。
  • 靈活開發:直接在門戶中編寫函數代碼,或者通過 GitHub、Azure DevOps Services 和其他受支持的開發工具設置持續集成和部署代碼。
  • 有狀態無服務器體繫結構:使用 Durable Functions 協調無服務器應用程序。
  • 開放源代碼:Functions 運行時是開源的,可在 GitHub 上找到。

大家看到了,Azure Functions雖然是來源於微軟Azure的技術,但是是使用MIT協議開源的,且已經貢獻給.NET Foundation

所以,你可以使用Azure Functions來搭建(甚至定製)自己的Serverless計算平台。開源的不僅是Azure Functions框架本身,還包括了命令行工具(可以支持本地調試)和VSCode的擴展。當然,開發工具除了前面兩者,你還是可以使用宇宙第一的IDE:Visual Studio。

下面是相關開源的地址:

  • 框架:https://github.com/Azure/azure-functions-host
  • 命令行工具:https://github.com/Azure/azure-functions-core-tools
  • VSCode擴展:https://github.com/Microsoft/vscode-azurefunctions

只有開源的框架還不行,還需要運行環境,正如大部分開源FaaS框架一樣,Azure Functions也把k8s作為運行環境。不過為了達到自動伸縮、不使用就不消耗資源的目標,還需要搭配其他中間件才能達到效果。

k8s和KEDA

眾所周知,Kubernetes已經成為最主流的PaaS平台,各大公有雲提供商都提供了k8s的服務,比如微軟Azure上的AKS或者阿里雲的ACK。

為了更好的理解為什麼k8s可以作為Serverless完美的運行環境,是需要對如下概念有一些深入的理解的:

  • Pod和Deployment:Pod代表了運行函數的實例,而Deployment用於控制函數的實例數。
  • HPA(Horizontal Pod Autoscaler):k8s內置的水平Pod自動伸縮器,其基於一些度量指標(比如內存、CPU等)來對Deployment的Pod實例數進行伸縮。
  • Helm Charts:一個強大的打包、發布k8s應用的包管理器。我們開發好的函數在編譯為Docker Image之後,可以用Helm Charts來打包(當然也可以直接用k8s的yaml文件)。

k8s雖然提供了HPA,但是它無法基於更靈活的事件源來進行伸縮,也無法把Pod的實例數縮到0,或者由0伸到1。這個時候,就需要另外一個開源項目KEDA出場了(貢獻者來自微軟、AWS等大公司,以及很多社區志願者)。

KEDA:Kubernetes Event-driven Autoscaling。項目地址在:https://github.com/kedacore/keda。其具有如下特點:

  • 事件驅動
  • 輕而易舉實現自動伸縮
  • 內置伸縮器
  • 多種負載類型
  • 社區開源項目
  • 支持Azure Functions

KEDA的架構如下圖所示:

從這個架構圖,我們看到KEDA包含了3個組件,Metric Adapter給k8s的HPA提供度量指標讓其進行1-n/n-1的伸縮,Controller控制Pod進行1-0/0-1的伸縮,Scaler偵聽配置的觸發器所觸發的事件。

且支持的伸縮器涵蓋了大部分主流雲組件或中間件:

  • Apache Kafka
  • AWS CloudWatch
  • AWS Kinesis Stream
  • AWS SQS Queue
  • Azure Blob Storage
  • Azure Event Hubs
  • Azure Monitor
  • Azure Service Bus
  • Azure Storage Queue
  • External
  • GCP Pub/Sub
  • Huawei Cloudeye
  • Liiklus Topic
  • MySQL
  • NATS Streaming
  • PostgreSQL
  • Prometheus
  • RabbitMQ Queue
  • Redis List

演示

既然Azure Functions是開源技術,為了驗證技術中立性,在演示過程中特意選擇了阿里雲的ACK作為運行環境(Kubernetes託管版),並使用RabbitMQ作為伸縮觸發器。

同時,我們採用C#/.NET Core來作為函數的開發語言。為什麼用這個選擇,是因為有第三方對AWS Lambda上的支持的語言進行了性能測試,得到的結論是.NET Core的C#和F#語言性能最高:

來源:https://read.acloud.guru/comparing-aws-lambda-performance-of-node-js-python-java-c-and-go-29c1163c2581

環境準備

首先,需要到阿里雲上創建一個k8s集群,創建的選項截圖如下:

通過如下命令來部署KEDA到k8s:

helm repo add kedacore https://kedacore.github.io/charts
kubectl create namespace keda
helm install keda kedacore/keda --namespace keda

通過如下命令來部署RabbitMQ到k8s:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install rabbitmq --set rabbitmq.password=PASSWORD,service.type=LoadBalancer bitnami/rabbitmq

這裏需要注意(當然也可能是我打開方式不對),阿里雲的ACK不能自動創建pv,所以rabbitmq部署後會有問題,所以需要到阿里雲的ACK的控制面板裏面手動創建pv,並重建rabbitmq所需的同名pvc。

創建Azure Functions項目

訪問:https://github.com/Azure/azure-functions-core-tools,安裝命令行工具。

在命令行中輸入:

func init --docker

來初始化一個帶有Dockerfile的Azure Functions項目,worker runtime選擇dotnet。

在命令行中輸入:

func function create

來創建一個函數,template選擇QueueTrigger,輸入你想要的函數名稱。

使用你喜歡的編輯器(比如VSCode)打開項目文件夾,修改csproj文件中的PackageReference為如下內容:

<ItemGroup>
  <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.3" />
  <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.RabbitMQ" Version="0.2.2029-beta" />
</ItemGroup>

修改函數代碼為如下內容:

[FunctionName("MyMqFunction")]
public static void Run(
    [RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMqConnection")] string inputMessage,
    [RabbitMQ(QueueName = "downstream", ConnectionStringSetting = "RabbitMqConnection")] out string outputMessage,
        ILogger log)
{
    Thread.Sleep(5000);
    outputMessage = inputMessage;
    log.LogInformation($"RabittMQ output binding function sent message: {outputMessage}");
}

這個函數從一個名為”queue“的隊列中讀取inputMessage,延遲5秒后,把消息存儲到名為”downstream”的隊列中。

打開local.settings.json文件,在Values節點下添加RabbitMqConnection:

"Values": {
  "AzureWebJobsStorage": "UseDevelopmentStorage=true",
  "FUNCTIONS_WORKER_RUNTIME": "dotnet",
  "RabbitMqConnection":"amqp://user:PASSWORD@rabbitmq.default.svc.cluster.local:5672"
},

這裏RabbitMQ的地址使用了k8s內部的默認Service地址,為了方便本地調試,你可以獲取到RabbitMQ在k8s的公網IP后,給這個域名添加host配置。

在命令行中輸入:

func start

就可以進行本地調試了。調試無誤,就可以進行發布到k8s的工作了。

以上示例代碼可以在這裏找到:https://github.com/heavenwing/AzFuncOnK8S

發布函數到k8s並驗證伸縮能力

考慮到我用的阿里雲拉取Docker Hub比較慢,所以我是編譯出Docker Image后,push到了阿里雲的鏡像倉庫當中。 另外,我這裏還遇到一個問題,就是能在AKS中正常運行的Docker Image在ACK中無法正常運行,出現”Access to the path ‘/proc/1/map_files’ is denied”的錯誤,我的臨時解決辦法是修改Dockerfile文件,添加WORKDIR命令。

在把Docker Image推送到鏡像倉庫后,可以在命令行中輸入:

func kubernetes deploy --name azfunconk8s --image-name registry.cn-chengdu.aliyuncs.com/zygcloud/azfunconk8s:latest --dry-run > deploy-funcs.yaml

得到部署的yaml文件后,我們需要對ScaledObject進行一點修改,為rabbitmq的trigger配置添加queueLength,根據需要配置maxReplicaCount屬性,如下所示:

apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
  name: azfunconk8s
  namespace: default
  labels:
    deploymentName: azfunconk8s
spec:
  scaleTargetRef:
    deploymentName: azfunconk8s
  maxReplicaCount: 20
  triggers:
  - type: rabbitmq
    metadata:
      type: rabbitMQTrigger
      queueName: queue
      name: inputMessage
      host: RabbitMqConnection
      queueLength: "20"

現在就可以把函數部署到k8s了,在命令行中輸入:

kubectl apply -f .\deploy\deploy-funcs.yaml

這個時候應該可以看到k8s出現了名為azfunconk8s的Deployment,且需要實例和運行實例數都是為0:

另外寫一個小程序,往RabbitMQ的queue隊列裏面放一些測試消息,經過30秒(默認pollingInterval時間)那麼就會看到這個Deployment的所需實例數在提高,一直提高到你設置的maxReplicaCount。等隊列中的消息處理完成,又會看到所需實例數在降低,等沒有消息需要處理之後過上5分鐘(默認cooldownPeriod時間),所需實例數就會變為0。

紅包

能看到這裏的小夥伴都是愛學習的,應該紅包獎勵,不過當然是需要回答問題的。
問:KEDA解決的是非http的觸發器伸縮,那麼什麼東西可以解決http觸發器伸縮問題?
在我的公眾號中輸入答案,獲取支付寶紅包口令,數量有限先答對先得。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

聚甘新

使用四叉樹優化碰撞檢測

四叉樹是干什麼的?

百度百科
四元樹又稱四叉樹是一種樹狀數據結構,在每一個節點上會有四個子區塊。四元樹常應用於二維空間數據的分析與分類。 它將數據區分成為四個象限。數據範圍可以是方形或矩形或其他任意形狀。
從定義我們可以看出重點信息:

  1. 樹狀結構
  2. 四個區塊
  3. 分類
  4. 矩形

圖示講解

講解之前需要先說明一下四叉樹是用來做什麼的,明白了原理才好理解它的行為。
使用四叉樹就是使用分類的方法,減少碰撞節點的個數,只取出與給定碰撞體相同區域或者壓在碰撞體所在區域邊上的對象。

  1. 將遊戲屏幕分為四個區域。
  2. 插入對象
  3. 插入的對象超過了我們設置的閾值時,劃分
  4. 插入的對象再次超過了我們設置的閾值時,繼續分。

分析

插入

從上面的圖示我們可以很好理解四叉樹的原理。涉及的都是插入操作。
那麼插入操作具體都做了什麼呢?

從代碼中我們可以看出:

  1. 當插入第一個對象的時候只走了2;這個時候沒有子樹,所以不會走1,因為objects(管理的對象)的長度還沒有超過我們設置的閾值MAX_OBJECTS,所以也不會走3。
  2. 一直插入,當objects中的數量,超過了我們設置的閾值MAX_OBJECT,就會開始劃分,產生子樹,有了nodes,劃分之後將自己管理的節點插入到子樹中。再此之前,都不會走1,因為還沒有產生子樹。
  3. 劃分之後再次插入新對象,如果對象可以獲得對應的象限,就會走1 不會走2和3,如果沒有獲得對應的象限才會走2,3(沒有獲得的情況可能是你創建的對象在屏幕外,遊戲中很多情況是敵人從屏幕外走進屏幕的,具體可參考我做的《星際迷航》或者《星際戰》遊戲)。

更新對象

我是把四插入作為了對象管理器使用,要不然對象也需要更新,所以有了這一步操作。如果不這樣你需要自己創建對象管理器,一個一個放進去,刪除。通過四叉樹直接管理省了不少事情。

更新象限信息。

這是一個遞歸操作,更新象限做的事情比較多了。

  1. 檢查對象是否存活,如果死亡就回收,我這裏使用了對象池,所以對象實現了poolAble接口。

  2. 判斷對象的所佔區域是否在四叉樹的區域內
    這裏需要說明的是一個四叉樹本身的區域是它管理的四個象限這麼大。也就是一個四叉樹管理四個象限

    不在管理區域的話需要判斷當前this是否為根節點,如果是說明對象已經出屏了。(這個時候可以通過對象實現的isVisible接口來控制是否回收,因為不是所有在屏幕外的都要回收,比如要進入屏幕的敵人,是不可能回收的,所以需要自己用isVisible接口來控制)。如果不是就將對象放入根節點,重新劃分。

  3. 在管理區域內,就看看在四叉樹管理的哪個象限里。更新象限信息。

    如果沒有變化什麼都不過,如果有變化,先判斷象限是否為-1,為什麼會出現-1,也就是不在四個象限的任何一個象限?因為壓線了。此番操作后的結果如下圖。

根據給定矩形獲取對象列表

  1. 第一個是步長,用於獲取深度,當然深度越長,處理的時間越長,獲取的對象也精細。這個可以根據自己遊戲的同屏四叉樹層級而定了。
  2. 如果通過obj的rect獲得對象所在象限如果獲得了對應的象限,用獲得的象限的四叉樹再獲取。如果壓線的話就需要將碰撞的兩個象限的內容都取出來。
  3. 返回四叉樹中沒有分割象限的對象。

怎麼用呢?

自然就是把要碰撞的對象傳給retrieve函數獲得需要碰撞的對象列表進行碰撞檢測了。
也就是文章靠頭說的:
使用四叉樹就目的是為了減少碰撞節點的個數。使用的是分類的方法。
至於用什麼樣的碰撞檢測函數,不是四叉樹關心的事情,

至於用幾個四叉樹管理對象,也不是四叉樹關心的事情。

結語

想要demo的同學可以去我的微店或者官方creator商城購買《跨引擎遊戲框架》源碼,跟demo是一個項目。買過的同學請加我好友,群已經建好,有更新我會群里直接發包。

源碼購買入口:

demo展示:

項目截圖:

框架的相關模塊教程可以到《我的專輯》遊戲開發進階教程中獲取。
後續還會推出更多與框架有關的教程:如:戰鬥框架,教學框架等等。並附帶完整的遊戲實現(飛行射擊遊戲為例,學會做飛行射擊遊戲不是目的,目的是通過這一款遊戲,你可以獲得做其他所有類型的遊戲的思路)。希望可以在不餓死自己的前提下幫助更過的朋友們快速找到開發思路。

長按下方二維碼,關注《微笑遊戲》公眾號,獲取更多精彩內容。

歡迎掃碼關注公眾號《微笑遊戲》,瀏覽更多內容。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

聚甘新

C# WPF – MVVM實現OPC Client管理系統

前言

本文主要講解採用WPF MVVM模式設計OPC Client的過程,算作對於WPF MVVM架構的學習記錄吧!不足之處請不吝賜教,感謝!

涉及知識點

  • C#基礎
  • Xaml基礎
  • 命令、通知和數據綁定
  • Prism+Blend
  • MahApps.Metro(第三方框架)
  • OPC

項目實現功能

  • 用戶登陸(模擬登陸過程,未連接數據庫)
  • OPC同步讀寫、異步讀寫操作等

開發環境

  • Window 10
  • Visual Studio 2019
  • .Net Framework 4.8

成品效果圖

項目詳解

MVVM框架搭建

為了節省開發時間,在事件綁定上使用了Prism框架,OPC通信方面使用了OPCDAAuto.dll類庫,二者均可以通過Nuget方式安裝到項目中。

  • 定義了一個DelegateCommand類用來處理屬性和命令;
  • 定義了一個NotificationObject類用來通知屬性和命令的改變;

注意:在使用事件綁定時,需要添加引用 xmlns:i=”http://schemas.microsoft.com/xaml/behaviors”,然後根據控件對應事件的名稱設置綁定命令即可。

比如我們想給ComboBox的SelectionChanged事件設置一個事件綁定,可這麼寫

xaml代碼:

<ComboBox
    x:Name="CombServerList"
    Width="120"
    Margin="{StaticResource ControlMargin}"
    ItemsSource="{Binding ServerList}">
    <!--  事件綁定  -->
    <i:Interaction.Triggers>
          <i:EventTrigger EventName="SelectionChanged">
             <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}" CommandParameter="{Binding ElementName=CombServerList}" />
          </i:EventTrigger>
     </i:Interaction.Triggers>

</ComboBox>

View Code

VM代碼:

        public ICommand SelectionChangedCommand
        {
            get
            {
                return new Prism.Commands.DelegateCommand<ComboBox>((combobox) =>
                {
                   // 業務邏輯
                });
            }
        }

View Code

相關類的定義代碼如下:

 public class DelegateCommand : ICommand
    {
        public event EventHandler CanExecuteChanged;

        /// <summary>
        /// 判斷判斷命令是否可以被執行
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public bool CanExecute(object parameter)
        {
            if (this.CanExecuteFunc != null)
            {
                this.CanExecuteFunc(parameter);
            }
            else
            {
                return true;
            }
            return false;
        }

        /// <summary>
        /// 執行相關的函數或者命令
        /// </summary>
        /// <param name="parameter"></param>
        public void Execute(object parameter)
        {
            if (this.ExecuteAction != null)
            {
                this.ExecuteAction(parameter);
            }
            else
            {
                return;
            }
        }

        /// <summary>
        /// 聲明一個委託用來執行命令對應的方法
        /// </summary>
        public Action<object> ExecuteAction { get; set; }

        /// <summary>
        /// 聲明一個方法,用來判斷命令是否可以被執行
        /// </summary>
        public Func<object, bool> CanExecuteFunc { get; set; }

    }

DelegateCommand

public class NotificationObject : INotifyPropertyChanged
    {
        /// <summary>
        /// 實現接口
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// 通知屬性的改變
        /// </summary>
        /// <param name="propertyName"></param>
        public void RaisePropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

NotificationObject

UI界面搭建

這裏主要採用第三方開源框架MahApps.Metro,可以通過NuGet方式安裝到項目中,這裏不再展開講解,感興趣的朋友可以參考 MahApps.Metro – Quick Start

OPC相關處理

大致分為如下幾步:

  • 獲取OPC服務列表
  • 連接OPC服務
  • 創建分組
  • 獲取項目列表
  • 添加項目到分組中
  • 對項目的內容進行讀寫操作

比較簡單,不再展開了。

登陸界面

這裏我們說一說登陸界面的實現,由於追求PURE MVVM,所以這裡有三點需要說明一下:

  • PasswordBox綁定
  • 圓形頭像
  • 登陸窗體切換

PasswordBox綁定:自定義幫助類,使用PasswordBoxBehavior實現綁定;

圓形頭像:自定義樣式,增加Image圓角屬性;

登陸窗體切換:藉助prism的shell。

至此,已全部結束。

  作者:Jeremy.Wu
  出處:https://www.cnblogs.com/jeremywucnblog/
  本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

FB行銷專家,教你從零開始的技巧

聚甘新

中國大陸公布電動車違規業者,市場趨緩?

先前北京重金支持環保車,新能源車飆速成長,人人都想分杯羹。如今當局態度驟變、開始教訓業者,接連兩天公布違規廠商名單。北京政策大轉彎,新能源車恐怕會從生機蓬勃的春天一夕轉為料峭刺骨的寒冬。

BusinessKorea、路透社報導,中國財政部8日懲處了至少五家車廠,指控他們的電動車和油電混合車計畫不實,非法取得人幣10億元補助,決定吊銷蘇州吉姆西客車製造(Suzhou Gemsea Coach Manufacturing)的生產執照,並對另外四家車廠處以罰款,其中包括中國第七大轎車廠奇瑞控股(Chery Holding)的子公司。

專家指出,這表示中國新能源車政策出現劇變,中國企業工業協會(CAAM)副秘書長Xu Yanhua說,這對車業是一大打擊,對執法有重大影響。9日北京當局再次出擊,官媒中國證券報再公布了20家違規車廠,包括日本的日產汽車(Nissan)、韓國的現代汽車、中國的吉利汽車、江淮汽車(JAC)、比亞迪(BYD)子公司等。

北京調查騙補,勢必會影響新能源車銷售,難以達到年度銷售70萬輛的目標。今年前八個月,新能源車僅售出24.5萬輛,和目標差距極大,當局又當頭澆下冷水,沒了補助誘因,車商更沒動力推出電動車,車市恐會驟然轉冷。

台灣電動車概念股包括康普、F-貿聯、和大、F-乙盛、胡連、健和興、台達電等。

北京政策急轉彎有跡可循,當局為了降低財庫負擔、促進技術發展,決定調整政策,未來擬降低補貼、拉高准入門檻,讓新能源車行業告別「野蠻生長」、迎來一輪優勝劣汰的洗牌。不過,這也意味著大陸目前超過200家的新能源車新創業者有超過9成5恐在兩年內被淘汰出局。

大陸官營的人民日報8月27日報導,由於新能源車補貼政策的激勵和准入門檻較低,行業在快速發展的同時也產生不少問題,比如重複建設、低品質、同質化產品現象嚴重,甚至出現了企業騙補的情況。對此,財政部官員透露,近期將調整新能源汽車的補貼政策。中國已在去(2015)年超越美國成為全球最大新能源車(包括電動車、插電式油電混合車以及燃料電池車)市場。

(本文內容由授權提供)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

聚甘新

福斯推出概念電動車,續航力上看600公里

福斯汽車(Volkswagen)因排氣造假醜聞而加速電動車研發腳步,不僅研發電動車平台MEB,更預計在今年9月底的巴黎車展上推出首輛由MEB平台打造的電動概念車。這款電動概念車的續航力據報導可達400~600公里。

媒體報導,福斯這款即將面世MEB平台電動概念車,外觀較接近既有車款,大小類似Golf,空間則接近Passat。為維持價格合理,並未採用太多昂貴的輕量複合材質。

值得注意的是,在NEDC標準測試下,這款概念車的續航力可達400~600公里之遠。優異的續航性能與合理定價,將有助提高消費者對產品的接受度。此外,這款概念車據稱已十分接近量產階段,預期會在2019年正式投產。

MEB平台也會陸續研發出多款電動汽車,如Phaeton、Budd-e等。福斯計畫在2025年之前推出至少30款電動車款,並在2030年時將電動車銷售量提高到旗下總銷量的三分之一。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司“嚨底家”!

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

聚甘新

Formula E 香港開賽,在地團隊推出新車

由FIA於2012年成立推行的Formula E電動方程式賽車,今年10月8、9日將在香港開賽。香港全城不僅摩拳擦掌準備迎接賽事,一支在地團隊也將展示一輛「100%香港製造」的未來電動概念車。

Formula E的第一場正式賽事於2014年在中國北京舉行,至今已巡迴亞、歐、美洲多個國家,2015-2016賽季的參賽車隊共有九隊。Formula E與正規方程式賽車最大的差別之處,在於所有賽車都是電動車,希望藉此鼓勵電動車技術發展。

香港中環海濱區將於10月8、9日舉辦Formula E本季賽事的其中一場比賽。除了引人注目的賽事之外,賽車場附近的eVillage空間也將展出一輛概念電動車,搭載智能化安全駕駛輔助系統、再生能源、電腦視覺等功能。系統亦可收集交通數據,即時提示交通路況。

這輛概念電動車由香港科學園公司整合九個科技團隊的技術所打造,是香港第一輛100%港產電動車。科學園公司也表示將與香港本地的一家巴士公司合作,研究將電動車計入應用於巴士上,並預計在今年年底推出自動駕駛巴士。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

FB行銷專家,教你從零開始的技巧

聚甘新

特斯拉在台產學合作,台科大設充電站

今年9月正式登台的美國電動車品牌特斯拉(Tesla)宣布與台灣科技大學(台科大)推動產學合作,在台科大校園內設置電動車充電站,作為學生實習場所,未來還將提供學生產業實習的機會,共同培育電動車產業人才。

台科大校長廖慶榮在與特斯拉聯合舉辦的產學合作簽約暨校園充電站啟用儀式上表示,全球電動車市場不斷擴張,是未來性極佳的產業。與特斯拉的產學合作將能協助電力、電子、機械等相近領域的學生接觸電動車產業,行銷、推廣廣領域的學生也能受惠。

特斯拉在台科大校園內設置了6座特斯拉汽車專用的「目的地充電站」,包括1座位於校門口的展示用充電站、1座供學生實習,另外4座位於國際大樓B2停車場,開放民眾使用。每透過充電站充電1小時,最多可行駛100公里。

特斯拉的充電站分成超級充電站、家用充電站、目的地充電站三種。本次設置在台科大的目的地充電站,是目前分布最普遍的一種。

(照片提供:台科大)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

聚甘新

利基應用突破,崧騰五年車用佔比衝兩成

車用接單突破,電源開關模組廠商崧騰(3484)車用高壓連接器,8月起開始放量,另開關模組也切入大陸合資車廠,預計11、12月開始交貨。董事長張俊雲(附圖)表示,今(2016)年算是打入車用客戶很好的開始,2017-2018年會看到比較明顯的效果,五年內期許車用佔比能超過兩成。

崧騰成立於1992年,初期是以單純的開關鍵為主,其後在為日系工具機客戶開發機構與控制器,建立成功模式下,開始整合機構模具、電子控制器與軟硬體的能力,並逐步擴大利基領域的轉型;以今年前8月來看,資訊與消費電子的營收占比已掉到35~36%,取而代之的是工具機占比超過四成,家電占比則拉高至15~17%。

而今年崧騰在車用上也有重大突破。張俊雲透露,該公司在車用的產品包括車用電源插座、電池連接器、高壓連接器及開關模組等,以高壓連接器來說,因需承受至少170伏特以上的電壓測試,且車廠供應鏈封閉,過去幾乎都是如美商安費諾等的天下,但公司歷經一年以上的開發與認證,去年起已陸續打入電動機車及中美電動車大廠客戶,且8月起單月出貨已有萬顆水準,同時未來配合電源廠客戶台達電(2308)的開發進度,產品還有機會擴及電動車或充電座上其他機構零件。

除了高壓連接器,張俊雲說,在傳統車廠方面,崧騰也已接獲大陸合資車廠開關模組訂單,預計11、12月交貨。他說,今年是車用很好的開始,2017-2018年會看到比較明顯的成果,期許五年內車用佔比能突破兩成水準。

除利基應用的開花結果外,配合全球客戶的東南亞布局,崧騰也在2013年8月設立柬埔寨廠,工廠坐落於金邊奇倉工業區,2014年2月正式量產,生產端子座注射、線材加工、成品組裝等自動化相對較低的製程,現有月產能共計1,500萬個,對集團單月營業額貢獻80-100萬美元,占比近一成。

張俊雲說,包括台達電、日本客戶與美系工具機大廠,都逐步建置東南亞的供貨基地,主要考量不外乎人工成本較低與人力穩定度較高,而該公司當時赴柬國設廠,考慮的也是約當大陸及泰國三分之一的人工成本、政治相對穩定、沒有外匯管制、占比六成的勞動人口等;其對東南亞兩個據點泰國及柬埔寨的長期期許是,前者能擔綱集團在東協的銷售據點,後者則是製造中心,並能與中國大陸的華南及華東生產基地,並駕齊驅。

法人也估計,崧騰今年第三季營收可望創下新高,第四季小幅衰退,但下半年在營收規模與毛利率提升下,獲利將較上半年近倍成長,全年仍力拼本業獲利持續加溫,整體盈餘優於去年水準。

本文由嘉實資訊 MoneyDJ 授權使用 記者 蕭燕翔 報導

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

聚甘新

別賜死蘋果車?傳庫克沒死心、擬收購McLaren超跑

先前一度傳出蘋果電動車開發案「泰坦計畫」(Project Titan)胎死腹中,蘋果將放棄硬體,轉向研發自駕車技術。不過新消息顯示,蘋果似乎還沒死心,向英國超跑車商McLaren提親。

巴倫(Barronˋs)、英國金融時報21日報導,內情人士透露,蘋果考慮收購McLaren、或進行策略投資,雙方好幾個月前開始洽談。據了解,蘋果對McLaren的工程技術和專利極感興趣,估計若真要併購McLaren,價格可能為10~15億英鎊。不過相關人士強調,最近蘋果電動車發展方向改變,不確定是否繼續協商。

消息傳出後,McLaren發布聲明,表示未與蘋果討論投資提案,不過沒有說明蘋果是否曾接洽過該公司。

McLaren出面否認,仍然止不住市場議論。Creative Strategies分析師Ben Bajarin以特斯拉和英國超跑Lotus結盟為例,說明可行性。他指出,2004年特斯拉與Lotus合作,發布電動跑車「Tesla Roadster」,定價十萬美元。儘管Roadster賣不到3,000輛,卻替之後的特斯拉暢銷車款「Model S」打下基礎。Bajarin稱,特斯拉從高檔跑車出發,蘋果或許也會如此。

富國銀行(Wells Fargo)的Maynard Um則認為,蘋果看上的不是硬體,而是McLaren的感測器技術。他在報告稱,McLaren超跑聞名於世,但是蘋果青睞的應是旗下的McLaren Applied Technologies部門。McLaren跑車利用偵測器蒐集胎壓、煞車溫度、衝擊力道等資料,透過預測分析,提升汽車維修和表現;此一技術可運用於許多領域,如能源業、健保業等。

紐約時報9月初報導,知情人士透露,蘋果發展電動車計畫,因潛在競爭者眾且技術難度高而大打退堂鼓,策略面臨修正,部分泰坦研發案已提前結案,並連帶資遣數十名工作人員。

蘋果七月請回老將Bob Mansfield主導泰坦計畫,重心從硬體製造移往自駕車應用科技,裁員是策略轉向的一部份。谷歌在更早之前就開始研發自駕車,且已上路測試好幾年,重心同樣放在谷歌最擅長的軟體研發與應用。

本文由嘉實資訊 MoneyDJ 授權使用 記者 陳苓 報導

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

FB行銷專家,教你從零開始的技巧

聚甘新

001.OpenShift介紹

一 OpenShift特性

1.1 OpenShift概述


Red Hat OpenShijft Container Platform (OpenShift)是一個容器應用程序平台,它為開發人員和IT組織提供了一個雲應用程序平台,用於在安全的、可伸縮的資源上部署新應用程序,而配置和管理開銷最小。

OpenShift構建於Red Hat Enterprise Linux、Docker和Kubernetes之上,為當今的企業級應用程序提供了一個安全且可伸縮的多租戶操作系統,同時還提供了集成的應用程序運行時和庫。

OpenShift帶來了健壯、靈活和可伸縮的特性。容器平台到客戶數據中心,使組織能夠實現滿足安全性、隱私性、遵從性和治理需求的平台。不願意管理自己的OpenShift集群的客戶可以使用Red Hat提供的公共雲平台OpenShift Online。

1.2 OpenShift特性


OpenShift容器平台和OpenShift Online都是基於OpenShift Origin開源軟件項目的,該項目本身使用了許多其他開源項目,如Docker和Kubernetes。

應用程序作為容器運行,容器是單個操作系統內的隔離分區。容器提供了許多與虛擬機相同的好處,比如安全性、存儲和網絡隔離,同時需要的硬件資源要少得多,啟動和終止也更快。OpenShift使用容器有助於提高平台本身及其承載的應用程序的效率、靈活性和可移植性。

OpenShift的主要特性如下:

  • 自助服務平台:OpenShift允許開發人員使用Source-to-Image(S21)從模板或自己的源代碼管理存儲庫創建應用程序。系統管理員可以為用戶和項目定義資源配額和限制,以控制系統資源的使用。
  • 多語言支持:OpenShift支持Java、Node.js、PHP、Perl以及直接來自Red Hat的Ruby。同時也包括來自合作夥伴和更大的Docker社區的許多其他代碼。MySQL、PostgreSQL和MongoDB數據庫。Red Hat還支持在OpenShift上本地運行的中間件產品,如Apache httpd、Apache Tomcat、JBoss EAP、ActiveMQ和Fuse。
  • 自動化:OpenShift提供應用程序生命周期管理功能,當上游源或容器映像發生更改時,可以自動重新構建和重新部署容器。根據調度和策略擴展或故障轉移應用程序。
  • 用戶界面:OpenShift提供用於部署和監視應用程序的web UI,以及用於遠程管理應用程序和資源的CLi。它支持Eclipse IDE和JBoss Developer Studio插件,以便開發人員可以繼續使用熟悉的工具,並支持REST APl與第三方或內部工具集成。
  • 協作:OpenShift允許在組織內或與更大的社區共享項目。
  • 可伸縮性和高可用性:OpenShift提供了容器多租戶和一個分佈式應用程序平台,其中包括彈性,以處理隨需增加的流量。它提供了高可用性,以便應用程序能夠在物理機器宕機等事件中存活下來。OpenShift提供了對容器健康狀況的自動發現和自動重新部署。
  • 容器可移植性:在OpenShift中,應用程序和服務使用標準容器映像進行打包,組合應用程序使用Kubernetes進行管理。這些映像可以部署到基於這些基礎技術的其他平台上。
  • 開源:沒有廠商鎖定。
  • 安全性:OpenShift使用SELinux提供多層安全性、基於角色的訪問控制以及與外部身份驗證系統(如LDAP和OAuth)集成的能力。
  • 動態存儲管理:OpenShift使用Kubernetes持久卷和持久卷聲明的方式為容器數據提供靜態和動態存儲管理
  • 基於雲(或不基於雲):可以在裸機服務器、活來自多個供應商的hypervisor和大多數IaaS雲提供商上部署OpenShift容器平台。
  • 企業級:Red Hat支持OpenShift、選定的容器映像和應用程序運行時。可信的第三方容器映像、運行時和應用程序由Red Hat認證。可以在OpenShift提供的高可用性的強化安全環境中運行內部或第三方應用程序。
  • 日誌聚合和metrics:可以在中心節點收集、聚合和分析部署在OpenShift上的應用程序的日誌信息。OpenShift能夠實時收集關於應用程序的度量和運行時信息,並幫助不斷優化性能。
  • 其他特性:OpenShift支持微服務體繫結構,OpenShift的本地特性足以支持DevOps流程,很容易與標準和定製的持續集成/持續部署工具集成。

二 OpenShift架構

2.1 OpenShift架構概述


OpenShift容器平台是一組構建在Red Hat Enterprise Linux、Docker和Kubernetes之上的模塊化組件和服務。OpenShift增加了遠程管理、多租戶、增強的安全性、應用程序生命周期管理和面向開發人員的自服務接口。

OpenShift的架構:



  • RHEL:基本操作系統是Red Hat Enterprise Linux;
  • Docker:提供基本的容器管理API和容器image文件格式;
  • Kubernetes:管理運行容器的主機集群(物理或虛擬主機)。它處理描述由多個資源組成的多容器應用程序的資源,以及它們如何互連;
  • Etcd:一個分佈式鍵值存儲,Kubernetes使用它來存儲OpenShift集群中容器和其他資源的配置和狀態信息。


OpenShift在Docker + Kubernetes基礎設施之上添加了提供容器應用程序平台所需的更富豐的功能:

OpenShift-Kubernetes extensions:其它資源類型存儲在Etcd中,由Kubernetes管理。這些額外的資源類型形成OpenShift內部狀態和配置,以及由標準 Kubernetes管理的應用程序資源;

Containerized services:完成許多基礎設施功能,如網絡和授權。其中一些一直運行,另一些則按需啟動。OpenShift使用Docker和Kubernetes來實現大多數內部功能。即大多數OpenShift內部服務作為由Kubernetes管理的容器;

Runtimes and xPaaS:供開發人員使用的 base image,每個image都預配置了特定的runtime或db。xPaaS提供了一組用於JBoss中間件產品(如JBoss EAP和ActiveMQ)的 base image;

DevOps tools and user experience:OpenShift提供了Web UI和CLI管理工具,從而實現配置和監視應用程序、OpenShift服務和資源。Web和CLI工具都是由相同的REST api構建的,可供IDE和CI平台等外部工具使用。OpenShift 還可以訪問外部SCM存儲庫和容器registry,並將它們的構件引入OpenShift Cloud。

OpenShift不會向開發人員和系統管理員屏蔽Docker和Kubernetes的核心基礎設施。相反,它將它們用於內部服務,並允許將Docker和Kubernetes資源導入OpenShift集群,同時原始Docker和資源可以從OpenShift集群導出,並導入到其他基於docker的基礎設施中。

OpenShift添加到Docker + Kubernetes的主要價值是自動化開發工作流,因此應用程序的構建和部署在OpenShift集群中按照標準流程進行。開發者不需要知道底層Docker的細節。OpenShift接受應用程序,打包它,並將其作為容器啟動。

2.2 Master和nodes


OpenShift集群是一組節點服務器,它們運行容器,並由一組主服務器集中管理。服務器可以同時充當master和node,但是為了增加穩定性,這些角色通常是分開的。

OpenShift工作原理和交互視圖:




master節點運行OpenShift核心服務,如身份驗證,並未管理員提供API入口。

nodes節點運行包含應用程序的容器,容器又被分組成pod。

OpenShift master運行Kubernetes master服務和Etcd守護進程;

node運行Kubernetes kubelet和kube-proxy守護進程。

雖然在描述中通常沒有聲明,但實際上master本身也是node。

scheduler和management/replication是Kubernetes主服務,而Data Store是Etcd守護進程。

Kubernetes的調度單元是pod,它是一組共享虛擬網絡設備、內部IP地址、TCP/UDP端口和持久存儲的容器。pod可以是任何東西,從完整的企業應用程序(包括作為不同容器的每一層)到單個容器中的單個微服務。例如,一個pod,一個容器在Apache下運行PHP,另一個容器運行MySQL。

Kubernetes管理replicas來縮放pods。副本是一組共享相同定義的pod。

三 管理OpenShift

3.1 OpenShift項目及應用


除了Kubernetes的資源(如pods和services)之外,OpenShift還管理projects和users。一個projects對Kubernetes資源進行分組,以便用戶可以使用訪問權限。還可以為projects分配配額,從而限制了已定義的pod、volumes、services和其他資源。

OpenShift中沒有application的概念,OpenShift client提供了一個new-app命令。此命令在projects中創建資源,但它們都不是應用程序資源。這個命令是為標準開發人員工作流配置帶有公共資源的proiect的快捷方式。

OpenShift使用lables(標籤)對集群中的資源進行分類。默認情況下,OpenShift使用app標籤將相關資源分組到應用程序中。

3.2 使用Source-to-image構建映像


OpenShift允許開發人員使用標準源代碼管理倉庫(SCM)和集成開發環境(ide)來發布應用。

OpenShift中的source -to-lmage (S2I)流程從SCM倉庫中提取代碼,自動判斷所需的runtime,基於runtime啟動一個pod,在pod中編譯應用。

當編譯成功時,將在runtime image中添加層並形成新的image,推送進入OpenShift internal registry倉庫,接着基於這個image將創建新的pod,運行應用程序。

S2I可被視為已經內置到OpenShift中的完整的CI/CD管道。

CI/CD有不同的形式,根據具體場景表現不同。例如,可以使用外部CI工具(如Jenkins)啟動構建並運行測試,然後將新構建的映像標記為成功或失敗,將其推送到QA或生產。

3.2 管理OpenShift資源

OpenShift資源定義,如image、container、pod、service、builder、template等,都存儲在Etcd中,可以由OpenShift CLI, web控制台或REST API進行管理。

OpenShift的資源科通過JSON或YAML文件查看,並且在類似Git或版本控制的SCM中共享。OpenShift甚至可以直接從外部SCM檢索這些資源定義。

大多數OpenShift操作不需要實時響應,OpenShift命令和APIs通常創建或修改存儲在Etcd中的資源描述。Etcd然後通知OpenShift控制器,OpenShift控制器會就更改警告這些資源。

這些控制器採取行動,以便使得資源的最終態反應達到更改效果。例如,如果創建了一個新的pod資源,Kubernetes將在node上調度並啟動該pod,使用pod資源確定要使用哪個映像、要公開哪個端口,等等。或者一個模板被更改,從而指定應該有更多的pod來處理負載,OpenShift會安排額外的pod(副本)來滿足更新后的模板定義。

注意:雖然Docker和Kubernetes是OpenShift的底層,但是必須主要使用OpenShift CLi和OpenShift APls來管理應用程序和基礎設施。OpenShift增加了額外的安全和自動化功能,當直接使用Docker或Kubernetes命令和APls時,這些功能必須手動配置,或者根本不可用。因此強烈建議不要使用docker或Kubernetes的命令直接管理應用。

四 OpenShift網絡

4.1 OpenShift網絡概述


Docker網絡相對簡單,Docker創建一個虛擬內核橋接器(docker0網卡),並將每個容器網絡接口連接到它。

Docker本身沒有提供允許一個主機上的pod連接到另一個主機上的pod的方法。Docker也沒有提供嚮應用程序分配公共固定IP地址的方法,以便外部用戶可以訪問它。

但Kubernetes提供service和route資源來管理pods之間的網絡,以及從外部到pods的路由流量。service在不同pods之間提供負載均衡用於接收網絡請求,同時為service的所有客戶機(通常是其他pods)提供一個內部IP地址。

container和pods不需要知道其他pods在哪裡,它們只連接到service。route為service提供一個固定的惟一DNS名稱,使其對OpenShift集群之外的客戶端可見。

Kubernetes service和route資源需要外部(功能)插件支持。service需要軟件定義的網絡(SDN),它將在不同主機上的pod之間提供通信,route需要轉發或重定向來自外部客戶端的包到服務內部IP。

OpenShift提供了一個基於Open vSwitch的SDN,路由由分佈式HAProxy farm提供。

五 OpenShift持久性存儲

5.1 永久存儲


pod可以在一個節點上停止,並隨時在另一個節點上重新啟動。同時pod的默認存儲是臨時存儲,通過對於類似數據庫需要永久保存數據的應用不適合。

Kubernetes為管理容器的外部持久存儲提供了一個框架。Kubernetes提供了PersistentVolume資源,它可以在本地或網絡中定義存儲。pod資源可以使用PersistentVolumeClaim資源來訪問對應的持久存儲卷。

Kubernetes還指定了一個PersistentVolume資源是否可以在pod之間共享,或者每個pod是否需要具有獨佔訪問權的自己PersistentVolume。當pod移動到另一個節點時,它將保持與相同的PersistentVolumeClaim和PersistentVolumne資源的關聯。這意味着pod的持久存儲數據跟隨它,而不管它將在哪個節點上運行。

OpenShift向Kubernetes提供了多種VolumeProvider,如NFS、iSCSI、FC、Gluster或OpenStack Cinder。

OpenShift還通過StorageClass資源為應用程序提供動態存儲。使用動態存儲,可以選擇不同類型的後端存儲。後面存儲根據應用程序的需要劃分為不同的“tiers”。例如,可以定義一個名為“fast”的存儲類和另一個名為“slow”的存儲類,前者使用更高速的後端存儲,後者提供普通的存儲。當請求存儲時,最終用戶可以指定一個Persistentvolumeclaim,並使用一個註釋指定他們所需的StorageClass。

六 OpenShift高可用

6.1 OpenShift高可用概述


OpenShift平台集群的高可用性(HA)有兩個不同的方面:

OpenShift基礎設施本身的HA(即主機);

以及在OpenShift集群中運行的應用程序的HA。

默認情況下,OpenShift為master提供了完全支持的本機HA機制。

對於應用程序或“pods”,如果pod因任何原因丟失,Kubernetes將調度另一個副本,將其連接到服務層和持久存儲。如果整個節點丟失,Kubernetes會為它所有的pod安排替換節點,最終所有的應用程序都會重新可用。pod中的應用程序負責它們自己的狀態,因此它們需要自己維護應用程序狀態(如HTTP會話複製或數據庫複製)。

七 Image Streams

7.1 Image Streams


要在OpenShift中創建一個新的應用程序,除了應用程序源代碼之外,還需要一個base image(S2I builder image)。如果源代碼或image任何一個更新,就會生成一個新的image,並且基於此新image創建新的pod,同時替換舊的pod。

即當應用程序代碼發生更改時,容器映像需要更新,但如果構建器映像發生更改,則部署的pod也需要更新。

Image Streams包括由tag標識的大量的image。應用程序是針對Image Streams構建的。Image Streams可用於在創建新image時自動執行操作。構建和部署可以監視Image Streams,以便在添加新image時接收通知,並分別執行構建或部署。

OpenShift默認情況下提供了幾個Image Streams,包括許多流行的runtime和frameworks。

Image Streams tag是指向Image Streams中的image的別名。通常縮寫為istag。它包含一個image歷史記錄,表示為tag曾經指向的所有images的堆棧。

每當使用特定的istag標記一個新的或現有的image時,它都會被放在歷史堆棧的第一個位置(標記為latest)。之前tag再次指向舊的image。同時允許簡單的回滾,使標籤再次指向舊的image。 本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

聚甘新