ReplicationController:早期惟一的控制器,已廢棄node
StatefulSet:管理有狀態的應用,每一個Pod都是單獨管理redis
# 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版本
# 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 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 deployment myapp-deploy myapp-container=dongfeimg/myapp:v3 \ #將容器版本更新至v3 && kubectl rollout pause deployment myapp-deploy #在更新第一個的時候暫停,金絲雀發佈 # kubectl rollout resume deployment myapp-deploy #繼續此前的更新
# kubectl rollout history deployment myapp-deploy # kubectl rollout undo deployment myapp-deploy --to-revision=1 #回滾至v1
# 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