1.Deployment场景实践
场景说明:运⾏⼀个demoapp的应⽤,部署3个副本,然后通过service来实现负载均衡;
- 创建 Deployment资源,部署三个副本
- 创建 Service资源,通过标签选择器选择对应的Pod,以实现负载均衡;
- ⽤ curl命令,或Chrome浏览器验证集群⾼可⽤;
1.1 创建
- 创建yaml文件
yaml
[root@kube-master yaml]# cat test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 3
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo-container
image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/demoapp:v1
ports:
- name: http-server
containerPort: 80
[root@kube-master yaml]# cat test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 3
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo-container
image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/demoapp:v1
ports:
- name: http-server
containerPort: 80
- 查看
shell
[root@kube-master yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
demo-deployment-6b9fc7dc7f-fnsb2 1/1 Running 0 8s
demo-deployment-6b9fc7dc7f-r4j2l 1/1 Running 0 8s
demo-deployment-6b9fc7dc7f-sqw7c 1/1 Running 0 8s
[root@kube-master yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
demo-deployment-6b9fc7dc7f-fnsb2 1/1 Running 0 8s
demo-deployment-6b9fc7dc7f-r4j2l 1/1 Running 0 8s
demo-deployment-6b9fc7dc7f-sqw7c 1/1 Running 0 8s
1.2 检查dp状态
检查集群的 Deployment
shell
[root@kube-master yaml]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
demo-deployment 3/3 3 3 79s
[root@kube-master yaml]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
demo-deployment 3/3 3 3 79s
每列参数含义
NAME 列出了集群中 Deployment 的名称
READY 显示应⽤程序的可⽤的“副本”数。显示的模式是“就绪个数/期望个数”
UP-TO-DATE 显示为了达到期望状态已经更新的副本数
AVAILABLE 显示应⽤可供⽤户使⽤的副本数
AGE 显示应⽤程序运⾏的时间
💡 说明
期望副本数是根据 .spec.replicas 字段设置 3
检查集群的 ReplicaSet
shell
[root@kube-master yaml]# kubectl get rs
NAME DESIRED CURRENT READY AGE
demo-deployment-6b9fc7dc7f 3 3 3 6m35s
[root@kube-master yaml]# kubectl get rs
NAME DESIRED CURRENT READY AGE
demo-deployment-6b9fc7dc7f 3 3 3 6m35s
NAME 列出名字空间中 ReplicaSet 的名称
DESIRED 显示应⽤的期望副本个数,即在创建 Deployment 时所定义的值。 此为期望状态
CURRENT 显示当前运⾏状态中的副本个数
READY 显示应⽤中有多少副本可以为⽤户提供服务;
AGE 显示应⽤已经运⾏的时间⻓度
❌ 注意
ReplicaSet 的名称被格式化为[Deployment名称]-[随机字符串]
- 检查pod 是否为3个
shell
[root@kube-master yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
demo-deployment-6b9fc7dc7f-fnsb2 1/1 Running 0 11m
demo-deployment-6b9fc7dc7f-r4j2l 1/1 Running 0 11m
demo-deployment-6b9fc7dc7f-sqw7c 1/1 Running 0 11m
[root@kube-master yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
demo-deployment-6b9fc7dc7f-fnsb2 1/1 Running 0 11m
demo-deployment-6b9fc7dc7f-r4j2l 1/1 Running 0 11m
demo-deployment-6b9fc7dc7f-sqw7c 1/1 Running 0 11m
1.3 创建Service
- 创建yaml文件
yaml
[root@kube-master yaml]# cat test_svc.yaml
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector: #类似upstream
app: demo
ports:
- name: http
port: 8080 # service对外提供的端⼝
targetPort: 80 # Pod的端⼝
[root@kube-master yaml]# cat test_svc.yaml
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector: #类似upstream
app: demo
ports:
- name: http
port: 8080 # service对外提供的端⼝
targetPort: 80 # Pod的端⼝
- 生成
shell
[root@kube-master yaml]# kubectl apply -f test_svc.yaml
service/demo-service created
[root@kube-master yaml]# kubectl apply -f test_svc.yaml
service/demo-service created
- 查看svc地址
shell
[root@kube-master yaml]# kubectl get svc -owide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
demo-service ClusterIP 192.168.15.149 <none> 8080/TCP 2m11s app=demo
[root@kube-master yaml]# kubectl get svc -owide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
demo-service ClusterIP 192.168.15.149 <none> 8080/TCP 2m11s app=demo
- 验证集群的可用性
shell
[root@kube-master yaml]# curl 192.168.15.149:8080
hsuing demoapp v1.1 !! ClientIP: 172.25.244.192, PodName: demo-deployment-bf8f88dbc-b5dmc, PodIP: 172.30.0.142!
[root@kube-master yaml]# curl 192.168.15.149:8080
hsuing demoapp v1.1 !! ClientIP: 172.25.244.192, PodName: demo-deployment-bf8f88dbc-b5dmc, PodIP: 172.30.0.142!
1.4 ⽔平伸缩
水平扩展/收缩的功能比较简单,修改replicas对应的副本数即可。比如将Pod 的副本调整到5个,那么Deployment所管理的ReplicaSet则会自动创建一个新的Pod出来,这样就实现水平扩展
shell
kubectl scale deployment demo-deployment --replicas=4
#或者通过edit方式修改
kubectl edit deployments.apps demo-deployment
#或者 通过patch
kubectl patch deployments.apps demo-deployment -p '{"spec":{"replicas":4}}'
deployment.apps/demo-deployment patched
kubectl scale deployment demo-deployment --replicas=4
#或者通过edit方式修改
kubectl edit deployments.apps demo-deployment
#或者 通过patch
kubectl patch deployments.apps demo-deployment -p '{"spec":{"replicas":4}}'
deployment.apps/demo-deployment patched
💡 说明
在deployment 管理下,删除其中一个pod之后,dp回自动补齐副本数