# Outline
一、前言
二、實作
# TL;DR
既然有了 Cluster,並在 Node 建立起數個 Pods 並運行了我們的服務後,接下就是來思考我們該如何更高層次的去管理這些 Pods.
顧名思義,他是讓我們能夠一次部署多個 Pods 的元件,透過這個元件讓我們可以在 Cluter 為同一個 Pods 建立相同的複本,並且監控他的數量與健康狀態,在 Pod 掛掉時進行重啟。
我們在 Deployment 的設定檔中,編寫 Template —— 事實上就是昨天提到的 Pod 的設定檔,並設定這個 Deployment 會建立多少個這樣的 Pods,之後就會讓 Kubernetes 協助我們管理這些 Pods 維持在這個數量。
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