写在前面
为方便阅读和理解文档内容, 请尽量先学习 docker 的基础知识、k8s各组件的功能和应用场景。
一、目录结构
[APP_NAME]/ ----------------------- 项目目录
├── deploy/ ----------------------- 部署文件目录
│ └── [env]/ -------------------- 环境目录
│ ├── Dockerfile ------------ Dockerfile文件
│ └── configmap/ ------------ 配置文件目录
│ └─ bootstrap.yml ------ 配置文件
├── src/ -------------------------- 源代码根目录
├── target/ ----------------------- maven打包 [APP_NAME].jar 目录
│ └── [APP_NAME].jar ------------ 应用 jar 包
以此目录结构讲解, APP_NAME 为应用名称
二、oc 安装和登陆
1.安装 oc
-
下载链接:
略 -
将下载好的 oc 可执行文件配置到环境变量方便命令执行(具体可以百度各系统环境变量配置的步骤):
windows: 将oc添加到环境变量 linux: 1.设置 oc 可执行的权限 chmod +x oc 2.环境变量配置 方式一: 将oc文件放置 /use/local/bin 目录下 方式二: 配置 .profile 文件
2.平台访问
-
命令行登陆
oc login -u [用户名] -p [密码] --server=地址 -
名称空间
name-spacce# 查看所有 oc get projects # 查看当前 oc project # 切换 oc project [project_name]
三、部署环境搭建步骤
-
打开命令行, 切换到
APP_NAME目录(目录结构在文档开头列出来了)cd [APP_NAME]/deploy/[env]/ -
创建应用
oc new-app --name [APP_NAME] --binary --strategy=docker -
配置文件的挂载(结合项目实际使用场景, 是否需要)
# 将configmap文件夹下的配置文件创建成一个configmap oc create configmap [ConfigMapName] --from-file ./configmap # 挂载配置到应用 oc set volume dc/[APP_NAME] --add --mount-path=/deployments/config --configmap-name=[ConfigMapName] -
日志持久卷挂载
# 命令(或者直接从控制台创建) oc apply -f ./log-pvc.yaml # 内容如下: apiVersion: v1 kind: PersistentVolumeClaim metadata: name: [pvc_name] namespace: [project_name] spec: accessModes: - ReadWriteOnce resources: requests: storage: [空间分配大小, 单位: Mi 或 Gi] storageClassName: [StorageClass名称] volumeMode: Filesystem # volume 挂载pvc oc set volume dc/[APP_NAME] --add --mount-path=/deployments/logs --claim-name=[pvc_name] -
暴露
service# 命令: oc expose dc/[APP_NAME] --port=[server端口] --target-port=[容器内服务的端口] # 例如: oc expose dc/integral-server --port=80 --target-port=8080 -
暴露供k8s集群外访问的域名
# 命令: oc expose svc/[SVC_NAME] # 例如: oc expose svc/integral-server
四、应用部署
1.测试
-
打开命令行
cd [APP_NAME]/deploy/[env]/ -
build上传应用(上传 -> build成镜像 -> 部署 -> 启动)
# 将打包后的.jar文件复制到[APP_NAME]/deploy/[env]/目录 cp ../../target/[APP_NAME].jar ./ # 上传、build镜像、初始化容器、部署启动一体化操作 oc start-build [APP_NAME] --from-dir ./ -
查看
build# 查看 build 日志 oc logs -f bc/[APP_NAME] # 查看 build 列表 oc get build 或者 oc get build -w # 列表结果如下(Running: 正在运行; Complete: build成功): NAME TYPE FROM STATUS STARTED DURATION app-name Docker Binary Complete 5 hours ago 3m10s
2.UAT、生产
-
创建应用(仅第一次需要)
# 命令: oc new-app --name=[APP_NAME] --image=imagestream # imagestream 可以通过 oc get is 查看 oc get is -
拉取
image(从镜像仓库拉取稳定的测试或者UAT环境镜像到生产)# 命令: oc import-image [APP_NAME:TAG] --from=[IMAGE REPOSITORY:latest] --confirm --reference-policy=local # 例如: oc import-image integral-server:1.0.0 --from=default-route-openshift-image-registry.caas.ccic-test.com.cn/baodai-bxmxapp-test/integral-server:latest --confirm --reference-policy=local"reference-policy" 必须是"local"(这样才会把测试的镜像拉到生产. 否则只是打了个标记, 还是会从test去拉镜像, 但是测试一不稳定, 二会定期清理镜像) -
将拉取到生产的
tag打成latest# 命令 oc tag serverImageStream:tagVersion serverImageStream:latest --reference-policy=local # 例如: oc tag integral-server:1.0.0 integral-server:latest --reference-policy=local -
发布应用,
triggers为手动模式(manual)下, 生产镜像变更不会自动生效, 需要手动发布# 命令: oc rollout latest dc/<dc_name> # 例如: oc rollout latest dc/integral-server oc rollout latest dc/nginx -
查看
pod# 查看部署进度 oc logs -f dc/[APP_NAME] # 查看 pod 列表 oc get pod oc get pod -w oc get pod -o wide # 列表结果如下(NAME=[APP_NAME]-[version]-[随机字符串]): NAME READY STATUS RESTARTS AGE [APP_NAME]-1-gcnjk 1/1 Running 0 4h33m(pod容器 node1) [APP_NAME]-1-jkdh9 1/1 Running 0 120m(pod容器 node2)
五、其他 oc 命令(具体可以参考 kubectl 命令, 并结合 oc --help )
-
triggers 策略(configmap、imagestream 发生改变时自动更新部署pod)
# 手动模式 oc set triggers dc/[APP_NAME] --manual # 自动 oc set triggers dc/[APP_NAME] --auto -
pod 扩缩容
# DeploymentConfig 扩缩容 oc scale --replicas=集群数 dc/[APP_NAME] # 举例 oc scale --replicas=2 dc/gateway-server # StatefulSet 扩缩容 oc scale --replicas=集群数 sts/[APP_NAME] # 举例 oc scale --replicas=3 sts/nacos -
查看信息(
Pod、DeploymentConfig、Service、Route、Build、BuildConfig、PersistentVolumeClaims、ConfigMap、ImageStream)oc get pod | dc | svc 或者 service | route | build | bc | pvc | cm | is 或者 imagestream 举例: oc get pod 或者 oc get pod -o wide -
查看组件
yaml文件信息# 例子1(查看dc): oc get dc/gateway-server -o yaml # 例子2(查看svc): oc get svc/gateway-server -o yaml # 例子3(查看route: oc get route/gateway-server -o yaml -
查看详细信息
oc describe pod | dc | svc 或者 service | route | build | bc | pvc | cm | is 或者 imagestream [name] 举例: oc describe pod [pod_name] -
进入
podoc exec -it [pod_name] /bin/bash -
查看
pod日志oc logs -f [pod_name] -
文件导入/导出
# 命令 oc cp [pod]:{容积内文件路径} {本地电脑路径} # 例如: ## 导出容器内某个目录的所有文件到本地当前目录 oc cp integral-server-uh49f:/deployments/logs/ ./ ## 导出容器内某个指定文件到本地当前目录 oc cp integral-server-uh49f:/deployments/logs/integral-server-uh49f/info.log ./ ## 从本地将目录copy到容器 oc cp ./bdproplatview nginx-1-8rm49:/opt/app-root/src ## 从本地将文件copy到容器 oc cp ./index.html nginx-1-8rm49:/opt/app-root/src/bdproplatview/ -
apply命令# apply 除了能添加 svc、route 之外还可以添加其他的k8s组件, *.yaml 文件中 kind 区分组件的类型 oc apply -f [name].yaml
六、参数设置
-
参数设置方式如下
# 方式1: Dockerfile 中添加 ENV key=value # 方式2: 通过命令 oc set env dc/[APP_NAME] key=value .... (可设置多个) # 方式3: 进入平台 DeploymentConfig 添加 Environment -> env如果都有配置则优先级为: 方式1 < 方式2 < 方式3 -
系统参数设置
# 1.容器时区 方式1: ENV TZ="Asia/Shanghai" 方式2: oc set env dc/[APP_NAME] TZ=Asia/Shanghai # 2.语言设置 方式1: ENV LANG="en_US.UTF-8" 方式2: oc set env dc/[APP_NAME] LANG="en_US.UTF-8"