1、在测试环境的和正式环境的master上,新建namespace,多个service属于一个namespace
2、master新建docker-registry secret,拉去镜像用的,注意namespace
kubectl create secret docker-registry docker-hub-secret \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=original_dk@163.com \
--docker-password=111111 \
--docker-email=original_dk@163.com \
--namespace=dk-shop
3、master新建各service的secret管理mysql,redis等账号密码
看以下项目的配置方式
我们规定:- 项目中的config拆分成一般config(一般mysql/redis host,port和其他配置等)和.env(名字可以随便起),该.env主要保存比如mysql,redis账号密码
- 每个service有自己的secret,每个secret的名字和service相同,该secret是维护项目中的.env
- 你可以把所有的敏感信息写在一个.env上也可以多个,比如,mysql.env,redis.env,主要看项目需要,但是最终都由一个secret维护
# 一个.env
# .env=.env中前边的.env是k8s自动部署到项目对应目录的文件名称,后边.env是项目中的.env文件
kubectl create secret generic user --from-file=.env=.env --namespace=dk-shop
# 多个.env
kubectl create secret generic user --from-file=mysql.env=mysql.env --from-file=redis.env=redis.env --namespace=dk-shop
然后对应的deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: user
labels:
app: user
spec:
replicas: 3
selector:
matchLabels:
app: user
template:
metadata:
labels:
app: user
version: v1
spec:
serviceAccountName: dk-shop
containers:
- name: user
image: registry.cn-hangzhou.aliyuncs.com/dk-shop/user:dev-dc95299f
ports:
- containerPort: 5001
volumeMounts:
- name: config
# mountPath:
# 有subPath,则是个文件,会被覆盖;没有subPath,是个文件夹;里边的所有文件都会被隐藏,然后把配置放到里边,并命名为config.ini
mountPath: /var/www/config.ini
# 如果配置文件在项目根目录,如果没有subPath,则会把项目根目录里(即mountPath对应的目录)全部文件隐藏,会出现问题
# 如果配置文件在单独文件夹,则可能不需要subPath
# subPath,对应的下边的key
subPath: config.ini
- name: env
mountPath: /var/www/.env
subPath: .env
volumes:
- name: config
configMap:
name: user
items:
- key: config.ini # configMap中的key
path: config.ini # 条目的值被存储在项目的该文件中,有subPath,则subPath优先
- name: env
secret:
secretName: user
4、在任意一台机器上通过kustomise,将多个yaml压缩成一个yaml,传到各环境的master
kubectl apply -f deml.yaml
kustomize build /home/user-deploy/overlays/develop/v1.1.123 -o user.yaml
5、外部服务接口设置
域名服务
比如:
order.service.demo.com/api/v2/order/getOrderList
服务名称.service.域名/api/api版本号/模块名/操作名