k8s的ReplicationController


ReplicationController

存活探針

Kubemetes有以下三種探測容器的機制:

  • HTTPGET探針對容器的IP地址(你指定的端口和路徑)執行HTTPGET請求,如果探測器收到響應,並且響應狀態碼不代表錯誤(換句話說,如果HTTP 響應狀態碼是2xx或3xx), 則認為探測成功。
    如果服務器返回錯誤響應狀態 碼或者根本沒有響應,那么探測就被認為是失敗的,容器將被重新啟動。
  • TCP套接字探針嘗試與容器指定端口建立TCP連接。如果連接成功建立,則 探測成功。否則,容器重新啟動。
  • Exec探針在容器內執行任意命令,並檢查命令的退出狀態碼。如果狀態碼 是o, 則探測成功。所有其他狀態碼都被認為失敗。

基於HTTP的存活探針

創建(只截取容器配置的部分)

spec:
  containers:
    - name: IMAGE_NAME
      image: WAREHOUSE/NAMESPACE/IMAGE_NAME:TAG
      # 一個基於HTTP GET的存活探針
      livenessProbe:
        # 第一次檢測在容器啟動15秒后
        initialDelaySeconds: 15
        httpGet:
          port: 8080
          path: /

ReplicationController

  1. 創建ReplicationController的yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: app
spec:
# 這里的selector可以刪除,這樣的話會默認從模板(template)中獲取標簽
  selector:
    app: app
  replicas: 2
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
        - name: app
          image: app/1.0
          ports:
            - containerPort: 8080

2 . ReplicationController(Rc)會根據標簽選擇器管理符合其標簽的所有pod,並維持在replicas設置的數量上。
當有一個pod發生故障然后又需要保留pod以查詢日志信息的時候,可以更改pod的標簽來移出ReplicationController的管理范圍,
這樣Rc會重新創建一個pod,故障pod也不會刪除,仍然可以根據日志分析故障原因
3 . 注意:修改yaml文件的模板或者標簽選擇器時,要刪除之前創建的pod,不然pod會失去Rc的管理,白白占用內存空間,類似於java中的內存泄漏
4 . 直接編輯Rc的yaml命令,命令執行后會自動生效,可以用來升級pod,但是后面有更好的方法

kubectl edit rc myapp  

5 . 有的時候需要刪除Rc但是不能刪除Rc下面管理的pod,比如需要將Rc升級到ReplicaSet(Rs),可以執行以下命令

kubectl delete re kubia --cascade=false 

ReplicationController 與 ReplicaSet 的對比

目前ReplicationController已經被ReplicaSet完全取代了,而我們也不會直接去創建ReplicaSet,是使用Deployment去管理ReplicaSet,在后面會講到

  • ReplicaSet對標簽的匹配規則更加多樣化
  • ReplicaSet可以將標簽選擇器設置為一個數組,只要是這個數組里的標簽都會被匹配
    1 . 創建ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: app
spec:
  selector:
    matchLabels:
      app: app
  replicas: 2
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
        - name: app
          image: app/1.0
          ports:
            - containerPort: 8080

2 . 更加強大的標簽選擇器:matchExpressions

spec:
  selector:
    matchExpressions:
      - key: app
        operator: In
        values:
          - app

每個表達式都必須包含一個key、一 個operator(運算符),並且可能還有一個values的列表(取決於運算符),運算符如下:

  • In : Label的值必須與其中一個指定的values匹配。
  • Notln : Label的值與任何指定的values不匹配。
  • Exists : pod必須包含一個指定名稱的標簽(值不重要)。使用此運算符時, 不應指定values字段。
  • DoesNotExist : pod不得包含有指定名稱的標簽。values屬性不得指定

如果你指定了多個表達式,則所有這些表達式都必須為true才能使選擇器與 pod匹配。如果同時指定matchLabels和matchExpressions, 則所有標簽都必須匹配,並且所有表達式必須計算為true以使該pod與選擇器匹配

3 . 刪除Rs

kubectl delete rs kubia


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM