《三》控制器、配置管理

Pod與controllers的關係

控制器管理pod

  • • controllers:在集羣上管理和運行容器的對象
  • • 使用label-selector 標籤 讓控制器關聯pod
  • • Pod通過控制器實現應用的運維,如伸縮,升級等

《三》控制器、配置管理

Deployment

  • • 部署無狀態應用--用於web服務,無需多的更改
  • • 管理Pod和ReplicaSet(若是一個pod掛了,就起一個pod在別的節點)
  • • 具有上線部署、副本設定、滾動升級、回滾等功能
  • • 提供聲明式更新,例如只更新一個新的Image

記錄的版本,用於回滾:

《三》控制器、配置管理

總結
1、deployment 認爲pod都保持一致
2、不用考慮啓動順序
3、不用考慮在哪個node上運行,在哪個node上運行都一樣
4、隨意的擴容、縮容

SatefulSet

部署有狀態應用

  • • 解決Pod獨立生命週期,保持Pod啓動順序和唯一性
    1. 穩定,唯一的網絡標識符,持久存儲
    1. 有序,優雅的部署和擴展、刪除和終止
    1. 有序,滾動更新
  • 應用場景:數據庫

總結
1、比如etcd就需要部署在這個控制器下,因爲集羣之間的配置會變化
2、不對等的關係,需要用外部存儲,類似於3臺web,存儲附件,不要用一個nfs共享存儲,讓每個web都可以正常訪問

service:外部可以訪問,通過CLUSTER-IP 轉發到容器的節點上來提供服務
《三》控制器、配置管理

現需要將CLUSTER-IP 設置爲None,這樣就能保證轉發到一臺節點上,需要用到的是dns的通信
設置:clusterIP: None 若是不設置,默認都是有clusterIP

《三》控制器、配置管理

《三》控制器、配置管理

配置dns服務:
kubectl apply -f coredns.yaml

驗證:(若是running,就沒問題)
《三》控制器、配置管理

驗證開始
[root@docker demo]# cat sys.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:

  • port: 80
    name: web
    clusterIP: None
    selector:
    app: nginx

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: nginx-statefulset
namespace: default
spec:
serviceName: nginx
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:

  • name: nginx
    image: nginx:latest
    ports:
    • containerPort: 80

《三》控制器、配置管理

說明:1、serviceName: nginx 與service 中的name: nginx 綁定
2、kind: StatefulSet 指定這個控制器

創建
kubectl apply -f sys.yaml

創建一個pod,在這裏用dns解析
[root@docker demo]# kubectl apply -f pod1.yaml
[root@docker demo]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: dns-test
spec:
containers:

  • name: busybox
    image: busybox:1.28.4
    args:
    • /bin/sh
    • -c
    • sleep 39999999

《三》控制器、配置管理

說明:1、必須要加上參數,不然啓動就退出了,保證不被退出

進入到容器裏解析:
《三》控制器、配置管理

說明:1、nginx-statefulset-0.nginx 中nginx-statefulset-0 是pod的主機名,nginx是service名稱,這樣來保證穩定

主機名獲取:

《三》控制器、配置管理

StatefulSet與Deployment區別:有身份的!
身份三要素:
• 固定域名
• 固定主機名
• 存儲(PVC)

ClusterIP A記錄格式:<service-name>.<namespace-name>.svc.cluster.local
ClusterIP=None A記錄格式:<statefulsetName-index>.<service-name>.svc.cluster.local
示例:web-0.nginx.default.svc.cluster.local

DaemonSet

官網:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
• 在每一個Node上運行一個Pod
• 新加入的Node也同樣會自動運行一個Pod
應用場景:Agent

驗證:
《三》控制器、配置管理

說明:1、DaemonSet 不需要指定副本數( replicas: 3),因爲是根據node的數量才定的,比如node數爲3個,就創建3個pod

《三》控制器、配置管理

Job

官網: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

Job分爲普通任務(Job)和定時任務(CronJob)
• 一次性執行
應用場景:離線數據處理,視頻解碼等業務,適用臨時跑個任務

《三》控制器、配置管理
說明:1、 backoffLimit: 4 異常重啓的限制次數
2、[root@docker demo]# kubectl get jobs

CronJob
官網:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/

定時任務,像Linux的Crontab一樣。
• 定時任務
應用場景:通知,備份

《三》控制器、配置管理

說明:1、查看kubectl get cronjob

配置管理

Secret
官網:https://kubernetes.io/docs/concepts/configuration/secret/

加密數據並存放Etcd中,讓Pod的容器以掛載Volume方式訪問。
應用場景:憑據

ConfigMap
官網:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
與Secret類似,區別在於ConfigMap保存的是不需要加密配置信息。
應用場景:應用配置

1、新建一個redis.properties
[root@docker demo]# vi redis.properties

redis.gost=127.0.0.1
redis.port=6379
redis.password=123456

2、創建 [root@docker demo]# kubectl create configmap redis-config --from-file=redis.properties

3、查看kubectl get configmaps
《三》控制器、配置管理

4、這個是不需要加密的數據,所以都是明文的
《三》控制器、配置管理

5、編輯cm.yaml
《三》控制器、配置管理

說明:1、將config-volume(name: redis-config) 掛載到/etc/config下
2、cat /etc/config/redis.properties

結果:
《三》控制器、配置管理

說明:將上線的代碼和configmaps 聯繫在一起,指定configmaps,就可以訪問了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章