控制器管理podnode
記錄的版本,用於回滾:nginx
總結
一、deployment 認爲pod都保持一致
二、不用考慮啓動順序
三、不用考慮在哪一個node上運行,在哪一個node上運行都同樣
四、隨意的擴容、縮容web
部署有狀態應用redis
總結
一、好比etcd就須要部署在這個控制器下,由於集羣之間的配置會變化
二、不對等的關係,須要用外部存儲,相似於3臺web,存儲附件,不要用一個nfs共享存儲,讓每一個web均可以正常訪問docker
service:外部能夠訪問,經過CLUSTER-IP 轉發到容器的節點上來提供服務
數據庫
現須要將CLUSTER-IP 設置爲None,這樣就能保證轉發到一臺節點上,須要用到的是dns的通訊
設置:clusterIP: None 如果不設置,默認都是有clusterIPapi
配置dns服務:
kubectl apply -f coredns.yaml網絡
驗證:(如果running,就沒問題)
app
驗證開始
[root@docker demo]# cat sys.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:運維
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:
說明:一、serviceName: nginx 與service 中的name: nginx 綁定
二、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:
說明:一、必需要加上參數,否則啓動就退出了,保證不被退出
進入到容器裏解析:
說明:一、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
官網:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
• 在每個Node上運行一個Pod
• 新加入的Node也一樣會自動運行一個Pod
應用場景:Agent
驗證:
說明:一、DaemonSet 不須要指定副本數( replicas: 3),由於是根據node的數量才定的,好比node數爲3個,就建立3個pod
官網: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
Job分爲普通任務(Job)和定時任務(CronJob)
• 一次性執行
應用場景:離線數據處理,視頻解碼等業務,適用臨時跑個任務
說明:一、 backoffLimit: 4 異常重啓的限制次數
二、[root@docker demo]# kubectl get jobs
CronJob
官網:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
定時任務,像Linux的Crontab同樣。
• 定時任務
應用場景:通知,備份
說明:一、查看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保存的是不須要加密配置信息。
應用場景:應用配置
一、新建一個redis.properties
[root@docker demo]# vi redis.properties
redis.gost=127.0.0.1
redis.port=6379
redis.password=123456
二、建立 [root@docker demo]# kubectl create configmap redis-config --from-file=redis.properties
三、查看kubectl get configmaps
四、這個是不須要加密的數據,因此都是明文的
五、編輯cm.yaml
說明:一、將config-volume(name: redis-config) 掛載到/etc/config下
二、cat /etc/config/redis.properties
結果:
說明:將上線的代碼和configmaps 聯繫在一塊兒,指定configmaps,就能夠訪問了