---
# System prepended metadata

title: K8s
tags: [K8s]

---

# K8s
K8s resource 關係圖:
![](https://i.imgur.com/m8t89i8.png)

## Pod
1. K8s 裡面的最小單位，可以被建立及刪除，但不會有重新建立。
2. 水平擴展的操作單位是 pod
3. 每個 pod 的 ip 都會不同，單一 pod 內的 containers 所使用的 port 不能重複，但跨 pod 的話，port 可以重複
   ex. Pod A > IP: 10.0.0.1, Container1 > Port:80, Container2 > Port:30
       Pod B > IP: 10.0.0.2, Container1 > Port:80, Container2 > Port:30

## ReplicaSet
1. 管理 pods，類似 pods 的老大，只要 pods 出了問題，就會去管理 pods 接下來該如何建立修改刪除
2. 如果 pods 死了，則 replicaSet 會重新建立新的 pod 去確保 pods 維持在保證的數量
3. 也可以水平調整 pods 數量以保證不會讓服務中斷
4. 最重要的一點，讓我們可以不用手動的直接管理 pods
![](https://i.imgur.com/llwDxtH.png)
![](https://i.imgur.com/q8F5pFM.png)


## Deployment
1. 在 K8s 的歷史裡，先有 ReplicaSet 才有 Deployment
2. 會透過操作 replicaSet 去管理 pods
3. 透過建立和管理 replicaSets 去支援 zero downtime update
4. 支援 rollback
5. 建立一個 unique label 並指定給 replicaSet，讓他可以管理 pods
6. 可以執行一些佈署的方案
    * rolling update
    * blue-green deployment
    * canary deployment
    * rollback
![](https://i.imgur.com/3jp1YXR.png)

## Services

1. 提供 pods 一個進入點，讓他們可以被 pod 以外的資源使用
2. service 不是一個短暫存在的資源，他會活著很久
3. Serivce 的 ip 是固定的
4. 因為 pod 變動的話，internal ip 會變動，所以不能依賴 internal ip 來連接 pod
5. Serivce 跟 pod 間是用 label 去辨別並連線的，通常會取名一樣
6. service 跟 pods 間有自動 load balance 
7. Node 會幫 Service 建立一個固定的虛擬IP

![](https://i.imgur.com/23gODqX.png)
![](https://i.imgur.com/xXsB6i7.png)

###### tags: `K8s`

