一个Nginx应用生命周期:
我会从应用的一个生命周期来介绍最简单的k8s实战操作。
创建:
指定deployment名字为web
kubectl create deployment web --image=nginx
查看pod状态
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-65f88748fd-bnhg5 1/1 Running 1 15h
web-5bc9bd5b8d-fk6dh 1/1 Running 0 5m56s
# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 15h
web 1/1 1 1 6m41s
发布:
暴露端口:
web相关的创建完了,接下来要暴露端口,用expose来暴露
# kubectl expose deployment web --port=80 --target-port=80 --name=nginx-service --type=NodePort
指定类型名称是deployment,暴露资源为web,内网端口为80,容器内端口为80 ,协议默认TCP,名字起名字为nginx-service,类型指定为NodePod。
查看一下pod和service
[root@master ~]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/web-5bc9bd5b8d-fk6dh 1/1 Running 0 10m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 17h
service/nginx-service NodePort 10.1.24.179 <none> 80:31334/TCP 7m34s
NodePort是访问NodeIP+随机端口的模式
访问:
31334端口
当然,也可以使用任意node主机的ip访问。
更新
如果我们有新的应用变化,要更新应用,我们要进行升级发布。k8s也提供了相关的机制。是基于镜像级别的更新迭代。
查看当前的镜像版本
首先,对于我们这次模拟来说,先看看现在使用的Nginx版本是什么
#kubectl describe pod web-5bc9bd5b8d-fk6dh
获得信息:这个镜像是nginx,但是版本没有表明,也没有关系,我们就当他是某一个版本
查看历史版本
[root@master ~]# kubectl rollout history deployment/web
deployment.extensions/web
REVISION CHANGE-CAUSE
1 <none>
我们可以看出只有一个版本。
更新应用
从浏览器的头信息可以指定,现在nginx是1.17版本。
方法1、编辑创建pod所管理的yaml文件
kubectl edit deployment/web
找到镜像相关的部分,修改它,保存即可。
(除了在命令行,在dashboard里面也是通过这种方式更新)
方法2、使用单条命令
指定deployment web 的nginx镜像的版本更换为1.12版本。(因为我们默认创建的是最新版本。)
kubectl set image deployment web nginx=nginx:1.12
再一次查看版本记录:
# kubectl rollout history deployment/web
deployment.extensions/web
REVISION CHANGE-CAUSE
1 <none>
2 <none>
有两个记录了。
验证:
重新访问页面。发现头信息标识,版本已经变成1.12了
回滚
假如。发现现在的应用版本出问题,可以回滚到上一个版本。或者以前指定的版本。
有以下两条指令:
回滚到上一个版本
#kubectl rollout undo deployment/web
deployment.extensions/web rolled back
回滚到指定的某一个版本
#kubectl rollout history deployment/web --revision=1
验证:
重新访问,发现以及回滚到之前的版本了。
删除
发现应用以及不需要了,可以删除掉。分为两个步骤:
删除deployment
kubectl delete deploy/web
删除service
kubectl delete svc/nginx-service
查看结果
[root@master ~]# kubectl get deploy,svc
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.extensions/nginx 1/1 1 1 16h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 18h
service/nginx NodePort 10.1.233.243 <none> 80:31239/TCP 16h
以及不存在我们部署的web应用,也无法访问了。