1、如云平台整体架构图所示,下面这里是开发人员的流程图。接下来就来搭建一下环境。
2、首先gitlab、harbor的搭建,这里就忽略掉了
3、主要来看分析一下如何制作一个chart
首先values.yaml文件内容如下所示:
replicaCount: 1
image:
repository: 192.168.1.135:8888/wisecloud/portalms_server
pullPolicy: IfNotPresent
tag: latest
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
serviceAccount:
create: true
annotations: {}
name: ""
podAnnotations: {}
podSecurityContext: {}
securityContext: {}
service:
type: ClusterIP
port: 80
ingress:
enabled: false
annotations: {}
hosts:
- host: portalms.xxl.com
paths:
- path: /
backend:
serviceName: portalms-server-svc
servicePort: 80
tls: []
resources: {}
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 5
targetCPUUtilizationPercentage: 75
targetMemoryUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
affinity: {}
fullname: portalms-server
config:
name: portalms-server-cmp
namespace: wisecloud
data: |
[DB]
username = postgres
password = 123456
database = portal
database_type = postgresql
pool_size = 120
host = 192.168.1.133
port = 23451
[CAS]
cas_operator_search = http://192.168.1.130:8822
[THREAD]
thread_pool_executor = 100
[NGINX]
host=http://192.168.1.130
port=8007
[NETHEART]
heart_time = 30
[WORKORDER]
time_interval = 3
thread_pool_size = 30
time_out = 30
delete_mouth=3
[REDIS]
redis_db=0
redis_ip=192.168.1.133
redis_port=6579
redis_password=wisecloud2018
[PUSH_REDIS]
redis_db=0
redis_ip=192.168.1.133
redis_port=6579
redis_password=wisecloud2018
这里主要是用来定义变量的
接下来看deployment.yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.fullname }}-dep
namespace: {{ .Values.config.namespace }}
labels:
app: {{ .Values.fullname }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
strategy: # 滚动更新
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # 每次更新的所占百分比
maxUnavailable: 0% # 最大不可用副本占比
selector:
matchLabels:
app: {{ .Values.fullname }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
app: {{ .Values.fullname }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "portalms-chart.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 4050
protocol: TCP
volumeMounts:
- name: portalms-config
mountPath: /opt/wisecloud/portalms/portal_server/utils/portal_conf.ini
livenessProbe:
httpGet:
path: /api/portalms/portal
port: 4050
readinessProbe:
httpGet:
path: /api/portalms/portal
port: 4050
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumes:
- name: portalms-config
configMap:
name: {{ .Values.config.name }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
首先分析头一段:
这里换成真实的地址,应该就是:
这里没有什么好说的,接下来分析下面这一段
这里也很简单,主要是要注意一下,这个deployment的selector匹配的是app为portalms-server的,意味着pod需要贴上这个标签。
而这里就是具体deployment里面的内容了,仔细瞧瞧,首先metadata里面,主要贴上了上面说的标签。
这里加上了拉取镜像的secret,
这里是serviceAccountName
接下来这里是核心部分:
首先是定义了容器的端口是4050,然后做了一个挂载,挂载选择的是portalms-config,然后就是探测,最后是做资源的限制。
其中挂载指定的是portalms-config
继续往下看,会发现portalms-config,其实是指定了一个名为portalms-server-cmp的configmap。
既然这里指定了configmap,那么就看下configmap.yaml文件
非常的简单:这个configmap就是指定了一个portal_conf的配置,然后后面是配置信息
那么这里挂载的含义,就是会将下面这一串配置信息,挂载到容器的/opt/wisecloud/portalms/portal_server/utils/portal_conf.ini文件里面去。
不过,其实这里最好让configmap引用values.yaml里面的配置,不然相当于这个配置就是写死的了。后续再优化吧。至此deployment和configmap应该是没有问题的,那么接下来看一下service
service也非常的简单,这里使用的是NodePort的方式,且service的端口是的端口是80。整体来说是没有什么问题的,那么这个chart运行起来会是什么样的呢?我们先 来预测下:
a、命名空间namespace为wisecloud
b、会创建一个名为portalms-server-cmp的configMap
c、会创建一个名为portalms-server-dep的deployment,这个deployment下面会有一个pod,pod里面的容器用的是portalms,且对外暴露的端口应该是4050
d、会创建一个名为portalms-server-svc的service服务,这个服务使用的nodeport方式,service的端口是80,会代理到pod的4050端口,且会在宿主机上生成一个随机的端口。用来提供对外访问。假设这个端口是30000,k8s集群里面的任意一台节点机器为192.168.1.1
那么通过访问192.168.1.1:30000即可代理到启动的portalms服务。
那么启动一下看看:
从这里可以看到service是NodePort方式,且节点ip为32253,去任意一个节点看一下这个端口:
然后通过jmeter来访问一下这个服务是不是正常的:服务是通的,表示portalms这个服务确实是启动了