以下部署过程基于官方手册,稍作调整以便理解。
若还未搭建环境,可参考CentOS7 Kubernetes minikube本地环境搭建一文搭建环境。
本示例包含以下内容:
由于本篇内容是按实际操作顺序编排,如要实践本篇中的事例,推荐从头到尾按顺序一步步执行,以免“跳戏”。
创建Deployment
$ vim nginx-deployment.yaml
创建nginx-deployment.yaml
文件,声明deployment的各项参数,文件内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
#指定deployment的名称
name: nginx-deployment
labels:
app: nginx
spec:
#期望创建3个nginx实例(3个pod)
replicas: 3
selector:
#选择label:app=nginx的pod来创建实例
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
该文件表示要创建3个pod,每个pod运行nginx1.7.9镜像。
执行创建
$ kubectl create -f nginx-deployment.yaml
$ deployment.apps "nginx-deployment" created
创建成功,查看deployment和pod的运行状况:
$ kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 57s
$ kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deployment-75675f5897-jgl27 1/1 Running 0 12s 172.17.0.5 minikube
nginx-deployment-75675f5897-rrnsk 1/1 Running 0 12s 172.17.0.7 minikube
nginx-deployment-75675f5897-txlkv 1/1 Running 0 12s 172.17.0.6 minikube
可以看到deployment已经创建成功,并创建了3个pod,IP地址分别是172.17.0.5,172.17.0.6,172.17.0.7
。
分别对三个IP地址使用curl命令,均能返回nginx的欢迎页内容,表示创建成功。
$ curl http://172.17.0.5
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
更新Deployment
我们将nginx:1.7.9
版本更新到nginx:1.9.1
。
手动设置升级的nginx版本:
$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 --record
deployment.apps "nginx-deployment" image updated
查看rollout,pod和rs状态:
$ kubectl rollout status deploy nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
$ kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-deployment-75675f5897-rrnsk 1/1 Terminating 0 1m
nginx-deployment-75675f5897-txlkv 0/1 Terminating 0 1m
nginx-deployment-c4747d96c-bf97v 1/1 Running 0 4s
nginx-deployment-c4747d96c-ctpl2 1/1 Running 0 5s
nginx-deployment-c4747d96c-rthg5 1/1 Running 0 6s
$ get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-75675f5897 0 0 0 1m
nginx-deployment-c4747d96c 3 3 3 9s
可以看到旧的pod正在被终止,新的pod被创建出来,这是滚动升级的过程。
等升级完成再来看看rollout和pod的状态:
$ kubectl rollout status deplo