我目前看書上是舊版範例
所以使用官方ReplicaSet | Kubernetes範例
目前推薦 [Kubernetes] ReplicaSet 介紹 | 小信豬的原始部落
這邊只是會放操作紀錄,不會很專業解說
前言
一般建立 pod 完可以在建立 service
我以為 ReplicaSet 也是差不多樣子
但實作完才發現不一樣…
建立 ReplicaSet 就會建立 Pod
建立有 template 的 ReplicaSet
fronted.yaml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend labels: app: guestbook tier: frontend spec: replicas: 3 selector: matchLabels: tier: frontend template: metadata: labels: tier: frontend spec: containers: - name: php-redis image: gcr.io/google_samples/gb-frontend:v3
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| kubectl apply -f https://kubernetes.io/examples/controllers/frontend.yaml
kubectl get rs
kubectl describle rs/fronted
kubectl get pods
|
1
| kubectl get pods frontend-b2zdv -o yaml
|
查看 meta.ownerReferences
這邊先跳過
详解 Kubernetes ReplicaSet 的实现原理 - 面向信仰编程
無 template 建立
pod-rs.yaml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| apiVersion: v1 kind: Pod metadata: name: pod1 labels: tier: frontend spec: containers: - name: hello1 image: gcr.io/google-samples/hello-app:2.0
---
apiVersion: v1 kind: Pod metadata: name: pod2 labels: tier: frontend spec: containers: - name: hello2 image: gcr.io/google-samples/hello-app:1.0
|
1 2 3 4 5 6 7 8
| kubectl apply -f https://kubernetes.io/examples/pods/pod-rs.yaml kubectl get pods
|
這邊會看到,我們建立的 pod 沒有變建立起來
原因是 ReplicaSet 設定為三,已經建立過了(label 相同)
如果清空,先建立兩個 pod 再 新增 rs
會友不一樣的結果
1 2 3 4
| NAME READY STATUS RESTARTS AGE frontend-hmmj2 1/1 Running 0 9s pod1 1/1 Running 0 36s pod2 1/1 Running 0 36s
|
擴展 ReplicaSet
指令
1
| kubectl scale replicasets fronted --replicas=4
|
指令操作可以直接套用
但大多數不推薦這個方式
假如 yaml 重建不會用到
大多數都從文件調整
kubectl apply 套用
1
| kubectl apply -f xxx.yaml
|
自動擴展
1 2 3 4 5 6 7 8 9 10 11
| apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: frontend-scaler spec: scaleTargetRef: kind: ReplicaSet name: frontend minReplicas: 3 maxReplicas: 10 targetCPUUtilizationPercentage: 50
|
1
| kubectl apply -f https://k8s.io/examples/controllers/hpa-rs.yaml
|
或只打指令kubectl autoscale rs frontend --max=10 --min=3 --cpu-percent=50
看完這麼多,官方推薦使用 Deployment 來替代 ReplicaSet
這單元簡單操作並不難
刪除 ReplicaSet 不刪除 pod
刪除 ReplicaSet 會一起刪除 pod
要刪除 ReplicaSet 不刪除 pod 情況下要使用
1 2 3 4 5
| kubectl delete rs fronted --cascade=false
kubectl delete rs frontend --cascade=orphan
|
StatefulSet介绍 - taotaozh - 博客园
不知道跟這個有沒有關係
暫時不研究
小記重點
- 確保在任何時間點會有幾個副本。
- 相同Pod都是可用的,取決你設定的數字。
- 透過 selector 綁定在一起
觀察指令
1 2 3
| kubectl describe rs kubectl get pods # Controller By 可以觀察是誰操控 Pod
|