k8s 控制器(Replicaset 和 Deployment)
控制器:能够管理pod,监测pod运行状况,当pod发生故障,可以自动恢复pod,确保每一个pod资源始终处于定义或者期望的目标状态,一旦pod资源出现故障,那么控制器会尝试重启pod或者里面的容器,如果一直重启有问题的话那么它可能会基于某种策略来进行重新布派或者重新编排:如果pod副本数量低于用户所定义的目标数量,它也会自动补全;如果多余,也会自动终止pod资源;
kubectl 命令补全:
yum -y install bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc
点击查看代码
# kubectl explain replicaset/rs
# kubectl explain rs.spec.template.spec
[root@anyu967master1 k8s]# cat frontend.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend # 控制器名字
labels:
app: guestbook
tier: frontend
spec:
replicas: 2
selector:
matchLabels: # 对应模板下的labels
tier: frontend
template:
metadata:
name: test # 不重要
labels:
tier: frontend
spec:
containers: # 对象列表
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v5
imagePullPolicy: IfNotPresent
[root@anyu967master1 k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
frontend-6vd86 1/1 Running 0 9s
frontend-n46r9 1/1 Running 0 9s
[root@anyu967master1 k8s]# kubectl get rs
NAME DESIRED CURRENT READY AGE
frontend 2 2 2 102s
[root@anyu967master1 k8s]# kubectl edit rs frontend
[root@anyu967master1 k8s]# kubectl get pods -w
[root@anyu967master1 k8s]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo-pod 1/1 Running 4 (6d19h ago) 10d 10.244.255.153 anyu967node2 <none> <none>
frontend-6vd86 1/1 Running 0 10m 10.244.87.25 anyu967node1 <none> <none>
frontend-n46r9 1/1 Running 0 10m 10.244.255.154 anyu967node2 <none> <none>
总结:maxUnavailable:和期望的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑:maxSurge:和期望的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。
点击查看代码
# 声明式定义 通过Deployment对象,可以做到以下事情:
# l、创建ReplicaSet和Pod
# 2、滚动升级(不停止旧服务的状态下升级)和回滚应用(将应用回滚到之前的版本)
# 3、平滑地扩容和缩容
# 4、暂停和继续Deployment
# kubectl explain deployment
[root@anyu967master1 k8s]# cat myappDeployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-v1
spec:
replicas: 2 # 定义副本数
selector:
matchLabels:
app: myapp
version: v1
template:
metadata:
name: test
labels:
app: myapp
version: v1
spec:
containers:
- name: myapp
image: janakiramm/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
livenessProbe:
httpGet:
port: 80
readinessProbe:
httpGet:
port: 80
[root@anyu967master1 k8s]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-v1-649f9b546c-4l42n 1/1 Running 0 2m9s 10.244.255.157 anyu967node2 <none> <none>
myapp-v1-649f9b546c-m9ktb 1/1 Running 0 2m11s 10.244.87.28 anyu967node1 <none> <none>
[root@anyu967master1 k8s]# kubectl describe pods myapp-v1-649f9b546c-4l42n
[root@anyu967node2 Package]# kubectl rollout --help
Manage the rollout of one or many resources.
Available Commands:
history View rollout history
pause Mark the provided resource as paused
restart Restart a resource
resume Resume a paused resource
status Show the status of the rollout
undo Undo a previous rollout
本文来自博客园,作者:anyu967,转载请注明原文链接:https://www.cnblogs.com/anyu967/articles/17335193.html
浙公网安备 33010602011771号