iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 29
0
DevOps

.NET Core 專案持續整合與部署系列 第 29

Virtualize:Kubernetize (2)

# Outline
一、前言
二、實作

# TL;DR

一、前言

既然有了 Cluster,並在 Node 建立起數個 Pods 並運行了我們的服務後,接下就是來思考我們該如何更高層次的去管理這些 Pods.

二、概念

2-1. Deployment

顧名思義,他是讓我們能夠一次部署多個 Pods 的元件,透過這個元件讓我們可以在 Cluter 為同一個 Pods 建立相同的複本,並且監控他的數量與健康狀態,在 Pod 掛掉時進行重啟。

我們在 Deployment 的設定檔中,編寫 Template —— 事實上就是昨天提到的 Pod 的設定檔,並設定這個 Deployment 會建立多少個這樣的 Pods,之後就會讓 Kubernetes 協助我們管理這些 Pods 維持在這個數量。

2-1. Service

An abstract way to expose an application running on a set of Pods as a network service.

簡單來說,我們要連線某個服務時,在沒有 Service 的情況下,我們可能要直接去連線某個 Pods,但若是執行在這個 Pods 上的服務是 Stateless 的,我們其實根本不 Care 我們現在是連線到哪一個 Pods,我們只在乎現在是可以連到那個服務的,若是原本指定與某個 Pods 進行連線,當那個 Pods 停止運作時,我還要重新指定一個 Pods,這實在是一件很麻煩的事情。所以我們就在這些 Pods 上再建立一個抽象層,也就是 Services,這樣我們就只需要直接連線到 Services,Services 在幫我們轉到某個 Pod 就好。

三、實作

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ironman-dotnet-core-pod-deployment
spec:
  replicas: 3
  template:
    metadata:
      name: ironman-dotnet-core-pod
      labels:
        app: ironman
    spec:
      containers:
        - name: ironman-dotnet-core-container
          image: dotnet-core-ci-cd-lab:1.1
          ports:
            - containerPort: 3000
  selector:
    matchLabels:
      app: ironman
---
apiVersion: v1
 kind: Service
 metadata:
   name: ironman-dotnet-core-pod-service
 spec:
   selector:
     app: ironman
   type: NodePort
   ports:
     - protocol: TCP
       port: 3001
       targetPort: 3000
       nodePort: 30390

上一篇
Virtualize:Kubernetize .NET Core Application
下一篇
目錄
系列文
.NET Core 專案持續整合與部署31

尚未有邦友留言

立即登入留言