k8s微服务部署服务流程

一、在测试环境的和正式环境的master上,新建namespace,多个service属于一个namespace

二、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
复制代码

三、master新建各service的secret管理mysql,redis等帐号密码

看如下项目的配置方式 mysql

咱们规定:

  • 项目中的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.yamlredis

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

复制代码

四、在任意一台机器上经过kustomise,将多个yaml压缩成一个yaml,传到各环境的master

kubectl apply -f deml.yaml
复制代码
kustomize build /home/user-deploy/overlays/develop/v1.1.123 -o user.yaml
复制代码

五、外部服务接口设置

域名服务 好比:
order.service.demo.com/api/v2/order/getOrderList 服务名称.service.域名/api/api版本号/模块名/操做名sql

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

服务通常为共享服务,为单独的命名空间