k8s deployment 实验。
注:本文为笔者实验记录,非教程,另会不定时更新。
环境
1 | # kubectl get node |
Deployment
技术总结
测试yaml文件
1 | # vim nginx-deployment.yaml |
创建:
1 | kubectl create -f nginx-deployment.yaml |
查看:
1 |
|
查看:
1 | # kubectl describe deployment |
暴露端口:
1 | kubectl expose deployment nginx-deployment --port 88 |
TODO:测试未成功。
升级回滚测试
更新文件,再测试,将image: latelee/lidch
改为 image: latelee/lidch:1.1
,再执行:
1 | kubectl apply -f nginx-deployment.yaml |
会自动升级镜像版本(旧的pod被删除,新的pod被创建,半个月后的PS:似乎此法不可行)。
另一个简单的更改镜像版本的命令:
1 | kubectl set image deployment/nginx-deployment nginx=latelee/lidch |
其中,nginx=latelee/lidch
前者为容器名称,后者为镜像名称(及版本)。如果新版本镜像不存在,则自动拉取,耗时较长,反之则短。
验证:
1 | # curl 10.244.4.28 // IP为pod的IP |
deployment的升级,与rc的不太一样,似乎deployment简单些。
查看历史:
1 | kubectl rollout history deployment/nginx-deployment |
回滚到1版本:
1 | kubectl rollout undo deployment/nginx-deployment --to-revision=1 |
此时会自动更新pod(旧的删除,新的创建)。
验证:
1 | # curl 10.244.4.29 // IP为pod的IP |
升级说明:
如果deployment只有一个,则在旧的销毁,新的创建过程中,服务是无法访问的。因此,才会指定多个副本。
自动扩缩容
手动扩容、缩容:
1 | kubectl scale deployment nginx-deployment --replicas=10 |
自动扩容、缩容:
1 | kubectl autoscale deployment nginx-deployment --min=2 --max=15 --cpu-percent=70 |
再次执行,提示已存在:
1 | Error from server (AlreadyExists): horizontalpodautoscalers.autoscaling "nginx-deployment" already exists |
TODO 未解决。
问题
1 | 0/3 nodes are available: 1 node(s) had taints that the pod didn't tolerate, 2 node(s) didn't have free ports for the requested pod ports. |
原因:pod已经占用节点端口,无法再启动。