pod基本概念
一个pod可以对应多个容器,每个容器可以对应一个应用。
1 最小部署的单元
2 包含多个容器(一组容器的集合)
3 一个pod中容器共享网络命名空间
4 pod是短暂的
pod存在意义
1 创建容器使用docker,一个docker对应是一个容器,一个容器有进程,一个容器运行一个应用程序
2 pod是多进程设计,运行多个应用程序
一个pod有多个容器,一个容器里面运行一个应用程序
pod存在为了亲密性应用
两个应用之间进行交互
网络之间调用
两个应用需要频繁调用
pod实现机制
共享网络
共享存储
共享网络:通过paus容器,把其它业务容器加入到Pause容器里面,让所有业务容器在同一个名称命名空间中,可以实现网络共享
共享存储:引入数据卷概念Volumn,使用数据卷进行持久化存储
controller
在集群上管理和运行集群容器的对象
pod和controller的关系
pod是通过Controller实现应用的运维比如伸缩,滚动升级等等
pod和controller之间通过label标签建立关系 selector
controller常用类型
deployment
部署无状态应用
管理pod和replicaset
部署 滚动升级等功能
无状态
认为pod都是一样的
没有顺序要求
不用考虑在那个node运行
对一进行伸缩和扩展
有状态
上面因素都需要考虑
让每个pod独立的,保持pod启动顺序和唯一性
唯一的网络标识符,持久存储
有序,比如mysql主从
部署有状态应用
无头service ClusterIP:none
statefulset
部署守护进程
Daemonset 所有的pod都运行在一个进程中
部署一次性任务
job
部署定时任务
cronjob
导出yaml文件
kubectl create deployment web --image=ngix --dry-run -o yaml > web.yaml
使用yaml部署应用
kubectl apply -f web.yaml
对外发布(暴露对外端口号)
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name =web1 -o yaml > web1.yaml
kubectl get pods.svc
常见的sevice类型
ClusterIp 集群内部使用
NodePort 对外访问应用使用
LoadBalancer 对外访问应用使用,公有云
在k8s集群部署项目
1 容器交付流程
2 k8s部署项目流程
容器交付流程
开发代码阶段(编写代码,测试,编写dockerfile)
持续交付/集成(代码编译打包,制作镜像,上传镜像仓库)
应用部署(坏境准备,Pod,Service,Ingress)
运维(监控,故障排查,升级优化)
k8s部署项目流程
制作镜像(dockerfile)
推送镜像仓库(阿里云,私有云等)
控制器部署镜像(Deployment)
对外暴露应用(service,ingress)
运维(监控,升级)
制作镜像
docker build -t 项目的jar包或者是war包:latest
docker image
上传镜像
登录镜像服务器
docker loging --user
为镜像添加版本号
docker tag 镜像id 镜像服务器地址/镜像目录/jar或war名称:1.0.0
实施推送
docker push 镜像id 镜像服务器地址/镜像目录/jar或war名称:1.0.0
部署镜像暴露应用
kubectl create deployment web --image=ngix --dry-run -o yaml > web.yaml
kubectl apply -f web.yaml
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name =web1 -o yaml > web1.yaml
kubectl get pods.svc
PV和PVC
PV:持久化存储,对存储资源进行抽象,对外提供可以调用的地方
PVC:用于调用,不需要关心内部实现细节
应用部署
定义pvc 绑定pv
定义pv 数据存储服务器IP 路径 存储容量匹配模式(pvc原则)
容器中的内容操作
将本地的文件arthas.tar.gz 拷贝到ae3f4bd1-aaa-num-search-685dd86457-lbdfx容器中的/home/admin/ 目录下,命名空间是bbb
kubectl --kubeconfig=kubeconfig cp arthas.tar.gz ae3f4bd1-aaa-num-search-685dd86457-lbdfx:/home/admin/ -n bbb
将命名空间是aaa的容器ae3f4bd1-aaa-num-search-685dd86457-lbdfx下/home/admin/app/ccc/WEB-INF/lib/ddd-SNAPSHOT.jar的jar下载到本地。
kubectl --kubeconfig=kubeconfig cp aaa/ae3f4bd1-aaa-num-search-685dd86457-lbdfx:/home/admin/app/ccc/WEB-INF/lib/ddd-10.0.1-SNAPSHOT.jar