云效平台
云效平台
war/jar包构建脚本
#source /etc/profile
#使用jdk的版本
export JAVA_HOME=/usr/install/java8
#进入应用目录如果是应用名字可以写成{appName}
cd ${appName}
#编译打包
/usr/install/maven3/bin/mvn clean install -D maven.test.skip
#进入target目录
cd target
#命名一个参数
request1="buildNum=${BUILD_NUMBER}"
#命名一个参数,warName上传的jar包一定要写正确
packageName="warName=@springboot-1.2.3-SNAPSHOT.jar"
#上传war包
curl -X POST -F "${packageName}" -F 'crid=${crid}' -F 'compileId=${compileId}' -F 'appName=${appName}' -F "${request1}" http://package.switch.uatyx.yundasys.com:9090/upload
K8s构建脚本-jar包
#source /etc/profile
#使用jdk的版本
export JAVA_HOME=/usr/install/java8
#进入应用目录如果是应用名字可以写成{appName}
cd ${appName}
#编译打包
/usr/install/maven3/bin/mvn clean install -D maven.test.skip
docker login -u alauda/yunxiaodev01 -p Yunxiaodev01@123 10.131.9.12:5000
docker build -t 10.131.9.12:5000/a05-international/${appName}:${version} .
docker push 10.131.9.12:5000/a05-international/${appName}:${version}
#镜像命名
packageName="10.131.9.12:5000/a05-international/${appName}:${version}"
#上传镜像
curl -X POST -F "imageName=${packageName}" -F 'crid=${crid}' -F 'compileId=${compileId}' -F 'appName=${appName}' http://package.switch.uatyx.yundasys.com:9090/callBack
k8s构建脚本
#source /etc/profile
cd ${appName}
docker login -u alauda/yunxiaodev01 -pYunxiaodev01@123 10.131.9.12:5000
docker build -t 10.131.9.12:5000/a03-finance/${appName}:${version} .
docker push 10.131.9.12:5000/a03-finance/${appName}:${version}
packageName="10.131.9.12:5000/a03-finance/${appName}:${version}"
#回调
curl -X POST -F "imageName=${packageName}" -F 'crid=${crid}' -F 'compileId=${compileId}' -F 'appName=${appName}' http://package.switch.uatyx.yundasys.com:9090/callBack
部署方式
k8s
base
部署配置
部署使用到的模板
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ${wayne-app}
labels:
wayne-app: ${wayne-app}
wayne-ns: default
app: ${wayne-app}
spec:
selector:
matchLabels:
app: ${wayne-app}
template:
metadata:
labels:
wayne-app: ${wayne-app}
wayne-ns: default
app: ${wayne-app}
spec:
containers:
- resources:
limits:
memory: ${lim_mem}
cpu: '${lim_cpu}'
requests:
memory: ${req_mem}
cpu: '${req_cpu}'
env: []
envFrom: []
imagePullPolicy: IfNotPresent
image: '${image}'
name: ${wayne-app}
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 20%
maxUnavailable: 1
---
apiVersion: v1
kind: Service
metadata:
name: ${wayne-app}
labels:
wayne-app: ${wayne-app}
wayne-ns: default
app: ${wayne-app}
spec:
selector:
app: ${wayne-app}
ports:
- protocol: TCP
targetPort: ${serviceTarPort}
port: ${servicePort}
name: ${wayne-app}
type: NodePort
以上,凡是存在${变量名}的变量,在部署的时候,要求填写变量,
以下为变量,
req_mem:4Gi;
lim_cpu:2;
req_cpu:1;
serviceTarPort:8081;
wayne-app:yajun-test-application;
servicePort:8081;
lim_mem:4Gi
服务中的三个端口:
port 端口 (内部访问端口)
k8s集群内部服务之间相互访问service的端口。
targetPort端口 (docker暴露端口)
它就是容器真正暴露的端口(使用DockerFile中的EXPOSE),targetPort是pod上的端口,从port和nodePort上来的流量,经过kube-proxy流入到后端pod的targetPort上,最后进入容器内。
nodePort 端口 (对外访问端口)
k8s集群中发发布完service之后,如果需要外部访问,nodePort是一种访问方式,即nodePort是提供给外部流量访问k8s集群中service使用的端口。
例如外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应的service如下,就可以从外部通过浏览器http://node:28080访问到该web服务。
针对公司云效平台部署的时候,从外部访问时,端口变化,可以增加倒数第3行内容。如下:
spec:
selector:
app: ${wayne-app}
ports:
- protocol: TCP
targetPort: ${serviceTarPort}
port: ${servicePort}
nodePort: ${nodePort} #固定外部访问端口。
name: ${wayne-app}
type: NodePort
k8s资源对象yaml参数说明
pod
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中
kind: Pod #指定创建资源的角色/类型
metadata: #资源的元数据/属性
name: web04-pod #资源的名字,在同一个namespace中必须唯一
labels: #设定资源的标签,详情请见http://blog.csdn.net/liyingke112/article/details/77482384
k8s-app: apache
version: v1
kubernetes.io/cluster-service: "true"
annotations: #自定义注解列表
- name: String #自定义注解名字
spec: #specification of the resource content 指定该资源的内容
restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器
nodeSelector: #节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1
zone: node1
containers:
- name: web04-pod #容器的名字
image: web:apache #容器使用的镜像地址
imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
# Always,每次都检查
# Never,每次都不检查(不管本地是否有)
# IfNotPresent,如果本地有就不检查,如果没有就拉取
command: ['sh'] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT
args: ["$(str)"] #启动容器的命令参数,对应Dockerfile中CMD参数
env: #指定容器中的环境变量
- name: str #变量的名字
value: "/etc/run.sh" #变量的值
resources: #资源管理,请求请见http://blog.csdn.net/liyingke112/article/details/77452630
requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
memory: 32Mi #内存使用量
limits: #资源限制
cpu: 0.5
memory: 32Mi
ports:
- containerPort: 80 #容器开发对外的端口
name: httpd #名称
protocol: TCP
livenessProbe: #pod内容器健康检查的设置,详情请见http://blog.csdn.net/liyingke112/article/details/77531584
httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常
path: / #URI地址
port: 80
#host: 127.0.0.1 #主机地址
scheme: HTTP
initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始
timeoutSeconds: 5 #检测的超时时间
periodSeconds: 15 #检查间隔时间
#也可以用这种方法
#exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常
# command:
# - cat
# - /tmp/health
#也可以用这种方法
#tcpSocket: //通过tcpSocket检查健康
# port: number
lifecycle: #生命周期管理
postStart: #容器运行之前运行的任务
exec:
command:
- 'sh'
- 'yum upgrade -y'
preStop: #容器关闭之前运行的任务
exec:
command: ['service httpd stop']
volumeMounts: #详情请见http://blog.csdn.net/liyingke112/article/details/76577520
- name: volume #挂载设备的名字,与volumes[*].name 需要对应
mountPath: /data #挂载到容器的某个路径下
readOnly: True
volumes: #定义一组挂载设备
- name: volume #定义一个挂载设备的名字
#meptyDir: {}
hostPath:
path: /opt #挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种