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