deployment资源可以同时创建多个pod,它可以保证同时多个pod存活,deploy创建后先生成个rs,由rs再启多个pod。
service资源可以为k8s中的容器做映射,来达到被外界访问的目的。
创建deployment资源有两种方式 :yaml文件方式和命令行方式。
创建deployment方式一:yaml文件方式
在master节点创建nginx-deploy.yaml文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: 192.168.1.5:5000/nginx:1.13
ports:
- containerPort: 80
执行创建语句:
kubectl create -f nginx-deploy.yaml
可以看到k8s生成了一个名为“nginx-deployment”的deploy,一个rs,rs自动创建了三个pod在三个不同节点。
为此deployment资源关联service资源
kubectl expose deployment nginx-deployment --port=80 --type=NodePort
可以看到生成了一个名为nginx-deployment的service资源 ,映射的端口为31956
访问三个node的ip+31956端口都可以正常访问nginx服务。
service资源的负载均衡功能
给三个node中的nginx的主目录添加html文件
echo 'node1'>index.html
kubectl cp index.html nginx-deployment-3653720-kzn1h:/usr/share/nginx/html/index.html
echo 'node2'>index.html
kubectl cp index.html nginx-deployment-3653720-zr3j9:/usr/share/nginx/html/index.html
echo 'node3'>index.html
kubectl cp index.html nginx-deployment-3653720-7kqtc:/usr/share/nginx/html/index.html
利用deployment进行升级及回滚
curl -I 192.168.1.5:31956
可以看到当前nginx版本为1.13
kubectl edit deployment nginx-deployment --改为1.15
kubectl get all -o wide
可以看到生成了新的rs,镜像使用的是1.15,原来的rs没有pod资源了
curl -I 192.168.1.5:31956
查看pod资源中的nginx已修改为1.15版本
升级回滚及查询历史版本
kubectl rollout undo deployment nginx-deployment --自动回滚到上一个版本
kubectl rollout history deployment nginx-deployment --配置文件生成deployment资源看不到历史版本号
经查询,pod中容器版本已回滚到1.13,但是用yaml文件生成的deployment看不到历史的版本号。
创建deployment方式二:用命令行方式
kubectl run nginx --image=192.168.1.5:5000/nginx:1.13 --replicas=3 --record
可以看到同样生成了一个rs,rs生成了三个pod节点。
kubectl rollout history deployment nginx --此时查看版本
用命令行升级deployment
kubectl set image deploy nginx nginx=192.168.1.5:5000/nginx:1.15
回滚到指定版本
kubectl rollout undo deployment nginx --to-revision=1
此时查看历史版本
此时可通过如下命令行给名为nginx的deployment添加service资源,后续步骤同上,不再赘述。
kubectl expose deployment nginx --port=80 --type=NodePort
小结:
由本文可见,可使用deployment资源来创建多个pod,其可以保证随时多个pod同时在线,如其中有死项,deployment可自动创建保证多可用。此外可以给deployment关联service资源,通过端口映射,让外界通过访问node节点的宿主机来访问pod容器资源,service资源还有负载均衡的功能。