kubernetes(十三) k8s 业务上线流程(手动版)
k8s 实战
传统部署与k8s部署的区别
- 传统部署
- k8s 部署架构
- 项目迁移到k8s的流程
制作镜像
- 镜像分类
- 基础镜像
- 环境镜像
- 项目镜像
控制器管理POD
- Deployment:无状态部署,例如Web,微服务,API
- StatefulSet:有状态部署,例如数据库,ZK,ETCD
- DaemonSet:守护进程部署,例如监控Agent、日志Agent
- Job & CronJob:批处理,例如数据库备份,邮件通知
Pod数据持久化
- 容器部署过程中一般有如下的三种数据
- 启动时需要的初始数据,可以是配置文件
- 启动过程中产生的初始化数据,该临时数据需要多个容器间共享
- 启动过程中产生的业务数据
暴露应用
使用Service ClusterIP类型暴露集群内部的应用访问
- service定义了Pod逻辑集合和访问这个集合的策略
- service引入为了解决Pod的动态变化,提供服务发现和负载均衡
- 使用coreDNS解析Service名称
对外发布应用
- 使用ingress对外暴露应用
- 通过Service关联Pod
- 基于域名访问
- 通过Ingress Controller实现pod的负载均衡
- 支持TCP/UDP四层和Http七层
部署Java/PHP项目
- 构建环境镜像
$ mkdir ~/base_env/ && cd ~/base_env
$ vim Dockerfile
FROM centos:7
LABEL maintainer="waanghui@qq.com"
ENV tomcat_version="8.5.57"
- 代码提交至代码仓库: http://192.168.56.19:9999/root/java-demo.git (如何部署代码仓库可以联系QQ 122725501协助:)
- 代码编译
- git clone http://192.168.56.19:9999/root/java-demo.git
- 编译机安装好编译环境(
yum install java-1.8.0-openjdk maven -y
) - 修改代码的maven源
$ vi /etc/maven/settings.xml
<mirrors>
<mirror>
<id>central</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
$ cd java-demo
$ mvn clean package -D maven.test.skip=true
- 构建镜像并推送到镜像仓库
$ vim Dockerfile
FROM hub.cropy.cn/base/tomcat:v1
LABEL maintainer="wanghui@qq.com"
RUN rm -rf /usr/local/tomcat/webapps/*
COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
$ docker build -t hub.cropy.cn/demo/java-demo:v1 .
$ docker push hub.cropy.cn/demo/java-demo:v1
k8s服务编排部署项目
- 创建命名空间,资源隔离,权限控制
$ vim namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: test
$ kubectl apply -f namespace.yaml
- 使用deploy控制器创建Pod
# 需要创建hub仓库的secret
$ kubectl create secret docker-registry docker-regsitry-auth --docker-server="hub.cropy.cn" --docker-username="admin" --docker-password="Harbor12345" -n test
$ vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-demo
namespace: test
spec:
replicas: 2
selector:
matchLabels:
project: www
app: java-demo
template:
metadata:
labels:
project: www
app: java-demo
spec:
imagePullSecrets:
- name: "docker-regsitry-auth"
containers:
- image: hub.cropy.cn/demo/java-demo:v1
name: java-demo