coding-k8s环境搭建
-
coding
-
-
简介
-
CODING 是一个面向软件研发团队的研发协作管理平台,提供云原生开发环境、在线编码、代码托管、项目管理、测试管理、持续集成、制品库、持续部署、团队知识库等系列工具产品,帮助研发团队实践敏捷开发与 DevOps。
CODING 成立于 2014 年 2 月,于 2019 年被腾讯收购成为其全资子公司,作为腾讯云官方 DevOps 平台工具向广大开发者及企业研发团队提供服务,支持 SaaS 模式或私有部署模式。
-
-
创建新部署流程
-
第一步 创建构建计划
-
-
-
-
-
第二步 选择模板
-
-
-
-
-
-
后端选java模板
-
-
-
-
-
-
-
前端选vue模板
-
-
-
点击确定 触发一次构建
-
-
-
第三步配置k8s部署
-
-
1.2.3.1. 打开部署控制台
1.2.3.2. 创建应用
1.2.3.3. 创建流程并配置
1.2.3.3.1.基础配置
1.2.3.3.2.配置Deployment
apiVersion: apps/v1 kind: Deployment metadata: labels: app: emarket-productcenter-app name: emarket-productcenter-app-deployment spec: replicas: 1 #复制的容器个数 代表相同服务启动的个数 0为停止服务 selector: matchLabels: app: emarket-productcenter-app template: metadata: labels: app: emarket-productcenter-app spec: containers: - env: - name: JAVA_JVM_OPTS value: >- -server -XX:+UseContainerSupport -XX:InitialRAMPercentage=50.0 -XX:MaxRAMPercentage=75.0 -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M image: '${parameters.imageUrl}' imagePullPolicy: Always name: emarket-productcenter-app ports: - containerPort: '${parameters.appPort}' resources: limits: cpu: '2' memory: 4Gi requests: cpu: '1' memory: 1Gi |
1.2.3.3.3. 添加一个分支选择预置条件检查
1.2.3.3.4.配置Service
apiVersion: v1
kind: Service
metadata:
name: emarket-productcenter-app
namespace: emarket
spec:
ports:
- name: '${parameters.appPort}-${parameters.appPort}-tcp'
nodePort: '${parameters.appPort}'
port: '${parameters.appPort}'
protocol: TCP
targetPort: '${parameters.appPort}'
selector:
app: emarket-productcenter-app
sessionAffinity: None
type: NodePort
###############################
如果需要固定服务的暴露端口号 如nginx 释放80端口
targetPort:80
###############################
-
-
-
第四步配置完整的静态 Jenkinsfile
-
-
1.2.4.1.配置jenkinsfile
添加的webhook 代码块
stage('webhook触发部署') {
steps {
script {
def parameters = '{"parameters":{"imageUrl":"'+"${TKE_IMAGE_URL}"+'","appName":"'+"${SERVER_NAME}"+'","appPort":'+"${SERVER_PORT}"+',"isDeployService":"'+"${DEPLOY_FLAG}"+'"}}';
echo '部署参数:'+parameters;
sh "curl --location --request POST "+"${WEBHOOK_URL}"+" \
--header 'Content-Type: application/json' \
--data-raw '${parameters}'"
}
}
}
添加变量
WEBHOOK_URL = 'http://devops.hi-coding.com.cn/api/cd/webhooks/webhook/76c3e3b0-c554-4827-af0d-9ce149c160b1' #自己的webhook 地址
SERVER_PORT = '36060' #暴露的服务端口
SERVER_NAME = 'emarket-admin-app' #deployment 名称
1.2.4.2. 选择构建的触发规则
1.2.4.3. 配置变量
-
-
日常升级环境
-
第一步 构建计划
-
-
选择需要的分支
点“立即后构建”后,显示如下:
构成成后显示如下:
查看一下集群的详细信息:
-
-
-
第二步 代码合并
-
-
-
-
-
第三步 重新升级项目 如果服务已启动 选择false
-
-
1.5 常见问题
工作中大部分的问题尤其是环境部署问题都是路径没有配对,配置文件没有对应到(后端/前端 地址写错 nginx 转发的路径)
1. nginx 需要暴露80端口 所以在coding部署时需要注意前端nginx 暴露的端口号固定为80 port: 38081 # 暴露出来的端口,可以让客户端访问的端口 nodePort: 38081 #ingress 代理的端口。 要规划好,10000 10001 10002 targetPort: 80 # 容器内部的端口,可以均设置为$servicePort 2. conf 文件 nginx 监听服务的路径 3. k8s的三种ip pod IP 是docker网桥分配的IP node IP 是服务的可访问IP: node IP+k8s代理的端口号访问 30000-32767(端口范围只能是 30000-32767) CLUSTER-IP 只在服务器中的集群可访问 集群与集群调用 使用 Ip+服务暴露的端口号 9914 转发的时候是 service 服务名称+端口号访问 外网不可直接ping 4. service type常用的两种类型 type: ClusterIP type: NodePort 5. ClusterIP 随机分配外部访问的端口号 集群中的访问方式是 服务名称(service:端口号port 服务暴露的端口 NodePort 需要自己固定端口号 集群的访问方式是 服务名称:k8s代理的端口号 6.对于k8s 服务搭建的理解:搭建k8s服务时 需要理解NodePort 和 ClusterIP 的访问方式 NodePort 指定一个自己的端口号并暴露自己出来 用来被外部访问。而ClusterIP 少一个自己暴露的端口号,系统将随机一个端口号。并且这种服务只能在集群中被访问,外部无法访问 所以就需要一个nginx 能被访问到 并且也可以访问集群中的服务 所以配置集群的时候,前端如果配置nginx 需要把nginx配置成NodePort 类型 。后端的服务都是ClusterIP。 7.nginx 配置location的问题 root的处理结果是:root路径 + location路径 alias的处理结果是:使用alias路径替换location路径
2.堡垒机命令
3.k8s
-
3.1 k8s 查看命令
1.查看pod 详细信息 kubectl get pod -n emarket(命名空间) -o wide
-
查看service 服务的详细信息 kubectl get svc -n emarket(命名空间) -o wide
# 查看容器详细信息 kubectl describe pod podname -n namespace # 查看服务详细信息 kubectl describe svc servicename -n namespace
3.kubectl get deployments -n emarket(命名空间) -o wide 查看deployments 服务的情况, 这个能查看服务名称,镜像名称,配合 delete deploymmetns 使用可以彻底删除服务
4.
kubectl exec -it podname -n emarket sh # 进入pod容器
3.2 操作类命令
# k8s 启动yaml脚本 kubectl apply -f emarket-basecenter-deployment.yaml # k8s删除yaml脚本 kubectl delete -f emarket-basecenter-deployment.yaml
查看日志信息 kubectl logs -f --tail 500 服务名称 -n 命名空间
# 删除容器 删除pod 容器 删除 service 服务 kubectl delete pod pod名称 -n 命名空间 kubectl delete svc svc名称 -n 命名空间 列如:kubectl delete svc emarket-admin-app -n emarket
# 杀死deployment 服务 kubectl delete deployment deployment名称 -n 命名空间 # 如果delete pod delete service 不好用 直接 delete deployment