六、kubernetes資源清單之Pod控制器190714

1、Pod控制器的類別

  • ReplicationController:早期惟一的控制器,已廢棄node

  • ReplicaSet:控制Pod知足用戶指望副本;標籤選擇器選擇由本身管理的Pod副本;Pod資源模板完成Pod資源的新建。主要用於管理無狀態的Pod,不建議直接使用此控制器
  • Deployment:基於ReplicaSet控制器;建議使用此控制器,支持滾動更新和回滾,管理無狀態應用
  • DaemonSet:守護進程類的控制器,例如每臺node都啓動一個Pod一直持續下去
  • Job:執行一次性的任務,完成後就退出,若是沒有完成則從新構建一個Pod運行
  • Cronjob:週期性運行的任務
  • StatefulSet:管理有狀態的應用,每一個Pod都是單獨管理redis

2、ReplicaSet控制器

  • kubectl explain rs:獲取幫助手冊
# cat rs-damo.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:  #ReplicaSet的metadata
  name: myapp-rs
  namespace: default
spec:  #ReplicaSet的spec
  replicas: 2
  selector:
    matchLabels:  #標籤選擇器,用於控制器選擇控制符合條件的pod
      app: myapp
      release: canary
  template:
    metadata:
      name: myapp-pod  #此處pod名會被控制器的名字代替
      labels:  #此處爲Pod的標籤,必須符合控制器的標籤選擇器定義的條件
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp-container
        image: dongfeimg/myapp:v1
        ports:
        - name: http
          containerPort: 80
# kubectl get rs
# kubectl get pods
  • 擴容/縮容
# kubectl edit rs myapp-rs
spec:
  replicas: 10  #將此值改
  • 升級/回滾
# kubectl edit rs myapp-rs
    spec:
      containers:
      - image: dongfeimg/myapp:v2  #修改此值不能當即更新,原有pod刪除後重建會升級到v2版本

3、Deployment控制器

  • kubectl explain deploy
# cat deploy-damo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp-container
        image: dongfeimg/myapp:v1
        ports:
        - name: http
          containerPort: 80
# kubectl apply -f deploy-damo.yaml  #聲明式建立
# kubectl get deploy  #deploy控制rs
# kubectl get rs  #rs控制pod
# kubectl get pods
  • 使用修改清單文件的方式擴容、縮容、更新和回滾等操做
# vim deploy-damo.yaml
spec:
  replicas: 3  #將副本擴容至3個
# kubectl apply -f deploy-damo.yaml

# vim deploy-damo.yaml
    spec:
      containers:
      - name: myapp-container
        image: dongfeimg/myapp:v2  #將版本更新爲v2
# kubectl apply -f deploy-damo.yaml
# kubectl rollout history deployment myapp-deploy  #查看升級的歷史信息
  • 使用kubectl patch的方式擴容、縮容、更新和回滾等操做
# kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'  #傳入json格式的數組來實現擴容
# kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'  #"maxSurge":1 最大在更新pod數,"maxUnavailable":0 容許最大不可用的pod
# kubectl describe deployment myapp-deploy |grep RollingUpdateStrategy  #驗證
  • kubectl set image和kubectl rollout pause
# kubectl set image deployment myapp-deploy myapp-container=dongfeimg/myapp:v3 \  #將容器版本更新至v3
  && kubectl rollout pause deployment myapp-deploy  #在更新第一個的時候暫停,金絲雀發佈
# kubectl rollout resume deployment myapp-deploy  #繼續此前的更新
  • kubectl rollout undo:回滾
# kubectl rollout history deployment myapp-deploy
# kubectl rollout undo deployment myapp-deploy --to-revision=1  #回滾至v1

4、DaemonSet控制器

  • 在集羣中符合選擇器的node上一個pod,例如在每一個節點上運行一個filebeat來收集日誌
  • kubectl explain ds
# cat ds-damo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
      role: logstor
  template:
    metadata:
      labels:
        app: redis
        role: logstor
    spec:
      containers:
      - name: redis
        image: redis:4.0
        ports:
        - name: redis
          containerPort: 6379
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat-ds
  namespace: default
spec:
  selector:
    matchLabels:
      app: filebeat
      release: stable
  template:
    metadata:
      labels:
        app: filebeat
        release: stable
    spec:
      containers:
      - name: filebeat-container
        image: dongfeimg/filebeat:5.6.5-alpine
        env:
        - name: REDIS_HOST
          value: redis.default.svc.cluster.local  #redis-server的主機名(svc)
        - name: REDIS_LOG_LEVEL
          value: info
# kubectl expose deployment redis --port=6379
相關文章
相關標籤/搜索