k8s微服务部署服务流程

280 阅读2分钟

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版本号/模块名/操作名

6、项目和服务是如何组织的?

服务一般为共享服务,为单独的命名空间