部署前期
- 准备工作 与 注意事项
- 准备基础镜像 并 推送到 镜像仓库
- 部署php/java项目
准备工作
- 部署的项目情况
- 1、业务架构及服务 (dubbo、spring cloud)
- 2、第三方服务 mysql,redis,zookeeper,eruka,mq
- 3、服务之间怎么通信?
- 4、资源消耗:硬件,带宽
- 部署项目时,用到的k8s资源
- 1、namespace 不同的项目隔离 , 或者隔离不同的环境(test,prod,dev)
- 2、无状态应用部署 (deployment)
- 3、有状态应用部署 (statefulset,pv,pvc)
- 4、发布项目暴露外部访问(service,ingress)
- 5、信息存储 secret,configmap
- 准备基础镜像
1 | [root@k8s-node2 nfs]# docker search lizhenliang |
- 编排部署
- 1、编写yaml文件
- 工作流程
- 1、kubectl -> yaml -> 镜像仓库拉取镜像 -> service(集群内部),ingresss -> 暴露给外部访问
部署 Java 应用
制作镜像
- 如果有cicd环境 自动完成 (代码拉取->代码编译构建->镜像打包->推送到镜像仓库)
- 没有 就手动构建
- 镜像为交付物
准备 pv 和 pvc
安装 nfs 服务
- 选定 172.17.70.254 作为 nfs 服务端
1 | # 安装 nfs 所有node都需要安装 |
1 | # 配置共享目录 |
1 | # 如过遇到nfs无法启动的检查步骤 |
基于nfs 配置 PV 动态供给
1 | # 上传nfs-client 修改IP地址为nfs服务端地址 |
1 | # 创建 |
1 | [root@k8s-master1 nfs-client]# cat class.yaml |
1 | [root@k8s-master1 nfs-client]# cat deployment.yaml |
部署 harbor仓库
1 | # 该主机也需要二进制安装docker |
1 | [root@k8s-master2 src]# mkdir -p /etc/docker |
1 | [root@k8s-node1 src]# systemctl start docker |
1 | # 上传文件 |
1 | # 部署 compose |
1 | # 部署 harbor |
免https使用
1 | [root@Docker harbor]# vim /etc/docker/daemon.json |
登录
1 | # 两个node节点都先登录下 好下载基础镜像 |
下载 pod基础镜像 并上传到私有仓库
1 | [root@k8s-master2 opt]# docker pull lizhenliang/pause-amd64:3.0 |
构建基础镜像
- nginx
- php
- tomcat
构建项目镜像
安装Git
1 | [root@k8s-node3 opt]# yum install git |
下载项目
1 | [root@k8s-node3 opt]# cd /opt/ |
编译源码
1 | # 安装 jdk 和 maven 环境 |
构建项目镜像
1 | # 引用了老师的tomcat镜像运行环境 |
1 | # 构建镜像 |
无状态部署 tomcat
- tomcat
- deployment
- service
- ingress
- namespace # 逻辑项目隔离
创建 命名空间
1 | [root@k8s-master1 java-demo]# vim namespace.yaml |
1 | [root@k8s-master1 java-demo]# kubectl apply -f namespace.yaml |
部署 deployment
1 | # registry-pull-secret 创建仓库凭证 |
1 | [root@k8s-master1 templates]# vim /opt/java-demo/deployment.yaml |
1 | # 创建启动 |
项目发布 service
1 | [root@k8s-master1 java-demo]# vim service.yaml |
1 | # 创建并测试 |
暴露项目 Ingress
1 | [root@k8s-master1 java-demo]# vim ingress.yaml |
1 | [root@k8s-master1 java-demo]# kubectl apply -f ingress.yaml |
测试访问
1 | [root@k8s-master1 java-demo]# cat /etc/hosts |
有状态部署 mysql
- mysql
- statefulset
- Headless Service (dns绑定)
- pv,pvc (stotageclass pv自动供给)
1 | # Headless Service |
1 | [root@k8s-master1 java-demo]# vim mysql.yaml |
1 | # 创建并测试 |
1 | # 登录测试 |
导入数据
1 | # copy文件 |
修改代码 数据库连接地址
1 | # 修改源码 然后重新打包镜像 |
部署 PHP 项目
- 项目源码地址
1 | https://github.com/lizhenliang/php-demo |
拉取项目源码
1 | # 拉取项目源码 |
数据库配置
1 | # 共用之前java创建的mysql数据库 |
1 | [root@k8s-node3 php-demo]# vim /opt/php-demo/wp-config.php |
创建镜像
1 | # 创建镜像 |
1 | # 推送镜像到镜像仓库 |
创建命名空间
1 | [root@k8s-master1 php-demo]# vim namespace.yaml |
创建仓库凭证
1 | [root@k8s-master1 php-demo]# kubectl create secret docker-registry registry-pull-secret --docker-username=admin --docker-password=lx@68328153 --docker-email=253911339@qq.com --docker-server=172.17.70.252 -n test |
创建 deployment
1 | [root@k8s-master1 php-demo]# vim deployment.yaml |
1 | [root@k8s-master1 php-demo]# kubectl get pods -n test |
创建 service
1 | [root@k8s-master1 php-demo]# vim service.yaml |
1 | [root@k8s-master1 php-demo]# kubectl apply -f service.yaml |
1 | # 创建 ingress |
1 | [root@k8s-master1 php-demo]# kubectl apply -f ingress.yaml |
创建 mysql 有状态应用
1 | [root@k8s-master1 php-demo]# vim mysql.yaml |
1 | [root@k8s-master1 php-demo]# kubectl apply -f mysql.yaml |
测试域名访问
1 | # 阿里云还没有屏蔽签测试域名 |